/** * Copyright 2005 Alcatel, OSP. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.alcatel.jsce.backend; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.alcatel.jsce.alarm.Alarm; import org.alcatel.jsce.alarm.AlarmManager; import org.alcatel.jsce.alarm.AlarmsCatalog; import org.alcatel.jsce.keystore.KeystoreManager; import org.alcatel.jsce.servicecreation.graph.GraphicalManager; import org.alcatel.jsce.statevent.EventCatalog; import org.alcatel.jsce.statevent.EventManager; import org.alcatel.jsce.statevent.EventType; import org.alcatel.jsce.util.jad.DecompilatorBridge; import org.alcatel.jsce.util.jad.IDecompiler; import org.alcatel.jsce.util.log.SCELogger; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Rectangle; import org.mobicents.eclipslee.servicecreation.PaddingManager; import org.mobicents.eclipslee.servicecreation.ServiceCreationPlugin; import org.mobicents.eclipslee.util.slee.xml.components.SbbXML; /** * Description: * <p> * This object is the main signal handler between the Eclipse front-end and * the back-end. * * <p> * * @author Skhiri dit Gabouje Sabri * */ public class MainControl { /** Specialized object for the Alarms catalogs management*/ private AlarmManager alarmManager = null; /** Specialized object for the Stat event catlogs management*/ private EventManager eventManager = null; /** Specialized object for the keystore management*/ private KeystoreManager keystoreManager = null; /** The URL of the plug-in location*/ private URL configDirectory = null; /** The jad bridge*/ private DecompilatorBridge jadBrigde = null; /** The graphical manager for drawing graphs*/ private GraphicalManager graphicalManager = null; /** The padding Manager which hold data for a client state editor*/ private PaddingManager paddingManager = null; /** * Constructor. */ public MainControl() { init(); } /////////////////////////////////////////// // // Init. // ////////////////////////////////////////// private void init() { try { alarmManager = new AlarmManager(); eventManager = new EventManager(); keystoreManager = new KeystoreManager(); jadBrigde = DecompilatorBridge.getInstance(); graphicalManager = new GraphicalManager(); paddingManager = new PaddingManager(); /* //URL catalogPath = ServiceCreationPlugin.getDefault().find(new Path("catalog")); URL catalogPath = FileLocator.find(ServiceCreationPlugin.getDefault().getBundle(), new Path("catalog"), null); //URL resolve = Platform.resolve(catalogPath); URL resolve = FileLocator.resolve(catalogPath); File resolveFile = new File(resolve.getFile()); File configFile = resolveFile.getParentFile(); configDirectory = configFile.toURL(); SCELogger.logInfo("Config Directory: "+ configDirectory +" , resolve: "+ resolve+ ", resolveFile "+ resolveFile.toString() + ", configFile "+ configFile); */ }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /////////////////////////////////////////// // // Access to backend features. // ////////////////////////////////////////// /** * @return the list of all alarm catalogs in the configuration directory * and in all external catalog directories. */ public List getAllAlarmCatalogs() { return this.alarmManager.getAllAlarmCatalogs(configDirectory); } /** * @return the list of all stat event catalogs in the configuration directory * and in all external catalog directories. A list of @link EventCatalog */ public List getAllStatEventCatalogs() { return this.eventManager.getAllStatEventCatalogs(configDirectory); } /** * Opens all the alarm catalog XML files in the sepcifesd directory. * * @param fileLocation * is the absolute URL path of the catalog directory. * @return a list of @link AlarmsCatalog */ public List getAllAlarmCatalogs(URL directory) { return this.alarmManager.getAllCatalog(directory); } /** * Opens all the stat event catalog XML files in the sepcified directory. * * @param fileLocation * is the absolute URL path of the catalog directory. * @return a list of @link EventCatalog */ public List getAllStatEventCatalogs(URL directory) { return this.eventManager.getAllCatalog(directory); } /** * Add an alarm catalog location. * @param catalogLocation The url of the new alarm catalog location. */ public void addAlarmCatalogURL(URL catalogLocation){ /*Warning for the moment we allow only one location, then we * clear the list before adding the new url*/ this.alarmManager.getExternalAlarmCatalogURL().clear(); this.alarmManager.getExternalAlarmCatalogURL().add(catalogLocation); } /** * Add an Stat Event catalog location. * @param catalogLocation The url of the new stat event catalog location. */ public void addStatEventCatalogURL(URL catalogLocation){ /*Warning for the moment we allow only one location, then we * clear the list before adding the new url*/ this.eventManager.getExternalStatEventCatalogURLs().clear(); this.eventManager.getExternalStatEventCatalogURLs().add(catalogLocation); } /** * @param dirLocation the directory location where we are looking for the catalog * @param name the catalog name * @param feature the feature number * @return the catalog we are looking for */ public EventCatalog lookupStatEventCatalog(URL dirLocation, String name, String feature) { List catalogs = getAllStatEventCatalogs(dirLocation); for (Iterator iter = catalogs.iterator(); iter.hasNext();) { EventCatalog catalog_i = (EventCatalog) iter.next(); if(catalog_i.getFeatureID().equals(feature) && catalog_i.getCatalogName().equals(name)){ return catalog_i; } } return null; } /** * @param source the source code of the java file from which we want to extract alarms. * @param catalog the catalog in which we must add the new alarms * @return a map with keys the alarms: a_k =-> list of method call using the alarm a_k */ public HashMap extractAllarmsFromSource(String source, AlarmsCatalog catalog){ return alarmManager.extractAllAlarmsfromSources(source,catalog); } /** * @param source the source code of the java file from which we want to extract stat events. * @param catalog the catalog in which we must add the new stat events * @return the list of event stat created. */ public List extractAllStatEventsFromSource(String source, EventType catalog) { return eventManager.extractAllStatEvents(source, catalog); } /** * @return the list of external catalog URLs * */ public List getAlarmCatalogURLs(){ return this.alarmManager.getExternalAlarmCatalogURL(); } /** * @return the list of external catalog URLs */ public List getStatEventCatalogURLs(){ return this.eventManager.getExternalStatEventCatalogURLs(); } /** * Creates a new alarm in the specified catalog. * @param alarm the OSP alarm to create * @param catalog the catalog in which we must create the new alarm */ public void createAlarmInCatalog(Alarm alarm, AlarmsCatalog catalog) { this.alarmManager.createAlarmInCatalog(alarm, catalog); } /** * Writes the alarm catalog xml tree in an xml file, and creates it if it's needed. * @param catalog */ public void createAlarmCatalog(AlarmsCatalog catalog){ this.alarmManager.createCatalog(catalog); } /** * Writes the stat catalog xml tree in an xml file, and creates it if it's needed. * @param catalog */ public void createStatEventCatalog(EventCatalog catalog){ this.eventManager.createNewEventStat( catalog); } /** * @param selected_stat the list of stat ID (OSP-flavoured) * @return the list of stat events corresponding to the ID cotnained in the list. */ public List extractStatEventFromId(List selected_stat) { return this.eventManager.extractStatEventFromId(selected_stat, getAllStatEventCatalogs() ); } /** * Extract the corresponding alarm. * @param id the OSP id of the Alarm : "osp.\<catalogSubLocation\>.alarm number */ public Alarm extractAlarmFromId(String id) { return this.alarmManager.extractAlarmFromId(id, getAllAlarmCatalogs()); } /** * Loads the keystore parameters in the keystore manager * @param location The keystore location* * @param alias The alias to sign under * @param storePass Password for keystore integrity * @param keyStoreKeyPass password for private key (if different) */ public void setKeystoreAttribute(File location, String alias, String storePass, String keyStoreKeyPass){ this.keystoreManager.setKeystoreLocation(location); this.keystoreManager.setKeyPass(keyStoreKeyPass); this.keystoreManager.setAlias(alias); this.keystoreManager.setStorePass(storePass); } /** * @return the keystore location set in the keystore manager */ public File getKeyStoreAttributeLocation(){ return this.keystoreManager.getKeystoreLocation(); } /** * @return the keystore storepass set in the keystore manager */ public String getKeyStoreAttributeStorePass(){ return this.keystoreManager.getStorePass(); } /** * @return the keystore alias set in the keystore manager */ public String getKeyStoreAttributeAlias(){ return this.keystoreManager.getAlias(); } /** * @return the keystore alias set in the keystore manager */ public String getKeyStoreAttributeKeyPass(){ return this.keystoreManager.getKeyPass(); } /////////////////////////////////////////// // // J2EE generation // ////////////////////////////////////////// /////////////////////////////////////////// // // Jad bridge // ////////////////////////////////////////// /** * @return the jad bridge instance. */ public IDecompiler getDecompilerBridge(){ return jadBrigde; } /////////////////////////////////////////// // // Graph Drawing // ////////////////////////////////////////// /** * Build the graphical representation of this sbb as a comound directed graph. * @param sbbXML the sbb to represent * @param projectName the project name * @param drawing the drawing in which we will draw the graph * @return the new drawing */ public void buildSbbCompoundGraphFigure(SbbXML sbbXML, Figure figure, String projectName) { this.graphicalManager.drawCompoundSbbgraph(sbbXML, figure, projectName); } /** * @return the current drawing */ public IFigure getCurrentDrawing(){ IFigure current = this.graphicalManager.getCurrentDrawing(); if(current == null){ return new Figure(); }else{ return current; } } /** * @return Returns the graphicalManager. */ public GraphicalManager getSelectionListener() { return graphicalManager; } /** * List all nodes which intersect the selection area. * @param children the list of figure contained in the drawing * @param bounds the selection area bound * @return the list of nodes. */ public List getNodeInstersected(List children, Rectangle bounds) { return this.graphicalManager.getNodeInstersected(children, bounds); } /** * @param selectedNodes the list of nodes for which we are looking for figures. * @return the list of figure corresponding to the list of nodes */ public List getFiguresFromNodes(List selectedNodes) { return this.graphicalManager.getFiguresFromNodes(selectedNodes); } /** * @return Returns the paddingManager. */ public PaddingManager getPaddingManager() { return paddingManager; } /** * @param paddingManager The paddingManager to set. */ public void setPaddingManager(PaddingManager paddingManager) { this.paddingManager = paddingManager; } /** * Set the padding for a state editor client. */ public void setPaddingAttribute(int top, int bottom, int left, int right) { this.paddingManager.setBottom(bottom); this.paddingManager.setTop(top); this.paddingManager.setLeft(left); this.paddingManager.setRigth(right); } }