package it.isislab.sof.client.application.ui; import it.isislab.sof.core.engine.hadoop.sshclient.utils.simulation.Loop; import it.isislab.sof.core.engine.hadoop.sshclient.utils.simulation.Simulation; 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.output.Output; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; import com.sun.tools.javac.code.Attribute.Array; /** * @author Carmine Spagnuolo */ public class XMLPanel extends JPanel { Simulation s; ArrayList<Loop> loops; public XMLPanel(Simulation simulation) { this.s=simulation; this.loops=s.getRuns().getLoops(); Collections.sort(loops,new Comparator<Loop>() { @Override public int compare(Loop o1, Loop o2) { return Integer.compare(o1.getId(), o2.getId()); } }); initComponents(); initTree(); initChart(0); } private void doMouseClicked(MouseEvent me) { DefaultMutableTreeNode selected =(DefaultMutableTreeNode)tree1.getLastSelectedPathComponent(); if(selected!=null && me.getClickCount() == 2) { if(selected.toString().contains("Loop Id")) { initChart(Integer.parseInt(selected.toString().split(": ")[1])-1); } } } private void initChart(int id) { if(loops.size()>0) { DefaultCategoryDataset line_chart_dataset = new DefaultCategoryDataset(); Loop l=loops.get(id); if(l.getInputs()!=null) { if(l.getOutputs()!=null) { List<Output> outputs=l.getOutputs().getOutput_list(); Collections.sort(outputs,new Comparator<Output>() { @Override public int compare(Output o1, Output o2) { return Integer.compare(o1.getIdInput(), o2.getIdInput()); } }); for(Output i: outputs) { for (Parameter p : i.output_params) { if((p.getparam() instanceof ParameterDouble)) line_chart_dataset.addValue(((ParameterDouble)p.getparam()).getvalue(), "Output: "+i.getIdInput()+ " Loop: "+l.getId(), p.getvariable_name()); else if( (p.getparam() instanceof ParameterLong)) line_chart_dataset.addValue(((ParameterLong)p.getparam()).getvalue(), "Output: "+i.getIdInput()+ " Loop: "+l.getId(), p.getvariable_name()); } } } } JFreeChart lineChartObject=ChartFactory.createLineChart("Simulation "+s.getName()+" Output Loop: "+(id+1),"Variables","Values",line_chart_dataset,PlotOrientation.VERTICAL,true,true,false); ChartPanel chartPanel = new ChartPanel( lineChartObject ); // chartPanel.setSize( new java.awt.Dimension( ((int)panel2.getPreferredSize().width/2), ((int)panel2.getPreferredSize().height)) ); chartPanel.setSize( new java.awt.Dimension( 800, 600 )); JPanel p=new JPanel(); p.add(chartPanel); p.setSize( new java.awt.Dimension( 800, 600 )); (scrollPane2.getViewport()).removeAll(); (scrollPane2.getViewport()).add(p); }else { JOptionPane.showMessageDialog(this, "Outputs for this simulation\nare not available yet, try later."); } } private void initTree() { DefaultMutableTreeNode new_sim = new DefaultMutableTreeNode("Simulation name: "+s.getName()); scrollPane1.remove(tree1); tree1 = new JTree(new_sim); scrollPane1.setViewportView(tree1); new_sim.add(new DefaultMutableTreeNode("Author: "+s.getAuthor())); new_sim.add(new DefaultMutableTreeNode("Creation time: "+s.getCreationTime())); DefaultMutableTreeNode descr=new DefaultMutableTreeNode("Description: "+s.getDescription().substring(0, (s.getDescription().length()>15)?15:s.getDescription().length()-1)); descr.add(new DefaultMutableTreeNode(s.getDescription())); new_sim.add(descr); new_sim.add(new DefaultMutableTreeNode("Id: "+s.getId())); new_sim.add(new DefaultMutableTreeNode("Toolkit: "+s.getToolkit())); new_sim.add(new DefaultMutableTreeNode("Status: "+s.getState())); DefaultMutableTreeNode mode=new DefaultMutableTreeNode("Mode: "+(s.getLoop()?"Simulation Optimization":"Parameters Space Exploration")); new_sim.add(mode); DefaultMutableTreeNode loops=new DefaultMutableTreeNode("Loops"); new_sim.add(loops); if(s.getLoop()) { for(Loop l: s.getRuns().getLoops()) { DefaultMutableTreeNode loop=new DefaultMutableTreeNode("Loop Id: "+l.getId()); loop.add(new DefaultMutableTreeNode("Status: "+l.getStatus())); loop.add(new DefaultMutableTreeNode("Start time: "+l.getStartTime())); loop.add(new DefaultMutableTreeNode("Stop time: "+l.getStopTime())); loop.add(new DefaultMutableTreeNode("Loop time: "+l.getLoopTime())); class PointTree { public Input getI() { return i; } public void setI(Input i) { this.i = i; } public Output getO() { return o; } public void setO(Output o) { this.o = o; } private Input i; private Output o; } HashMap<Integer, PointTree> mapio=new HashMap<Integer, PointTree>(); if(l.getInputs()!=null) { for(Input i: l.getInputs().getinput_list()) { PointTree p=new PointTree(); p.setI(i); mapio.put(i.id, p); } if(l.getOutputs()!=null && l.getOutputs().getOutput_list()!=null) for(Output i: l.getOutputs().getOutput_list()) { mapio.get(i.getIdInput()).setO(i); } else System.out.println("No output found."); for (Integer pt : mapio.keySet()) { DefaultMutableTreeNode point=new DefaultMutableTreeNode("Simulation point: "+pt); DefaultMutableTreeNode input=new DefaultMutableTreeNode("Input"); DefaultMutableTreeNode output=new DefaultMutableTreeNode("Output"); point.add(input); point.add(output); for(Parameter p : mapio.get(pt).getI().param_element) { DefaultMutableTreeNode vname=new DefaultMutableTreeNode("Variable Name: "+p.getvariable_name()); input.add(vname); vname.add(new DefaultMutableTreeNode("Value: "+p.getparam())); } if(mapio.get(pt).getO()!=null) for(Parameter p : mapio.get(pt).getO().output_params) { DefaultMutableTreeNode vname=new DefaultMutableTreeNode("Variable Name: "+p.getvariable_name()); output.add(vname); vname.add(new DefaultMutableTreeNode("Value: "+p.getparam())); } loop.add(point); } } loops.add(loop); } } tree1.expandRow(0); tree1.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent me) { doMouseClicked(me); } }); } private void initComponents() { panel1 = new JPanel(); scrollPane1 = new JScrollPane(); tree1 = new JTree(); panel2 = new JPanel(); scrollPane2 = new JScrollPane(); //======== this ======== //======== panel1 ======== { //======== scrollPane1 ======== { scrollPane1.setViewportView(tree1); } GroupLayout panel1Layout = new GroupLayout(panel1); panel1.setLayout(panel1Layout); panel1Layout.setHorizontalGroup( panel1Layout.createParallelGroup() .addComponent(scrollPane1, GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE) ); panel1Layout.setVerticalGroup( panel1Layout.createParallelGroup() .addComponent(scrollPane1, GroupLayout.DEFAULT_SIZE, 814, Short.MAX_VALUE) ); } //======== panel2 ======== { GroupLayout panel2Layout = new GroupLayout(panel2); panel2.setLayout(panel2Layout); panel2Layout.setHorizontalGroup( panel2Layout.createParallelGroup() .addComponent(scrollPane2, GroupLayout.DEFAULT_SIZE, 822, Short.MAX_VALUE) ); panel2Layout.setVerticalGroup( panel2Layout.createParallelGroup() .addComponent(scrollPane2, GroupLayout.DEFAULT_SIZE, 814, Short.MAX_VALUE) ); } GroupLayout layout = new GroupLayout(this); setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup() .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(panel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(panel2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup() .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(panel2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(36, 36, 36)) ); } private JPanel panel1; private JScrollPane scrollPane1; private JTree tree1; private JPanel panel2; private JScrollPane scrollPane2; }