package it.isislab.sof.client.application.ui.newsimulation; 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 java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import javax.swing.*; import javax.swing.border.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; public class NewDomain extends JPanel { public NewDomain(NewSimulationProcess newSimulationProcess) { sproc=newSimulationProcess; initComponents(); } private NewSimulationProcess sproc=null; private void initComponents() { panel1 = new JPanel(); scrollPane1 = new JScrollPane(); rootTreeNode = new DefaultMutableTreeNode("Domain"); treeModel = new DefaultTreeModel(rootTreeNode); tree = new JTree(treeModel); tree.setExpandsSelectedPaths(true); panel2 = new JPanel(); buttonAdd = new JButton(); buttonEdit = new JButton(); buttonRemove = new JButton(); panel3 = new JPanel(); labelType = new JLabel(); comboBoxType = new JComboBox<String>(); comboBoxType.addItem(new String ("-- Select a parameter type --")); comboBoxType.addItem(new String ("continuous")); comboBoxType.addItem(new String ("discrete")); comboBoxType.addItem(new String ("string")); labelVarName = new JLabel(); textFieldVarName = new JTextField(); panelDetails = new JPanel(); panelInnerDetailsNumeric = new NewDomainParameterNumeric(); panelInnerDetailsListValues = new NewDomainListValues(); panel5 = new JPanel(); buttonNext = new JButton(); buttonPrev = new JButton(); //======== panel1 ======== { panel1.setBorder(new TitledBorder("Domain")); //======== scrollPane1 ======== { scrollPane1.setViewportView(tree); } //======== panel2 ======== { //---- buttonAdd ---- buttonAdd.setText("Add"); //---- buttonEdit ---- buttonEdit.setText("Edit"); //---- buttonRemove ---- buttonRemove.setText("Remove"); GroupLayout panel2Layout = new GroupLayout(panel2); panel2.setLayout(panel2Layout); panel2Layout.setHorizontalGroup( panel2Layout.createParallelGroup() .addGroup(panel2Layout.createSequentialGroup() .addComponent(buttonAdd) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonEdit) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(buttonRemove)) ); panel2Layout.setVerticalGroup( panel2Layout.createParallelGroup() .addGroup(panel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(buttonAdd) .addComponent(buttonEdit) .addComponent(buttonRemove)) ); } GroupLayout panel1Layout = new GroupLayout(panel1); panel1.setLayout(panel1Layout); panel1Layout.setHorizontalGroup( panel1Layout.createParallelGroup() .addGroup(panel1Layout.createSequentialGroup() .addContainerGap() .addGroup(panel1Layout.createParallelGroup() .addComponent(panel2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(panel1Layout.createSequentialGroup() .addComponent(scrollPane1, GroupLayout.PREFERRED_SIZE, 353, GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); panel1Layout.setVerticalGroup( panel1Layout.createParallelGroup() .addGroup(panel1Layout.createSequentialGroup() .addContainerGap() .addComponent(scrollPane1, GroupLayout.DEFAULT_SIZE, 555, Short.MAX_VALUE) .addGap(18, 18, 18) .addComponent(panel2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); } { panel3.setBorder(new TitledBorder("New parameter domain")); //---- label1 ---- labelType.setText("Type:"); //---- label2 ---- labelVarName.setText("Variable name:"); //======== panelDetails ======== { panelDetails.setBorder(new TitledBorder("Details")); GroupLayout panelDetailsLayout = new GroupLayout(panelDetails); panelDetails.setLayout(panelDetailsLayout); panelDetailsLayout.setHorizontalGroup( panelDetailsLayout.createParallelGroup() .addGap(0, 342, Short.MAX_VALUE) ); panelDetailsLayout.setVerticalGroup( panelDetailsLayout.createParallelGroup() .addGap(0, 491, Short.MAX_VALUE) ); /*GroupLayout panelDetailsLayout = new GroupLayout(panelDetails); panelDetails.setLayout(panelDetailsLayout); panelDetailsLayout.setHorizontalGroup( panelDetailsLayout.createParallelGroup() .addGroup(panelDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerDetails, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); panelDetailsLayout.setVerticalGroup( panelDetailsLayout.createParallelGroup() .addGroup(panelDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerDetails, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) );*/ } GroupLayout panel3Layout = new GroupLayout(panel3); panel3.setLayout(panel3Layout); panel3Layout.setHorizontalGroup( panel3Layout.createParallelGroup() .addGroup(panel3Layout.createSequentialGroup() .addContainerGap() .addGroup(panel3Layout.createParallelGroup() .addComponent(panelDetails, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(panel3Layout.createSequentialGroup() .addGroup(panel3Layout.createParallelGroup() .addComponent(labelType) .addComponent(labelVarName)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE) .addGroup(panel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addComponent(textFieldVarName) .addComponent(comboBoxType, GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)))) .addGap(25, 25, 25)) ); panel3Layout.setVerticalGroup( panel3Layout.createParallelGroup() .addGroup(panel3Layout.createSequentialGroup() .addContainerGap() .addGroup(panel3Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelType) .addComponent(comboBoxType, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addGroup(panel3Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(labelVarName) .addComponent(textFieldVarName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(panelDetails, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); } //======== panel5 ======== { //---- button3 ---- buttonNext.setText("Next"); //---- buttonPrev ---- buttonPrev.setText("Prev"); GroupLayout panel5Layout = new GroupLayout(panel5); panel5.setLayout(panel5Layout); panel5Layout.setHorizontalGroup( panel5Layout.createParallelGroup() .addGroup(GroupLayout.Alignment.TRAILING, panel5Layout.createSequentialGroup() .addGap(0, 679, Short.MAX_VALUE) .addComponent(buttonPrev) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(buttonNext)) ); panel5Layout.setVerticalGroup( panel5Layout.createParallelGroup() .addGroup(GroupLayout.Alignment.TRAILING, panel5Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addGroup(panel5Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(buttonNext) .addComponent(buttonPrev))) ); } GroupLayout layout = new GroupLayout(this); setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup() .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup() .addComponent(panel5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(panel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(panel3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup() .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup() .addComponent(panel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(panel3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(panel5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addContainerGap(15, Short.MAX_VALUE)) ); comboBoxType.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(((String)comboBoxType.getSelectedItem()).equalsIgnoreCase("discrete") || ((String)comboBoxType.getSelectedItem()).equalsIgnoreCase("continuous")){ panelDetails.removeAll(); GroupLayout panelDetailsLayout = new GroupLayout(panelDetails); panelDetails.setLayout(panelDetailsLayout); panelDetailsLayout.setHorizontalGroup( panelDetailsLayout.createParallelGroup() .addGroup(panelDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerDetailsNumeric, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); panelDetailsLayout.setVerticalGroup( panelDetailsLayout.createParallelGroup() .addGroup(panelDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerDetailsNumeric, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); }else{ if(((String)comboBoxType.getSelectedItem()).equalsIgnoreCase("string")){ panelDetails.removeAll(); //aggiungere pannello per stringhe GroupLayout panelDetailsLayout = new GroupLayout(panelDetails); panelDetails.setLayout(panelDetailsLayout); panelDetailsLayout.setHorizontalGroup( panelDetailsLayout.createParallelGroup() .addGroup(panelDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerDetailsListValues, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); panelDetailsLayout.setVerticalGroup( panelDetailsLayout.createParallelGroup() .addGroup(panelDetailsLayout.createSequentialGroup() .addContainerGap() .addComponent(panelInnerDetailsListValues, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); }else{ panelDetails.removeAll(); GroupLayout panelDetailsLayout = new GroupLayout(panelDetails); panelDetails.setLayout(panelDetailsLayout); panelDetailsLayout.setHorizontalGroup( panelDetailsLayout.createParallelGroup() .addGap(0, 342, Short.MAX_VALUE) ); panelDetailsLayout.setVerticalGroup( panelDetailsLayout.createParallelGroup() .addGap(0, 491, Short.MAX_VALUE) ); } } } }); //ACTION LISTENER buttonEdit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(buttonEdit, "Not implemented yet"); } }); //ACTIONLISTENER buttonPrev.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //JOptionPane.showMessageDialog(buttonPrev, "Not implemented yet"); sproc.setNewSim(); } }); buttonAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { paramTreeNode = new DefaultMutableTreeNode("param"); treeModel.insertNodeInto(paramTreeNode, rootTreeNode, rootTreeNode.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("variableName: "+textFieldVarName.getText()), paramTreeNode, paramTreeNode.getChildCount()); DefaultMutableTreeNode varType; if(((String)comboBoxType.getSelectedItem()).equalsIgnoreCase("string")){ varType = new DefaultMutableTreeNode("list"); treeModel.insertNodeInto(varType, paramTreeNode, paramTreeNode.getChildCount()); for(String v : panelInnerDetailsListValues.getListValues()) treeModel.insertNodeInto(new DefaultMutableTreeNode("value: "+v), varType, varType.getChildCount()); }else{ varType = new DefaultMutableTreeNode(comboBoxType.getSelectedItem()); treeModel.insertNodeInto(varType, paramTreeNode, paramTreeNode.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("min: "+panelInnerDetailsNumeric.getMin()), varType, varType.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("max: "+panelInnerDetailsNumeric.getMax()), varType, varType.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("increment: "+panelInnerDetailsNumeric.getIncrement()), varType, varType.getChildCount()); } tree.expandPath(new TreePath(paramTreeNode.getPath())); panelInnerDetailsNumeric.cleanField(); panelInnerDetailsListValues.cleanField(); comboBoxType.setSelectedIndex(0); textFieldVarName.setText(""); } }); buttonRemove.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode selected =(DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if(selected !=null && selected.toString().equalsIgnoreCase("param")){ treeModel.removeNodeFromParent(selected); }else{ JOptionPane.showMessageDialog(tree, "Selection error.\nSelect a param object to delete it."); } } }); buttonNext.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { buttonNextActionPerformed(e); } }); } public void setTreeNodes(){ if(rootTreeNode.getChildCount()!=0 && rootTreeNode.getFirstChild().toString().equalsIgnoreCase("Simulation")) return; DefaultMutableTreeNode simNode = new DefaultMutableTreeNode("Simulation"); treeModel.insertNodeInto(simNode, rootTreeNode, rootTreeNode.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("author: "+sproc.getSim().getAuthor()), simNode, simNode.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("name: "+sproc.getSim().getName()), simNode, simNode.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("toolkit: "+sproc.getSim().getToolkit()), simNode, simNode.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("description: "+sproc.getSim().getDescription()), simNode, simNode.getChildCount()); treeModel.insertNodeInto(new DefaultMutableTreeNode("mode: "+(sproc.getSim().getLoop()?"SO":"PSE")), simNode, simNode.getChildCount()); tree.expandPath(new TreePath(simNode.getPath())); } protected void buttonNextActionPerformed(ActionEvent e) { dom = new Domain(); dom.simulation = sproc.getSim(); List<ParameterDomain> list = new ArrayList<>(); Enumeration<DefaultMutableTreeNode> en = rootTreeNode.children(); while(en.hasMoreElements()){ DefaultMutableTreeNode node = en.nextElement(); if(!node.toString().equalsIgnoreCase("simulation") || !node.toString().equalsIgnoreCase("domain") ){ if(node.toString().equalsIgnoreCase("param")){ Enumeration<DefaultMutableTreeNode> paramNodeTree = node.children(); ParameterDomain pd = new ParameterDomain(); while(paramNodeTree.hasMoreElements()){ DefaultMutableTreeNode paramChild = paramNodeTree.nextElement(); if(paramChild.toString().contains("variableName")){ pd.setvariable_name(paramChild.toString().split(":")[1].trim()); }else{ if(paramChild.toString().equalsIgnoreCase("continuous")){ ParameterDomainContinuous pdc = new ParameterDomainContinuous(); Enumeration<DefaultMutableTreeNode> continuousNodeTree = paramChild.children(); while(continuousNodeTree.hasMoreElements()){ DefaultMutableTreeNode child = continuousNodeTree.nextElement(); if(child.toString().contains("min")) pdc.setmin(Double.parseDouble(child.toString().split(":")[1].trim())); else if(child.toString().contains("max")) pdc.setmax(Double.parseDouble(child.toString().split(":")[1].trim())); else pdc.setincrement(Double.parseDouble(child.toString().split(":")[1].trim())); } pd.setparameter(pdc); }else{ if(paramChild.toString().equalsIgnoreCase("list")){ ParameterDomainListString pdls = new ParameterDomainListString(); Enumeration<DefaultMutableTreeNode> stringNodeTree = paramChild.children(); ArrayList<String> list_string = new ArrayList<String>(); while(stringNodeTree.hasMoreElements()){ DefaultMutableTreeNode child = stringNodeTree.nextElement(); list_string.add(child.toString().split(":")[1].trim()); } pdls.setlist(list_string); pd.setparameter(pdls); }else{ if(paramChild.toString().equalsIgnoreCase("discrete")){ ParameterDomainDiscrete pdd = new ParameterDomainDiscrete(); Enumeration<DefaultMutableTreeNode> discreteNodeTree = paramChild.children(); while(discreteNodeTree.hasMoreElements()){ DefaultMutableTreeNode child = discreteNodeTree.nextElement(); if(child.toString().contains("min")) pdd.setmin(Long.parseLong(child.toString().split(":")[1].trim())); else if(child.toString().contains("max")) pdd.setmax(Long.parseLong(child.toString().split(":")[1].trim())); else pdd.setincrement(Long.parseLong(child.toString().split(":")[1].trim())); } pd.setparameter(pdd); } } } } } list.add(pd); } } } dom.param = list; sproc.setDomainIO(); } public Domain getDomain(){ return dom; } private Domain dom; private JPanel panel1; private JScrollPane scrollPane1; private JTree tree; private DefaultMutableTreeNode rootTreeNode; private DefaultTreeModel treeModel; private DefaultMutableTreeNode paramTreeNode; private JPanel panel2; private JButton buttonAdd; private JButton buttonEdit; private JButton buttonRemove; private JPanel panel3; private JLabel labelType; private JComboBox<String> comboBoxType; private JLabel labelVarName; private JTextField textFieldVarName; private JPanel panelDetails; private NewDomainParameterNumeric panelInnerDetailsNumeric; private NewDomainListValues panelInnerDetailsListValues; private JPanel panel5; private JButton buttonNext; private JButton buttonPrev; }