package it.isislab.sof.client.application.ui.newsimulation; import it.isislab.sof.client.application.ui.tabwithclose.ProgressbarDialog; import it.isislab.sof.core.model.parameters.xsd.domain.Domain; import it.isislab.sof.core.model.parameters.xsd.domain.ParameterDomain; import it.isislab.sof.core.model.parameters.xsd.domain.ParameterDomainContinuous; import it.isislab.sof.core.model.parameters.xsd.domain.ParameterDomainDiscrete; import it.isislab.sof.core.model.parameters.xsd.domain.ParameterDomainListString; import it.isislab.sof.core.model.parameters.xsd.elements.Parameter; import it.isislab.sof.core.model.parameters.xsd.elements.ParameterDouble; import it.isislab.sof.core.model.parameters.xsd.elements.ParameterLong; import it.isislab.sof.core.model.parameters.xsd.elements.ParameterString; import it.isislab.sof.core.model.parameters.xsd.input.Input; import it.isislab.sof.core.model.parameters.xsd.input.Inputs; import it.isislab.sof.core.model.parameters.xsd.output.Output; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.io.IOException; import java.util.ArrayList; import javax.swing.*; import javax.swing.border.*; /* */ import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import com.sun.opengl.util.FileUtil; /** * @author Red red */ public class NewInputOutput extends JPanel { public NewInputOutput(NewSimulationProcess newSimulationProcess) { sproc=newSimulationProcess; initComponents(); } private NewSimulationProcess sproc=null; private void initComponents() { panelInputDetails = new JPanel(); scrollPane1 = new JScrollPane(); rootInputNode = new DefaultMutableTreeNode("Inputs"); treeModelInput = new DefaultTreeModel(rootInputNode); treeInput = new JTree(treeModelInput); panelNewInput = new JPanel(); panelInnerInput = new JPanel(); labelRounds = new JLabel(); labelInputVarType = new JLabel(); labelInputVarName = new JLabel(); textFieldRounds = new JTextField(); comboBoxInputVarTypeModel = new DefaultComboBoxModel<String>(); comboBoxInputVarType = new JComboBox<String>(comboBoxInputVarTypeModel); comboBoxInputVarTypeModel.addElement(new String ("-- Select a parameter type --")); comboBoxInputVarTypeModel.addElement(new String ("continuous")); comboBoxInputVarTypeModel.addElement(new String ("discrete")); comboBoxInputVarTypeModel.addElement(new String ("string")); textFieldInputValue = new JTextField(); labelInputValue = new JLabel(); comboBoxInputVarNameModel = new DefaultComboBoxModel<String>(); comboBoxInputVarName = new JComboBox<String>(comboBoxInputVarNameModel); buttonAddParam = new JButton(); panel5 = new JPanel(); buttonNewInput = new JButton(); buttonEditInput = new JButton(); buttonRemoveInput = new JButton(); panelOutputDetails = new JPanel(); scrollPane2 = new JScrollPane(); rootOutputNode = new DefaultMutableTreeNode("Output"); treeModelOutput = new DefaultTreeModel(rootOutputNode); treeOutput = new JTree(treeModelOutput); panelNewOutput = new JPanel(); panelInnerOutput = new JPanel(); labelOutputVarType = new JLabel(); labelOutputVarName = new JLabel(); comboBoxOutputVarTypeModel = new DefaultComboBoxModel<String>(); comboBoxOutputVarType = new JComboBox<String>(comboBoxOutputVarTypeModel); comboBoxOutputVarTypeModel.addElement(new String (COMBOBOX_ZERO_INDEX_ELEMENT)); comboBoxOutputVarTypeModel.addElement(new String ("continuous")); comboBoxOutputVarTypeModel.addElement(new String ("discrete")); comboBoxOutputVarTypeModel.addElement(new String ("string")); comboBoxOutputVarNameModel = new DefaultComboBoxModel<String>(); comboBoxOutputVarName = new JComboBox<String>(comboBoxOutputVarNameModel); labelOtherVarname = new JLabel(); textFieldOtherVarName = new JTextField(); textFieldOtherVarName.setEnabled(false); panel6 = new JPanel(); buttonAddOutput = new JButton(); buttonEditOutput = new JButton(); buttonRemoveOutput = new JButton(); panel7 = new JPanel(); buttonSave = new JButton(); buttonPrev = new JButton(); panelInnerInput.setVisible(false); //======== panelInputDetails ======== { panelInputDetails.setBorder(new TitledBorder("Input")); //======== scrollPane1 ======== { scrollPane1.setViewportView(treeInput); } //======== panelNewInput ======== { panelNewInput.setBorder(new TitledBorder("New Input")); panelNewInput.setPreferredSize(new Dimension(378, 298)); //======== panelInnerInput ======== { //---- labelRounds ---- labelRounds.setText("rounds"); //---- labelInputVarType ---- labelInputVarType.setText("variable type"); //---- labelInputVarName ---- labelInputVarName.setText("variable name"); //---- labelInputValue ---- labelInputValue.setText("value"); buttonAddParam.setText("Add param"); GroupLayout panelInnerInputLayout = new GroupLayout(panelInnerInput); panelInnerInput.setLayout(panelInnerInputLayout); panelInnerInputLayout.setHorizontalGroup( panelInnerInputLayout.createParallelGroup() .addGroup(panelInnerInputLayout.createSequentialGroup() .addContainerGap() .addGroup(panelInnerInputLayout.createParallelGroup() .addGroup(panelInnerInputLayout.createSequentialGroup() .addGroup(panelInnerInputLayout.createParallelGroup() .addComponent(labelRounds, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE) .addComponent(labelInputVarName, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE) .addComponent(labelInputVarType, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE)) .addGroup(panelInnerInputLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addGroup(panelInnerInputLayout.createSequentialGroup() .addGap(29, 29, 29) .addGroup(panelInnerInputLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, false) .addComponent(comboBoxInputVarType, GroupLayout.DEFAULT_SIZE, 177, Short.MAX_VALUE) .addComponent(textFieldRounds, GroupLayout.DEFAULT_SIZE, 177, Short.MAX_VALUE))) .addGroup(GroupLayout.Alignment.TRAILING, panelInnerInputLayout.createSequentialGroup() .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE) .addComponent(comboBoxInputVarName, GroupLayout.PREFERRED_SIZE, 177, GroupLayout.PREFERRED_SIZE)))) .addGroup(panelInnerInputLayout.createSequentialGroup() .addGroup(panelInnerInputLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, false) .addComponent(buttonAddParam, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE) .addComponent(labelInputValue, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE)) .addGap(29, 29, 29) .addComponent(textFieldInputValue, GroupLayout.PREFERRED_SIZE, 177, GroupLayout.PREFERRED_SIZE))) .addContainerGap(46, Short.MAX_VALUE)) ); panelInnerInputLayout.setVerticalGroup( panelInnerInputLayout.createParallelGroup() .addGroup(panelInnerInputLayout.createSequentialGroup() .addContainerGap() .addGroup(panelInnerInputLayout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(labelRounds, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addComponent(textFieldRounds, GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)) .addGap(28, 28, 28) .addGroup(panelInnerInputLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelInputVarType, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addComponent(comboBoxInputVarType, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(27, 27, 27) .addGroup(panelInnerInputLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelInputVarName, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addComponent(comboBoxInputVarName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(30, 30, 30) .addGroup(panelInnerInputLayout.createParallelGroup() .addComponent(labelInputValue, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addGroup(panelInnerInputLayout.createSequentialGroup() .addGap(3, 3, 3) .addComponent(textFieldInputValue, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 50, Short.MAX_VALUE) .addComponent(buttonAddParam) .addContainerGap()) ); } GroupLayout panelNewInputLayout = new GroupLayout(panelNewInput); panelNewInput.setLayout(panelNewInputLayout); panelNewInputLayout.setHorizontalGroup( panelNewInputLayout.createParallelGroup() .addGroup(GroupLayout.Alignment.TRAILING, panelNewInputLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerInput, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); panelNewInputLayout.setVerticalGroup( panelNewInputLayout.createParallelGroup() .addGroup(GroupLayout.Alignment.TRAILING, panelNewInputLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerInput, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); } //======== panel5 ======== { //---- buttonAddInput ---- buttonNewInput.setText("New"); //---- buttonEditInput ---- buttonEditInput.setText("Edit"); //---- buttonRemoveInput ---- buttonRemoveInput.setText("Remove"); GroupLayout panel5Layout = new GroupLayout(panel5); panel5.setLayout(panel5Layout); panel5Layout.setHorizontalGroup( panel5Layout.createParallelGroup() .addGroup(panel5Layout.createSequentialGroup() .addComponent(buttonNewInput) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonEditInput) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 246, Short.MAX_VALUE) .addComponent(buttonRemoveInput)) ); panel5Layout.setVerticalGroup( panel5Layout.createParallelGroup() .addGroup(panel5Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(buttonNewInput) .addComponent(buttonEditInput) .addComponent(buttonRemoveInput)) ); } GroupLayout panelInputDetailsLayout = new GroupLayout(panelInputDetails); panelInputDetails.setLayout(panelInputDetailsLayout); panelInputDetailsLayout.setHorizontalGroup( panelInputDetailsLayout.createParallelGroup() .addGroup(panelInputDetailsLayout.createSequentialGroup() .addContainerGap() .addGroup(panelInputDetailsLayout.createParallelGroup() .addComponent(panel5, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(scrollPane1, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 390, Short.MAX_VALUE) .addComponent(panelNewInput, GroupLayout.DEFAULT_SIZE, 390, Short.MAX_VALUE)) .addContainerGap()) ); panelInputDetailsLayout.setVerticalGroup( panelInputDetailsLayout.createParallelGroup() .addGroup(panelInputDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(scrollPane1, GroupLayout.PREFERRED_SIZE, 336, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(panel5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelNewInput, GroupLayout.PREFERRED_SIZE, 334, GroupLayout.PREFERRED_SIZE) .addContainerGap(36, Short.MAX_VALUE)) ); } //======== panelOutputDetails ======== { panelOutputDetails.setBorder(new TitledBorder("Output")); panelOutputDetails.setPreferredSize(new Dimension(424, 774)); //======== scrollPane2 ======== { scrollPane2.setViewportView(treeOutput); } //======== panelNewOutput ======== { panelNewOutput.setBorder(new TitledBorder("New Output")); panelNewOutput.setPreferredSize(new Dimension(378, 298)); //======== panelInnerInput2 ======== { panelInnerOutput.setPreferredSize(new Dimension(356, 288)); //---- labelOutputVarType ---- labelOutputVarType.setText("variable type"); //---- labelOutputVarName ---- labelOutputVarName.setText("variable name"); labelOtherVarname.setText("other"); GroupLayout panelInnerOutputLayout = new GroupLayout(panelInnerOutput); panelInnerOutput.setLayout(panelInnerOutputLayout); panelInnerOutputLayout.setHorizontalGroup( panelInnerOutputLayout.createParallelGroup() .addGroup(panelInnerOutputLayout.createSequentialGroup() .addContainerGap() .addGroup(panelInnerOutputLayout.createParallelGroup() .addGroup(panelInnerOutputLayout.createSequentialGroup() .addComponent(labelOutputVarType, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE) .addGap(29, 29, 29) .addComponent(comboBoxOutputVarType, GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE)) .addGroup(panelInnerOutputLayout.createSequentialGroup() .addGroup(panelInnerOutputLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, false) .addComponent(labelOtherVarname, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE) .addComponent(labelOutputVarName, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE) .addGroup(panelInnerOutputLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addComponent(comboBoxOutputVarName, GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE) .addComponent(textFieldOtherVarName, GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE)))) .addContainerGap()) ); panelInnerOutputLayout.setVerticalGroup( panelInnerOutputLayout.createParallelGroup() .addGroup(panelInnerOutputLayout.createSequentialGroup() .addContainerGap() .addGroup(panelInnerOutputLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelOutputVarType, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addComponent(comboBoxOutputVarType, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(27, 27, 27) .addGroup(panelInnerOutputLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelOutputVarName, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE) .addComponent(comboBoxOutputVarName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(panelInnerOutputLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelOtherVarname, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE) .addComponent(textFieldOtherVarName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addContainerGap(146, Short.MAX_VALUE)) ); } GroupLayout panelNewOutputLayout = new GroupLayout(panelNewOutput); panelNewOutput.setLayout(panelNewOutputLayout); panelNewOutputLayout.setHorizontalGroup( panelNewOutputLayout.createParallelGroup() .addGroup(GroupLayout.Alignment.TRAILING, panelNewOutputLayout.createSequentialGroup() .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panelInnerOutput, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); panelNewOutputLayout.setVerticalGroup( panelNewOutputLayout.createParallelGroup() .addGroup(panelNewOutputLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerOutput, GroupLayout.DEFAULT_SIZE, 285, Short.MAX_VALUE) .addContainerGap()) ); } //======== panel6 ======== { //---- buttonAddOutput ---- buttonAddOutput.setText("Add"); //---- buttonEditOutput ---- buttonEditOutput.setText("Edit"); //---- buttonRemoveOutput ---- buttonRemoveOutput.setText("Remove"); GroupLayout panel6Layout = new GroupLayout(panel6); panel6.setLayout(panel6Layout); panel6Layout.setHorizontalGroup( panel6Layout.createParallelGroup() .addGroup(panel6Layout.createSequentialGroup() .addComponent(buttonAddOutput) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonEditOutput) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonRemoveOutput)) ); panel6Layout.setVerticalGroup( panel6Layout.createParallelGroup() .addGroup(panel6Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(buttonAddOutput) .addComponent(buttonEditOutput) .addComponent(buttonRemoveOutput)) ); } GroupLayout panelOutputDetailsLayout = new GroupLayout(panelOutputDetails); panelOutputDetails.setLayout(panelOutputDetailsLayout); panelOutputDetailsLayout.setHorizontalGroup( panelOutputDetailsLayout.createParallelGroup() .addGroup(panelOutputDetailsLayout.createSequentialGroup() .addContainerGap() .addGroup(panelOutputDetailsLayout.createParallelGroup() .addComponent(panel6, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(scrollPane2) .addComponent(panelNewOutput, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 390, Short.MAX_VALUE)) .addContainerGap()) ); panelOutputDetailsLayout.setVerticalGroup( panelOutputDetailsLayout.createParallelGroup() .addGroup(panelOutputDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(scrollPane2, GroupLayout.PREFERRED_SIZE, 337, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(panel6, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelNewOutput, GroupLayout.PREFERRED_SIZE, 331, GroupLayout.PREFERRED_SIZE) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); } //======== panel7 ======== { //---- button9 ---- buttonSave.setText("Save"); //---- buttonPrev ---- buttonPrev.setText("Prev"); GroupLayout panel7Layout = new GroupLayout(panel7); panel7.setLayout(panel7Layout); panel7Layout.setHorizontalGroup( panel7Layout.createParallelGroup() .addGroup(GroupLayout.Alignment.TRAILING, panel7Layout.createSequentialGroup() .addGap(0, 736, Short.MAX_VALUE) .addComponent(buttonPrev) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonSave)) ); panel7Layout.setVerticalGroup( panel7Layout.createParallelGroup() .addGroup(panel7Layout.createSequentialGroup() .addGroup(panel7Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(buttonSave) .addComponent(buttonPrev)) .addGap(0, 8, Short.MAX_VALUE)) ); } GroupLayout layout = new GroupLayout(this); setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup() .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup() .addComponent(panel7, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(panelInputDetails, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(panelOutputDetails, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))) .addContainerGap(58, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup() .addGroup(layout.createSequentialGroup() .addGap(33, 33, 33) .addGroup(layout.createParallelGroup() .addComponent(panelInputDetails, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(panelOutputDetails, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(panel7, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); buttonNewInput.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setInputPanel(); selectedInputVarName.clear(); inputNode = new DefaultMutableTreeNode("Input"); treeModelInput.insertNodeInto(inputNode, rootInputNode, rootInputNode.getChildCount()); } }); buttonAddParam.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode roundsNode = new DefaultMutableTreeNode("rounds: "+textFieldRounds.getText()); if(inputNode.getChildCount()==0) treeModelInput.insertNodeInto(roundsNode, inputNode, inputNode.getChildCount()); DefaultMutableTreeNode elementNode = new DefaultMutableTreeNode("param"); treeModelInput.insertNodeInto(elementNode, inputNode, inputNode.getChildCount()); selectedInputVarName.add(comboBoxInputVarName.getSelectedItem().toString()); treeModelInput.insertNodeInto(new DefaultMutableTreeNode("variableName: "+comboBoxInputVarName.getSelectedItem()), elementNode, elementNode.getChildCount()); DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(comboBoxInputVarType.getSelectedItem()); treeModelInput.insertNodeInto(typeNode, elementNode, elementNode.getChildCount()); treeModelInput.insertNodeInto(new DefaultMutableTreeNode("value: "+textFieldInputValue.getText()), typeNode, typeNode.getChildCount()); treeInput.expandPath(new TreePath(elementNode.getPath())); treeInput.expandPath(new TreePath(typeNode.getPath())); resetNewInputPanel(); } }); comboBoxInputVarType.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { comboBoxInputVarNameModel.removeAllElements(); fillInputVarNamePanel(comboBoxInputVarType.getSelectedItem().toString()); } }); comboBoxOutputVarType.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { comboBoxOutputVarNameModel.removeAllElements(); textFieldOtherVarName.setEnabled(false); fillOutputVarNamePanel(comboBoxOutputVarType.getSelectedItem().toString()); } }); comboBoxOutputVarName.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(comboBoxOutputVarName.getSelectedItem()!=null && comboBoxOutputVarName.getSelectedItem().toString().equalsIgnoreCase("other")){ textFieldOtherVarName.setEnabled(true); }else{ textFieldOtherVarName.setText(""); textFieldOtherVarName.setEnabled(false); } } }); buttonAddOutput.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { /*DefaultMutableTreeNode elementNode = new DefaultMutableTreeNode("param"); treeModelOutput.insertNodeInto(elementNode, rootOutputNode, rootOutputNode.getChildCount());*/ DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(comboBoxOutputVarType.getSelectedItem()); treeModelOutput.insertNodeInto(typeNode, rootOutputNode, rootOutputNode.getChildCount()); if(textFieldOtherVarName.isEnabled()){ selectedOutputVarName.add(textFieldOtherVarName.getText()); treeModelOutput.insertNodeInto(new DefaultMutableTreeNode("variableName: "+textFieldOtherVarName.getText()), typeNode, typeNode.getChildCount()); }else{ selectedOutputVarName.add(comboBoxOutputVarName.getSelectedItem().toString()); treeModelOutput.insertNodeInto(new DefaultMutableTreeNode("variableName: "+comboBoxOutputVarName.getSelectedItem()), typeNode, typeNode.getChildCount()); } treeOutput.expandPath(new TreePath(typeNode.getPath())); resetNewOutputPanel(); } }); buttonPrev.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { sproc.setDomainView(); } }); buttonSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { inputs = new Inputs(); output = new Output(); inputs.setsimulation(sproc.getSim()); final ProgressbarDialog pd=new ProgressbarDialog(sproc.mainFrame); pd.setVisible(true); final JProgressBar bar=pd.getProgressBar1(); pd.setTitleMessage("Saving simulation"); pd.setNoteMessage("Please wait."); bar.setIndeterminate(true); class MyTaskConnect extends Thread { public void run(){ loadInput(); loadOutput(); String tmpDir = generateXMLfiles(); pd.setTitleMessage("Loading simulation on HDFS"); pd.setNoteMessage("Please wait."); saveSimulationOnHdfs(tmpDir); removeTMPFile(tmpDir); bar.setIndeterminate(false); pd.setVisible(false); } } (new MyTaskConnect()).start(); sproc.mainFrame.getPaneWithCloseIcons().remove(sproc); } }); } private void loadInput(){ ArrayList<Input> listInput = new ArrayList<Input>(); DefaultMutableTreeNode inputNode; for(int index=0;index<rootInputNode.getChildCount(); index++){ inputNode =(DefaultMutableTreeNode) rootInputNode.getChildAt(index); if(inputNode.toString().equalsIgnoreCase("input")){ listInput.add(getInput(listInput.size()+1,inputNode)); } } inputs.setinput_list(listInput); } private void loadOutput(){ output = new Output(); ArrayList<Parameter> list_out = new ArrayList<Parameter>(); DefaultMutableTreeNode child; Parameter p; for(int index=0; index<rootOutputNode.getChildCount(); index++){ child = (DefaultMutableTreeNode)rootOutputNode.getChildAt(index); p = new Parameter(); if(child.toString().equalsIgnoreCase("continuous")){ ParameterDouble pd = new ParameterDouble(); p.setvariable_name(child.getFirstChild().toString().split(":")[1].trim()); p.setparam(pd); }else{ if(child.toString().equalsIgnoreCase("discrete")){ ParameterLong pl = new ParameterLong(); p.setvariable_name(child.getFirstChild().toString().split(":")[1].trim()); p.setparam(pl); }else{ if(child.toString().equalsIgnoreCase("string")){ ParameterString ps = new ParameterString(); p.setvariable_name(child.getFirstChild().toString().split(":")[1].trim()); p.setparam(ps); } } } list_out.add(p); } output.output_params = list_out; /*JAXBContext context; try { context = JAXBContext.newInstance(Output.class); Marshaller jaxbMarshaller = context.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(output, System.out); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ } private String generateXMLfiles(){ File f = FileUtils.getTempDirectory(); if(!f.exists()) try { f.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } JAXBContext context; Marshaller jaxbMarshaller; File tmpFile = new File(f.getAbsolutePath()+File.separator+"domain.xml"); try { context = JAXBContext.newInstance(Domain.class); jaxbMarshaller = context.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(sproc.getDomain(), System.out); jaxbMarshaller.marshal(sproc.getDomain(), tmpFile); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } tmpFile = new File(f.getAbsolutePath()+File.separator+"input.xml"); try { context = JAXBContext.newInstance(Inputs.class); jaxbMarshaller = context.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(inputs, System.out); jaxbMarshaller.marshal(inputs, tmpFile); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } tmpFile = new File(f.getAbsolutePath()+File.separator+"output.xml"); try { context = JAXBContext.newInstance(Output.class); jaxbMarshaller = context.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(output, System.out); jaxbMarshaller.marshal(output, tmpFile); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } return f.getAbsolutePath(); } private String saveSimulationOnHdfs(String tmpDir){ if(inputs.getsimulation().getLoop()){ if(inputs.getsimulation().getToolkit().equalsIgnoreCase("generic")){ sproc.mainFrame.getController().createsimulationloop( inputs.getsimulation().getToolkit(),/*MODEL TYPE MASON - NETLOGO -GENERIC*/ inputs.getsimulation().getName(),/*SIM NAME*/ tmpDir+File.separator+"domain.xml",/*domain_pathname*/ sproc.newsimpan.selcommand,/*bashCommandForRunnableFunctionSelection */ sproc.newsimpan.evalcomma,/*bashCommandForRunnableFunctionEvaluate*/ tmpDir+File.separator+"output.xml",/*output_description_filename*/ sproc.newsimpan.selpath,/*executable_selection_function_filename*/ sproc.newsimpan.evalpath,/*executable_rating_function_filename*/ inputs.getsimulation().getDescription(),/*description_simulation*/ sproc.newsimpan.simdirpath, sproc.newsimpan.simcommand); }else{ sproc.mainFrame.getController().createsimulationloop( inputs.getsimulation().getToolkit(),/*MODEL TYPE MASON - NETLOGO -GENERIC*/ inputs.getsimulation().getName(),/*SIM NAME*/ tmpDir+File.separator+"domain.xml",/*domain_pathname*/ sproc.newsimpan.selcommand,/*bashCommandForRunnableFunctionSelection */ sproc.newsimpan.evalcomma,/*bashCommandForRunnableFunctionEvaluate*/ tmpDir+File.separator+"output.xml",/*output_description_filename*/ sproc.newsimpan.selpath,/*executable_selection_function_filename*/ sproc.newsimpan.evalpath,/*executable_rating_function_filename*/ inputs.getsimulation().getDescription(),/*description_simulation*/ sproc.newsimpan.simdirpath); } }else{ if(inputs.getsimulation().getToolkit().equalsIgnoreCase("generic")){ sproc.mainFrame.getController().createsimulation( inputs.getsimulation().getToolkit(),//MODEL TYPE MASON - NETLOGO -GENERIC inputs.getsimulation().getName(),//SIM NAME tmpDir+File.separator+"input.xml",//INPUT.XML PATH tmpDir+File.separator+"output.xml",//OUTPUT.XML PATH inputs.getsimulation().getDescription(),//DESCRIPTION SIM sproc.newsimpan.simdirpath, //SIMULATION EXEC PATH sproc.newsimpan.simcommand); }else{ sproc.mainFrame.getController().createsimulation( inputs.getsimulation().getToolkit(),//MODEL TYPE MASON - NETLOGO -GENERIC inputs.getsimulation().getName(),//SIM NAME tmpDir+File.separator+"input.xml",//INPUT.XML PATH tmpDir+File.separator+"output.xml",//OUTPUT.XML PATH inputs.getsimulation().getDescription()//DESCRIPTION SIM ,sproc.newsimpan.simdirpath/*,""*/); } } return tmpDir; } private void removeTMPFile(String tmpDir){ File f = new File(tmpDir); if(!f.exists()) return; for(File c : f.listFiles()){ c.delete(); } f.delete(); } private Input getInput(int nexId,DefaultMutableTreeNode inputNode){ Input i = new Input(); i.id = nexId; DefaultMutableTreeNode child; DefaultMutableTreeNode varType; Parameter p; ArrayList<Parameter> param_list = new ArrayList<Parameter>(); for(int index=0; index<inputNode.getChildCount(); index++){ child =(DefaultMutableTreeNode) inputNode.getChildAt(index); if(child.getChildCount() > 0){ // param treeNode p = new Parameter(); for(int j=0; j<child.getChildCount(); j++){ varType =(DefaultMutableTreeNode) child.getChildAt(j); if(varType.getChildCount()==0) p.setvariable_name(varType.toString().split(":")[1].trim()); else{ String varValue = varType.getFirstChild().toString(); if(varType.toString().equalsIgnoreCase("continuous")){ ParameterDouble pd = new ParameterDouble(); pd.setvalue(Double.parseDouble(varType.getFirstChild().toString().split(":")[1].trim())); p.setparam(pd); }else{ if(varType.toString().equalsIgnoreCase("discrete")){ ParameterLong pl = new ParameterLong(); pl.setvalue(Long.parseLong(varType.getFirstChild().toString().split(":")[1].trim())); p.setparam(pl); }else{ if(varType.toString().equalsIgnoreCase("string")){ ParameterString ps = new ParameterString(); ps.setvalue(varType.getFirstChild().toString().split(":")[1].trim()); p.setparam(ps); } } } param_list.add(p); } } }else{ i.rounds = Integer.parseInt(child.toString().split(":")[1].trim()); } } i.param_element = param_list; return i; } private void resetNewInputPanel(){ comboBoxInputVarTypeModel.setSelectedItem(COMBOBOX_ZERO_INDEX_ELEMENT); comboBoxInputVarNameModel.removeAllElements(); textFieldInputValue.setText(""); } private void resetNewOutputPanel(){ comboBoxOutputVarTypeModel.setSelectedItem(COMBOBOX_ZERO_INDEX_ELEMENT); comboBoxOutputVarNameModel.removeAllElements(); } private void fillInputVarNamePanel(String varType){ if(varType.equalsIgnoreCase(COMBOBOX_ZERO_INDEX_ELEMENT)) return; Domain d = sproc.getDomain(); for(ParameterDomain pd : d.param){ if(selectedInputVarName.contains(pd.getvariable_name())) continue; Object paramObj = pd.getparameter(); if (paramObj instanceof ParameterDomainContinuous){ ParameterDomainContinuous pdc = (ParameterDomainContinuous)paramObj; if(varType.equalsIgnoreCase("continuous")) comboBoxInputVarNameModel.addElement(pd.getvariable_name()); }else{ if (paramObj instanceof ParameterDomainDiscrete){ ParameterDomainDiscrete pdd = (ParameterDomainDiscrete)paramObj; if(varType.equalsIgnoreCase("discrete")) comboBoxInputVarNameModel.addElement(pd.getvariable_name()); }else{ if (paramObj instanceof ParameterDomainListString){ ParameterDomainListString pdls = (ParameterDomainListString)paramObj; if(varType.equalsIgnoreCase("string")) comboBoxInputVarNameModel.addElement(pd.getvariable_name()); } } } } } private void fillOutputVarNamePanel(String varType){ if(varType.equalsIgnoreCase(COMBOBOX_ZERO_INDEX_ELEMENT)) return; Domain d = sproc.getDomain(); for(ParameterDomain pd : d.param){ if(selectedOutputVarName.contains(pd.getvariable_name())) continue; Object paramObj = pd.getparameter(); if (paramObj instanceof ParameterDomainContinuous){ ParameterDomainContinuous pdc = (ParameterDomainContinuous)paramObj; if(varType.equalsIgnoreCase("continuous")) comboBoxOutputVarNameModel.addElement(pd.getvariable_name()); }else{ if (paramObj instanceof ParameterDomainDiscrete){ ParameterDomainDiscrete pdd = (ParameterDomainDiscrete)paramObj; if(varType.equalsIgnoreCase("discrete")) comboBoxOutputVarNameModel.addElement(pd.getvariable_name()); }else{ if (paramObj instanceof ParameterDomainListString){ ParameterDomainListString pdls = (ParameterDomainListString)paramObj; if(varType.equalsIgnoreCase("string")) comboBoxOutputVarNameModel.addElement(pd.getvariable_name()); } } } } comboBoxOutputVarNameModel.addElement("other"); } private void setInputPanel(){ panelInnerInput.setVisible(true); comboBoxInputVarType.setSelectedIndex(0); comboBoxInputVarNameModel.removeAllElements(); textFieldInputValue.setText(""); textFieldRounds.setText(""); } public void setTreeNodes(){ if(rootInputNode.getChildCount()!=0 && rootInputNode.getFirstChild().toString().equalsIgnoreCase("Simulation")) return; DefaultMutableTreeNode simNode = new DefaultMutableTreeNode("Simulation"); treeModelInput.insertNodeInto(simNode, rootInputNode, rootInputNode.getChildCount()); treeModelInput.insertNodeInto(new DefaultMutableTreeNode("author: "+sproc.getSim().getAuthor()), simNode, simNode.getChildCount()); treeModelInput.insertNodeInto(new DefaultMutableTreeNode("name: "+sproc.getSim().getName()), simNode, simNode.getChildCount()); treeModelInput.insertNodeInto(new DefaultMutableTreeNode("toolkit: "+sproc.getSim().getToolkit()), simNode, simNode.getChildCount()); treeModelInput.insertNodeInto(new DefaultMutableTreeNode("description: "+sproc.getSim().getDescription()), simNode, simNode.getChildCount()); treeModelInput.insertNodeInto(new DefaultMutableTreeNode("mode: "+(sproc.getSim().getLoop()?"SO":"PSE")), simNode, simNode.getChildCount()); treeInput.expandPath(new TreePath(simNode.getPath())); } private static String COMBOBOX_ZERO_INDEX_ELEMENT = "-- Select a parameter type --"; private ArrayList<String> selectedInputVarName = new ArrayList<String>(); private ArrayList<String> selectedOutputVarName = new ArrayList<String>(); private DefaultMutableTreeNode rootInputNode; private DefaultMutableTreeNode rootOutputNode; private DefaultMutableTreeNode inputNode; private DefaultTreeModel treeModelInput; private DefaultTreeModel treeModelOutput; private Inputs inputs; private Output output; private JPanel panelInputDetails; private JScrollPane scrollPane1; private JTree treeInput; private JPanel panelNewInput; private JPanel panelInnerInput; private JLabel labelRounds; private JLabel labelInputVarType; private JLabel labelInputVarName; private JTextField textFieldRounds; private DefaultComboBoxModel<String> comboBoxInputVarTypeModel; private JComboBox<String> comboBoxInputVarType; private JTextField textFieldInputValue; private JLabel labelInputValue; private DefaultComboBoxModel<String> comboBoxInputVarNameModel; private JComboBox<String> comboBoxInputVarName; private JButton buttonAddParam; private JPanel panel5; private JButton buttonNewInput; private JButton buttonEditInput; private JButton buttonRemoveInput; private JPanel panelOutputDetails; private JScrollPane scrollPane2; private JTree treeOutput; private JPanel panelNewOutput; private JPanel panelInnerOutput; private JLabel labelOutputVarType; private JLabel labelOutputVarName; private JLabel labelOtherVarname; private DefaultComboBoxModel<String> comboBoxOutputVarTypeModel; private JComboBox<String> comboBoxOutputVarType; private DefaultComboBoxModel<String> comboBoxOutputVarNameModel; private JComboBox<String> comboBoxOutputVarName; private JTextField textFieldOtherVarName; private JPanel panel6; private JButton buttonAddOutput; private JButton buttonEditOutput; private JButton buttonRemoveOutput; private JPanel panel7; private JButton buttonSave; private JButton buttonPrev; }