/* * JBoss, Home of Professional Open Source * Copyright 2008-11, Red Hat Middleware LLC, and others contributors as indicated * by the @authors tag. All rights reserved. * See the copyright.txt in the distribution for a * full listing of individual contributors. * This copyrighted material is made available to anyone wishing to use, * modify, copy, or redistribute it subject to the terms and conditions * of the GNU Lesser General Public License, v. 2.1. * This program is distributed in the hope that it will be useful, but WITHOUT A * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License, * v.2.1 along with this distribution; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ package org.savara.tools.scenario.designer.simulate; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.Launch; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.savara.common.resources.DefaultResourceLocator; import org.savara.common.resources.ResourceLocator; import org.savara.scenario.model.Role; import org.savara.scenario.model.Scenario; import org.savara.scenario.simulation.RoleSimulator; import org.savara.scenario.simulation.RoleSimulatorFactory; import org.savara.scenario.simulation.SimulationModel; import org.savara.scenario.simulation.model.RoleDetails; import org.savara.scenario.simulation.model.Simulation; import org.savara.scenario.simulation.model.SimulatorDetails; import org.savara.scenario.util.ScenarioModelUtil; import org.savara.scenario.util.SimulationModelUtil; import org.savara.tools.scenario.osgi.Activator; public class ScenarioSimulationDialog extends Dialog { private static final String SCENARIO_SIMULATOR_MAIN = "ScenarioSimulatorMain"; private static final String LAUNCH_MODE = "run"; private static final QualifiedName MODELS_QUALIFIED_NAME = new QualifiedName(Activator.PLUGIN_ID, "models"); private static final String DON_T_SIMULATE = "Don't Simulate"; //private Button m_sameModelButton=null; //private Button m_sameSimulatorButton=null; private java.util.List<Combo> m_models=new java.util.Vector<Combo>(); private java.util.List<Button> m_browseButtons=new java.util.Vector<Button>(); private java.util.List<Combo> m_modelRoles=new java.util.Vector<Combo>(); private java.util.List<Combo> m_simulatorTypes=new java.util.Vector<Combo>(); private java.io.File m_scenarioFile=null; private IFile m_scenarioIFile=null; private java.util.List<SimulationModel> m_simulationModels=new java.util.Vector<SimulationModel>(); private java.util.List<ResourceLocator> m_resourceLocators=new java.util.Vector<ResourceLocator>(); private Scenario m_scenario=null; private org.savara.tools.scenario.designer.editor.ScenarioDesigner m_designer=null; private boolean m_simulate=false; private java.util.Map<Role,RoleSimulator> m_roleSimulators=new java.util.HashMap<Role,RoleSimulator>(); //private java.util.Map<Role,SimulationContext> m_contexts=new java.util.HashMap<Role,SimulationContext>(); private Simulation m_simulation=null; private boolean f_initialConfig=true; private static final Logger logger=Logger.getLogger(ScenarioSimulationDialog.class.getName()); /* public static void main(String[] args) { Display display = new Display (); Shell shell = new Shell(display); // Register dummy role simulators RoleSimulator rs1=new org.savara.scenario.simulation.TestRoleSimulator("Test Simulator 1", true); RoleSimulator rs2=new org.savara.scenario.simulation.TestRoleSimulator("Test Simulator 2", true); RoleSimulatorFactory.register(rs1); RoleSimulatorFactory.register(rs2); ScenarioSimulationDialog ssd=new ScenarioSimulationDialog(shell); org.savara.scenario.simulation.TestSimulationHandler handler= new org.savara.scenario.simulation.TestSimulationHandler(); try { ssd.initializeScenario(new java.io.File(args[0])); ssd.setSimulationHandler(handler); ssd.open(); } catch(Exception e) { e.printStackTrace(); } } */ public ScenarioSimulationDialog(Shell parent, int style) { super (parent, style); } public ScenarioSimulationDialog(Shell parent) { this (parent, 0); } public void initializeScenario(java.io.File scenarioFile) throws IOException { m_scenarioFile = scenarioFile; java.io.InputStream is=new java.io.FileInputStream(m_scenarioFile); m_scenario = ScenarioModelUtil.deserialize(is); is.close(); } protected java.io.File getScenarioFile() { if (m_scenarioFile != null) { return(m_scenarioFile); } else if (m_scenarioIFile != null) { return(m_scenarioIFile.getRawLocation().toFile()); } return(null); } public void initializeScenario(IFile scenarioFile) throws IOException { m_scenarioIFile = scenarioFile; try { java.io.InputStream is=m_scenarioIFile.getContents(); m_scenario = ScenarioModelUtil.deserialize(is); is.close(); } catch(Exception e) { throw new IOException("Failed to load scenario", e); } } public void setScenarioDesigner(org.savara.tools.scenario.designer.editor.ScenarioDesigner designer) { m_designer = designer; } public Object open() { Shell parent = getParent(); final Shell dialog = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE); dialog.setText("Scenario Simulation"); dialog.setLayout(new FillLayout()); // Construct main area ScrolledComposite scrollingArea=new ScrolledComposite(dialog, SWT.H_SCROLL | SWT.V_SCROLL|SWT.BORDER); Composite mainArea=new Composite(scrollingArea, SWT.NONE); mainArea.setLayout(new GridLayout()); /* m_sameModelButton=new Button(mainArea, SWT.CHECK); m_sameModelButton.setText("Use same model for all roles"); m_sameModelButton.setSelection(true); m_sameSimulatorButton=new Button(mainArea, SWT.CHECK); m_sameSimulatorButton.setText("Use same simulator for all roles"); m_sameSimulatorButton.setSelection(true); m_sameModelButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { updateSameModel(); updateSameSimulatorTypes(); } }); m_sameSimulatorButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { updateSameSimulatorTypes(); } }); */ Color blue = parent.getDisplay().getSystemColor(SWT.COLOR_BLUE); for (int i=0; i < m_scenario.getRole().size(); i++) { Group rolePanel=new Group(mainArea, SWT.NONE); rolePanel.setText(m_scenario.getRole().get(i).getName()); rolePanel.setForeground(blue); FormLayout groupform = new FormLayout(); groupform.marginWidth = groupform.marginHeight = 8; rolePanel.setLayout(groupform); Label modelLabel=new Label(rolePanel, SWT.NONE); modelLabel.setText("Model:"); FormData modelLabelData = new FormData(); modelLabelData.top = new FormAttachment(6); modelLabel.setLayoutData(modelLabelData); final Combo model=new Combo(rolePanel, SWT.NONE); m_models.add(model); // Initialize model initializeModels(model); if (model.getItemCount() > 0) { model.select(0); } FormData modelData = new FormData(); modelData.left = new FormAttachment(modelLabel, 36); //modelData.right = new FormAttachment(0); modelData.width = 340; model.setLayoutData(modelData); model.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent arg0) { updateModel(m_models.indexOf(model)); /* if (model == m_models.get(0) && m_sameModelButton.getSelection()) { for (int i=1; i < m_models.size(); i++) { m_models.get(i).setText(model.getText()); updateModel(i); } } */ } }); try { m_simulationModels.add(new SimulationModel(null, null)); m_resourceLocators.add(new DefaultResourceLocator(null)); } catch(Exception e) { logger.log(Level.SEVERE, "Failed to initialize simulation model", e); } final Button browseButton=new Button(rolePanel, SWT.NONE); m_browseButtons.add(browseButton); browseButton.setText("..."); FormData browseButtonData = new FormData(); browseButtonData.left = new FormAttachment(model, 5); browseButtonData.top = new FormAttachment(0); browseButtonData.height = 20; browseButtonData.width = 25; browseButton.setLayoutData(browseButtonData); browseButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { FileDialog fd=new FileDialog(dialog); fd.setFileName(getScenarioFile().getAbsolutePath()); String path=fd.open(); if (path != null) { model.setText(path); if (f_initialConfig) { // Show dialog asking if model should be // applied to all roles MessageBox mb=new MessageBox(getParent(), SWT.ICON_QUESTION|SWT.YES|SWT.NO); mb.setMessage("Should model be set for all roles"); if (mb.open() == SWT.YES) { for (int i=0; i < m_models.size(); i++) { m_models.get(i).setText(model.getText()); updateModel(i); } } f_initialConfig = false; } } } }); Label modelRoleLabel=new Label(rolePanel, SWT.NONE); modelRoleLabel.setText("Model Role:"); FormData modelRoleLabelData = new FormData(); modelRoleLabelData.top = new FormAttachment(modelLabel, 15); modelRoleLabel.setLayoutData(modelRoleLabelData); final Combo modelRole=new Combo(rolePanel, SWT.READ_ONLY); m_modelRoles.add(modelRole); FormData modelRoleData = new FormData(); modelRoleData.left = new FormAttachment(modelRoleLabel, 5); modelRoleData.right = new FormAttachment(100); modelRoleData.top = new FormAttachment(model, 4); modelRole.setLayoutData(modelRoleData); modelRole.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { } }); Label simulatorLabel=new Label(rolePanel, SWT.NONE); simulatorLabel.setText("Simulator:"); FormData simulatorLabelData = new FormData(); simulatorLabelData.top = new FormAttachment(modelRoleLabel, 15); simulatorLabel.setLayoutData(simulatorLabelData); final Combo simulatorType=new Combo(rolePanel, SWT.READ_ONLY); m_simulatorTypes.add(simulatorType); FormData simulatorTypeData = new FormData(); simulatorTypeData.left = new FormAttachment(simulatorLabel, 13); simulatorTypeData.right = new FormAttachment(100); simulatorTypeData.top = new FormAttachment(modelRole, 5); simulatorType.setLayoutData(simulatorTypeData); final int pos=i; simulatorType.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { updateModelRoleList(pos); } }); updateModel(i); } Group buttonGroup=new Group(mainArea, SWT.NONE); GridLayout gl=new GridLayout(); gl.numColumns = 2; buttonGroup.setLayout(gl); Button okButton = new Button (buttonGroup, SWT.PUSH); okButton.setText ("&Simulate"); Button cancelButton = new Button (buttonGroup, SWT.PUSH); cancelButton.setText ("&Cancel"); buttonGroup.setSize(buttonGroup.computeSize(SWT.DEFAULT, SWT.DEFAULT, true)); buttonGroup.layout(); loadSimulation(); mainArea.setSize(mainArea.computeSize(SWT.DEFAULT, SWT.DEFAULT, true)); scrollingArea.setContent(mainArea); dialog.setDefaultButton(okButton); dialog.pack(); dialog.open(); okButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { initSimulation(); m_simulate = true; saveModels(); saveSimulation(); dialog.dispose(); } }); cancelButton.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent arg0) { widgetSelected(arg0); } public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); //updateSameModel(); //updateSameSimulatorTypes(); dialog.open(); Display display = parent.getDisplay(); while (!dialog.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } if (m_simulate) { // Run the simulation runSimulation(); } return(null); } protected void initializeModels(Combo models) { if (m_scenarioIFile != null) { try { String modelList=m_scenarioIFile.getPersistentProperty( MODELS_QUALIFIED_NAME); if (modelList != null) { String[] names=modelList.split(","); if (names != null) { for (int i=0; i < names.length; i++) { java.io.File f=new java.io.File(names[i]); if (f.exists()) { models.add(names[i]); } } } } } catch(Exception e) { logger.severe("Failed to get list of models associated with scenario '"+ m_scenarioIFile.getName()+"'"); } } } protected void saveModels() { if (m_scenarioIFile != null) { try { java.util.List<String> modelFiles=new java.util.Vector<String>(); // First add the selected models for (Combo model : m_models) { if (modelFiles.contains(model.getText()) == false) { modelFiles.add(model.getText()); } } // Add remaining entries for (Combo model : m_models) { for (int i=0; i < model.getItemCount(); i++) { if (modelFiles.contains(model.getItem(i)) == false) { modelFiles.add(model.getItem(i)); } } } String str=null; for (String name : modelFiles) { if (str == null) { str = name; } else { str += ","+name; } } m_scenarioIFile.setPersistentProperty(MODELS_QUALIFIED_NAME, str); } catch(Exception e) { logger.severe("Failed to save list of models associated with scenario '"+ m_scenarioIFile.getName()+"'"); } } } protected void saveSimulation() { if (m_scenarioIFile != null) { IFile simFile=null; String filename=m_scenarioIFile.getName(); filename = filename.substring(0, filename.length()-m_scenarioIFile.getFileExtension().length()-1); filename += ".simulation"; if (m_scenarioIFile.getParent() instanceof IFolder) { simFile = ((IFolder)m_scenarioIFile.getParent()).getFile(filename); } else if (m_scenarioIFile.getParent() instanceof IProject) { simFile = ((IProject)m_scenarioIFile.getParent()).getFile(filename); } if (simFile != null) { try { java.io.ByteArrayOutputStream os=new java.io.ByteArrayOutputStream(); SimulationModelUtil.serialize(m_simulation, os); String str=os.toString(); os.close(); java.io.ByteArrayInputStream is=new java.io.ByteArrayInputStream(str.getBytes()); if (simFile.exists() == false) { simFile.create(is, true, null); } else { simFile.setContents(is, true, false, null); } is.close(); } catch(Exception e) { logger.log(Level.SEVERE, "Failed to save simulation", e); } } } } protected void loadSimulation() { if (m_scenarioIFile != null) { IFile simFile=null; String filename=m_scenarioIFile.getName(); filename = filename.substring(0, filename.length()-m_scenarioIFile.getFileExtension().length()-1); filename += ".simulation"; if (m_scenarioIFile.getParent() instanceof IFolder) { simFile = ((IFolder)m_scenarioIFile.getParent()).getFile(filename); } else if (m_scenarioIFile.getParent() instanceof IProject) { simFile = ((IProject)m_scenarioIFile.getParent()).getFile(filename); } if (simFile != null && simFile.exists()) { f_initialConfig=false; try { java.io.InputStream is=simFile.getContents(); m_simulation = SimulationModelUtil.deserialize(is); is.close(); } catch(Exception e) { logger.log(Level.SEVERE, "Failed to save simulation", e); } if (m_simulation != null) { for (int i=0; i < m_scenario.getRole().size(); i++) { boolean f_initialized=false; // Check if role details are available for role for (int j=0; f_initialized == false && j < m_simulation.getRoles().size(); j++) { RoleDetails rd=m_simulation.getRoles().get(j); if (rd.getScenarioRole().equals(m_scenario.getRole().get(i).getName())) { m_models.get(i).setText(rd.getModel()); int index=m_simulatorTypes.get(i).indexOf(rd.getSimulator()); if (index != -1) { m_simulatorTypes.get(i).select(index); updateModelRoleList(i); } if (rd.getModelRole() != null) { m_modelRoles.get(i).setText(rd.getModelRole()); } f_initialized = true; } } if (f_initialized == false) { m_simulatorTypes.get(i).select(0); m_models.get(i).setText(""); } } } } } } /* protected void updateSameSimulatorTypes() { for (int i=1; i < m_simulatorTypes.size(); i++) { if (m_sameSimulatorButton.getSelection()) { m_simulatorTypes.get(i).setEnabled(false); int index=m_simulatorTypes.get(i).indexOf(m_simulatorTypes.get(0).getText()); if (index == -1) { index = 0; } m_simulatorTypes.get(i).select(index); } else { m_simulatorTypes.get(i).setEnabled(true); } } } protected void updateSameModel() { for (int i=1; i < m_models.size(); i++) { if (m_sameModelButton.getSelection()) { m_models.get(i).setText(m_models.get(0).getText()); m_simulationModels.set(i, m_simulationModels.get(0)); m_models.get(i).setEnabled(false); //m_models.get(i).setEditable(false); m_sameSimulatorButton.setSelection(true); m_sameSimulatorButton.setEnabled(true); } else { m_models.get(i).setEnabled(true); //m_models.get(i).setEditable(true); m_sameSimulatorButton.setSelection(false); m_sameSimulatorButton.setEnabled(false); } updateModel(i); } } */ protected void updateModel(int index) { // Initialize the simulation model java.io.InputStream is=null; try { is = new java.io.FileInputStream(m_models.get(index).getText()); } catch(Exception e) { logger.log(Level.FINE, "Unable to get input stream for '"+ m_models.get(index).getText()+"'", e); } try { java.io.File modelFile=new java.io.File(m_models.get(index).getText().trim()); SimulationModel sm=new SimulationModel(modelFile.getAbsolutePath(), is); m_simulationModels.set(index, sm); m_resourceLocators.set(index, new DefaultResourceLocator(modelFile.getParentFile())); } catch(Exception e) { logger.log(Level.SEVERE, "Failed to initialize simulation model for '"+ m_models.get(index).getText()+"'", e); } m_simulatorTypes.get(index).removeAll(); m_simulatorTypes.get(index).add(DON_T_SIMULATE); java.util.List<RoleSimulator> rsims=RoleSimulatorFactory.getRoleSimulators(); for (RoleSimulator rsim : rsims) { if (rsim.isSupported(m_simulationModels.get(index))) { m_simulatorTypes.get(index).add(rsim.getName()); Object model=rsim.getModel(m_simulationModels.get(index), m_resourceLocators.get(index)); m_modelRoles.get(index).removeAll(); int mainDefaultRole=-1; int secondaryDefaultRole=-1; // Model type may be supported, but might not be retrievable // in the Eclipse environment, but that is ok as simulation // is being done externally with classpath including user's // project if (model != null) { java.util.List<Role> roles=rsim.getModelRoles(model); for (Role role : roles) { if (role.getName().endsWith(m_scenario.getRole().get(index).getName())) { mainDefaultRole = m_modelRoles.get(index).getItemCount(); } if (role.getName().indexOf(m_scenario.getRole().get(index).getName()) != -1) { secondaryDefaultRole = m_modelRoles.get(index).getItemCount(); } m_modelRoles.get(index).add(role.getName()); } } if (mainDefaultRole != -1) { m_modelRoles.get(index).select(mainDefaultRole); } else if (secondaryDefaultRole != -1) { m_modelRoles.get(index).select(secondaryDefaultRole); } } } m_simulatorTypes.get(index).select(m_simulatorTypes.get(index).getItemCount() > 0 ? 1 : 0); updateModelRoleList(index); } protected void updateModelRoleList(int index) { RoleSimulator rsim=RoleSimulatorFactory.getRoleSimulator(m_simulatorTypes.get(index).getText()); if (rsim != null) { Object model=rsim.getModel(m_simulationModels.get(index), m_resourceLocators.get(index)); m_modelRoles.get(index).removeAll(); int mainDefaultRole=-1; int secondaryDefaultRole=-1; // Model type may be supported, but might not be retrievable // in the Eclipse environment, but that is ok as simulation // is being done externally with classpath including user's // project if (model != null) { java.util.List<Role> roles=rsim.getModelRoles(model); for (Role role : roles) { if (role.getName().endsWith(m_scenario.getRole().get(index).getName())) { mainDefaultRole = m_modelRoles.get(index).getItemCount(); } if (role.getName().indexOf(m_scenario.getRole().get(index).getName()) != -1) { secondaryDefaultRole = m_modelRoles.get(index).getItemCount(); } m_modelRoles.get(index).add(role.getName()); } } if (mainDefaultRole != -1) { m_modelRoles.get(index).select(mainDefaultRole); } else if (secondaryDefaultRole != -1) { m_modelRoles.get(index).select(secondaryDefaultRole); } } } protected void initSimulation() { try { m_simulation = new Simulation(); m_simulation.setScenario(getScenarioFile().getAbsolutePath()); java.util.List<RoleSimulator> simulators=new java.util.Vector<RoleSimulator>(); for (int i=0; i < m_scenario.getRole().size(); i++) { RoleSimulator rsim=RoleSimulatorFactory.getRoleSimulator(m_simulatorTypes.get(i).getText()); if (rsim != null) { if (simulators.contains(rsim) == false) { simulators.add(rsim); } RoleDetails roleDetails=new RoleDetails(); roleDetails.setSimulator(rsim.getName()); roleDetails.setScenarioRole(m_scenario.getRole().get(i).getName()); roleDetails.setModel(m_simulationModels.get(i).getName()); Object model=rsim.getModel(m_simulationModels.get(i), m_resourceLocators.get(i)); if (model != null) { java.util.List<Role> roles=rsim.getModelRoles(model); Role selected=null; for (int j=0; selected == null && j < roles.size(); j++) { if (roles.get(j).getName().equals(m_modelRoles.get(i).getText())) { selected = roles.get(j); } } if (selected != null || roles.size() == 0) { m_roleSimulators.put(m_scenario.getRole().get(i), rsim); //DefaultSimulationContext context=new DefaultSimulationContext(getScenarioFile()); if (roles.size() != 0) { //context.setModel(model); //} else { roleDetails.setModelRole(selected.getName()); //context.setModel(rsim.getModelForRole(model, selected, // m_resourceLocators.get(i))); } //m_contexts.put(m_scenario.getRole().get(i), context); } else { logger.severe("Missing role '"+m_modelRoles.get(i).getText()+"'"); } } m_simulation.getRoles().add(roleDetails); } } for (RoleSimulator rsim : simulators) { SimulatorDetails sd=new SimulatorDetails(); sd.setClassName(rsim.getClass().getName()); sd.setName(rsim.getName()); m_simulation.getSimulators().add(sd); } } catch(Exception e) { logger.log(Level.SEVERE, "Failed to initialise simulation", e); } } protected void runSimulation() { ScenarioDesignerSimulationLauncher launcher= new ScenarioDesignerSimulationLauncher(getParent().getDisplay(), m_scenario, m_designer.getScenarioSimulation()); try { ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); ILaunchConfigurationType type = manager.getLaunchConfigurationType( ScenarioSimulationLaunchConfigurationConstants.LAUNCH_CONFIG_TYPE); ILaunchConfiguration[] configurations = manager.getLaunchConfigurations(type); for (int i = 0; i < configurations.length; i++) { ILaunchConfiguration configuration = configurations[i]; if (configuration.getName().equals(SCENARIO_SIMULATOR_MAIN)) { configuration.delete(); break; } } ILaunchConfigurationWorkingCopy workingCopy = type.newInstance(null, SCENARIO_SIMULATOR_MAIN); // Find projects associated with specified models String projectNames=getProjectNames(); workingCopy.setAttribute(ScenarioSimulationLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectNames); workingCopy.setAttribute(ScenarioSimulationLaunchConfigurationConstants.ATTR_SCENARIO, m_designer.getFile().getProjectRelativePath().toString()); java.io.File simulationFile=getSimulationFile(); workingCopy.setAttribute(ScenarioSimulationLaunchConfigurationConstants.ATTR_SIMULATION_FILE, simulationFile.getAbsolutePath()); ILaunchConfiguration configuration=workingCopy.doSave(); Launch launch=new Launch(configuration, LAUNCH_MODE, null); launcher.launch(configuration, LAUNCH_MODE, launch, null); ScenarioSimulation view=m_designer.getScenarioSimulation(); view.startSimulation(); m_designer.updateEditPartActions(); } catch(Exception e) { logger.log(Level.SEVERE, "Failed to simulate", e); } } protected java.io.File getSimulationFile() throws Exception { java.io.File ret=java.io.File.createTempFile("savara", ".simulation"); ret.deleteOnExit(); java.io.FileOutputStream os=new java.io.FileOutputStream(ret); SimulationModelUtil.serialize(m_simulation, os); os.close(); return(ret); } protected String getProjectNames() { java.util.List<String> projects=new java.util.Vector<String>(); projects.add(m_designer.getFile().getProject().getName()); for (int i=0; i < m_models.size(); i++) { IFile modelFile=ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(m_simulationModels.get(i).getName())); if (modelFile != null && modelFile.getProject() != null) { String project=modelFile.getProject().getName(); if (projects.contains(project)==false) { projects.add(project); } } } String ret=""; for (int i=0; i < projects.size(); i++) { if (i > 0) { ret += ","; } ret += projects.get(i); } if (logger.isLoggable(Level.FINE)) { logger.fine("Simulating with projects: "+ret); } return(ret); } }