diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java index 8ceb37459f053b154ee662e181d2defcc1b80308..6867d4ab520d058de6011af6eab5f311a13d80bc 100644 --- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java +++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java @@ -141,6 +141,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene // Commands private JPanel /*main,*/ mainTop, commands/*, save, state*/, infos/*, outputs*/, cpuPanel, variablePanel; protected JPanelTransactions transactionPanel; + protected JPanelTaskTransactions taskTransactionPanel; private JCheckBox latex, debug, animate, diploids, update, openDiagram, animateWithInfo; private JTabbedPane commandTab, infoTab; protected JTextField paramMainCommand; @@ -894,7 +895,13 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene transactionPanel.add(jspTransactionInfo, BorderLayout.NORTH); updateTransactionInformationButton = new JButton(actions[InteractiveSimulationActions.ACT_UPDATE_TRANSACTIONS]); transactionPanel.add(updateTransactionInformationButton, BorderLayout.SOUTH);*/ + if (tmap == null) { + taskTransactionPanel = new JPanelTaskTransactions(null, this,NB_OF_TRANSACTIONS); + } else { + taskTransactionPanel = new JPanelTaskTransactions(tmap.getTMLModeling(),this,NB_OF_TRANSACTIONS); + } + infoTab.addTab("Task Transactions", null, taskTransactionPanel, "Transactions of given Task"); // CPUs cpuPanel = new JPanel(); cpuPanel.setLayout(new BorderLayout()); @@ -2333,6 +2340,9 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene if (transactionPanel != null) { transactionPanel.setData(trans); } + if (taskTransactionPanel != null) { + taskTransactionPanel.setData(trans); + } if (latencyPanel !=null){ processLatency(); } @@ -2867,6 +2877,9 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene if (transactionPanel != null) { nb = transactionPanel.getNbOfTransactions(); } + if (taskTransactionPanel != null) { + nb = taskTransactionPanel.getNbOfTransactions(); + } sendCommand("lt " + nb); } diff --git a/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java b/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java new file mode 100644 index 0000000000000000000000000000000000000000..fac00133b88f6bc7706bd1709298177cb319ef9f --- /dev/null +++ b/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java @@ -0,0 +1,136 @@ +package ui.interactivesimulation; + +import myutil.TableSorter; +import tmltranslator.TMLModeling; +import ui.TGComponent; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Vector; + +public class JPanelTaskTransactions extends JPanel { + private JFrameInteractiveSimulation jfis; + private TaskTransactionTableModel ttm; + private JButton updateTransactionInformationButton; + private JScrollPane jspTransactionInfo; + private JComboBox<String> tasks; + private Vector<SimulationTransaction> _trans; + private TMLModeling<TGComponent> tmlm; + + private JTextField nbOfTransactions; + private int defaultNbOfTransactions; + + + + + public JPanelTaskTransactions(TMLModeling<TGComponent> _tmlm,JFrameInteractiveSimulation _jfis, int _defaultNbOfTransactions) { + super(); + tmlm = _tmlm; + jfis = _jfis; + defaultNbOfTransactions = _defaultNbOfTransactions; + + makeComponents(); + setComponents(); + } + + public void makeComponents() { + TableSorter sorterPI; + JTable jtablePI; + + GridBagLayout gridbag2 = new GridBagLayout(); + GridBagConstraints c2 = new GridBagConstraints(); + setLayout(gridbag2); + setBorder(new javax.swing.border.TitledBorder("Managing transactions of Tasks")); + + ttm = new TaskTransactionTableModel(jfis); + sorterPI = new TableSorter(ttm); + jtablePI = new JTable(sorterPI); + sorterPI.setTableHeader(jtablePI.getTableHeader()); + ((jtablePI.getColumnModel()).getColumn(0)).setPreferredWidth(100); + ((jtablePI.getColumnModel()).getColumn(1)).setPreferredWidth(200); + ((jtablePI.getColumnModel()).getColumn(2)).setPreferredWidth(150); + ((jtablePI.getColumnModel()).getColumn(3)).setPreferredWidth(100); + ((jtablePI.getColumnModel()).getColumn(4)).setPreferredWidth(100); + ((jtablePI.getColumnModel()).getColumn(5)).setPreferredWidth(100); + ((jtablePI.getColumnModel()).getColumn(6)).setPreferredWidth(100); + jtablePI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + jspTransactionInfo = new JScrollPane(jtablePI); + jspTransactionInfo.setWheelScrollingEnabled(true); + jspTransactionInfo.getVerticalScrollBar().setUnitIncrement(10); + jspTransactionInfo.setPreferredSize(new Dimension(500, 300)); + + + c2.gridwidth = GridBagConstraints.REMAINDER; //end row + c2.fill = GridBagConstraints.BOTH; + c2.gridheight = 5; + c2.weighty = 10.0; + c2.weightx = 10.0; + add(jspTransactionInfo, c2); + + // 2nd line panel2 + c2.weighty = 1.0; + c2.weightx = 1.0; + c2.fill = GridBagConstraints.BOTH; + c2.gridheight = 1; + add(new JLabel(""), c2); + add(new JLabel("# of transactions per node:"), c2); + + c2.gridwidth = GridBagConstraints.REMAINDER; //end row + c2.fill = GridBagConstraints.HORIZONTAL; + + nbOfTransactions = new JTextField(Integer.toString(defaultNbOfTransactions), defaultNbOfTransactions); + add(nbOfTransactions, c2); + + add(new JLabel(" "), c2); + tasks = new JComboBox<>(); + if(tmlm != null){ + for (int k = 0; k < tmlm.getTasks().size(); k++){ + tasks.addItem(tmlm.getTasks().get(k).getName()); + } + } + + tasks.setSelectedIndex(0); + add(tasks, c2); +// updateTransactionInformationButton = new JButton(jfis.actions[InteractiveSimulationActions.ACT_UPDATE_TRANSACTIONS]); +// add(updateTransactionInformationButton, c2); + tasks.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + System.out.println("levan" + tasks.getSelectedItem().toString()); + if (ttm != null) { + ttm.setData(_trans,tasks.getSelectedItem().toString()); + } + } + } + }); + } + + public void setComponents() { + + } + + public TaskTransactionTableModel getTableModel() { + return ttm; + } + + public int getNbOfTransactions() { + + try { + defaultNbOfTransactions = Integer.decode(nbOfTransactions.getText()).intValue(); + } catch (Exception e) { + //TraceManager.addDev(nbOfTransactions.getText()); + //TraceManager.addDev("Invalid default transaction"); + defaultNbOfTransactions = 0; + } + return defaultNbOfTransactions; + } + + + public void setData(Vector<SimulationTransaction> _trans) { + this._trans = _trans; + } + +} diff --git a/src/main/java/ui/interactivesimulation/TaskTransactionTableModel.java b/src/main/java/ui/interactivesimulation/TaskTransactionTableModel.java new file mode 100644 index 0000000000000000000000000000000000000000..182c04d3a02a7eb8294c3ccdb00df6dbdb4a807a --- /dev/null +++ b/src/main/java/ui/interactivesimulation/TaskTransactionTableModel.java @@ -0,0 +1,95 @@ +package ui.interactivesimulation; + +import javax.swing.table.AbstractTableModel; +import java.util.ArrayList; +import java.util.Vector; + +public class TaskTransactionTableModel extends AbstractTableModel { + private JFrameInteractiveSimulation jfis; + private int nbOfRows; + private SimulationTransaction data[]; + + + //private String [] names; + public TaskTransactionTableModel(JFrameInteractiveSimulation _jfis) { + jfis = jfis; + data = null; + } + + // From AbstractTableModel + public synchronized int getRowCount() { + //Vector<SimulationTransaction> tr = jfis.getListOfRecentTransactions(); + if (data == null) { + return 0; + } + return data.length; + } + + public int getColumnCount() { + return 7; + } + + public synchronized Object getValueAt(int row, int column) { + if (data == null) { + return ""; + } + + if (row >= data.length) { + return ""; + } + + SimulationTransaction st = data[row]; + + switch(column) { + case 0: + return st.deviceName; + case 1: + return st.taskName; + case 2: + return st.command; + case 3: + return st.startTime; + case 4: + return st.endTime; + case 5: + return st.length; + case 6: + return st.channelName; + } + return "unknown"; + } + + public String getColumnName(int columnIndex) { + switch(columnIndex) { + case 0: + return "Node"; + case 1: + return "Task"; + case 2: + return "Command"; + case 3: + return "Start"; + case 4: + return "End"; + case 5: + return "Length"; + case 6: + return "Channel"; + } + return "unknown"; + } + + public synchronized void setData(Vector<SimulationTransaction> _trans, String taskName) { + data = new SimulationTransaction[_trans.size()]; + int t = 0; + for(int i=0; i<_trans.size(); i++) { + if (_trans.get(i).taskName.equals(taskName)){ + data[t] = _trans.get(i); + t++; + } + + } + fireTableStructureChanged(); + } + +}