-
Daniela Genius authoredDaniela Genius authored
JDialogSelectSysCAMSComponent.java 13.87 KiB
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
*
* ludovic.apvrille AT enst.fr
*
* This software is a computer program whose purpose is to allow the
* edition of TURTLE analysis, design and deployment diagrams, to
* allow the generation of RT-LOTOS or Java code from this diagram,
* and at last to allow the analysis of formal validation traces
* obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
* from INRIA Rhone-Alpes.
*
* This software is governed by the CeCILL license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/ or redistribute the software under the terms of the CeCILL
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL license and that you accept its terms.
*/
package ui.window;
import ui.util.IconManager;
import ui.TGComponent;
import ui.syscams.SysCAMSBlockDE;
import ui.syscams.SysCAMSBlockTDF;
import ui.syscams.SysCAMSCompositeComponent;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
/**
* Class JDialogSelectSysCAMSComponent
* Dialog for managing primitive components to be validated
* Creation: 27/04/2018
* @version 1.0 27/04/2018
* @author Irina Kit Yan LEE
*/
@SuppressWarnings("serial")
public class JDialogSelectSysCAMSComponent extends JDialogBase implements ActionListener, ListSelectionListener {
public static Vector<TGComponent> validated, ignored;
private static boolean optimized = true;
private Vector<TGComponent> val;
private Vector<TGComponent> ign, back;
//subpanels
private JPanel panel1, panel2, panel3, panel4, panel5, panel6;
private JList<TGComponent> listIgnored;
private JList<TGComponent> listValidated;
private JButton allValidated;
private JButton addOneValidated;
private JButton addOneIgnored;
private JButton allIgnored;
protected JCheckBox optimize;
/** Creates new form */
public JDialogSelectSysCAMSComponent(Frame f, Vector<TGComponent> _back, List<TGComponent> componentList, String title) {
super(f, title, true);
back = _back;
List<TGComponent> pcl = new LinkedList<TGComponent>();
makeComponentList(pcl, componentList);
if ((validated == null) || (ignored == null)) {
val = makeNewVal(pcl);
ign = new Vector<TGComponent>();
} else {
val = validated;
ign = ignored;
checkTask(val, pcl);
checkTask(ign, pcl);
addNewTask(val, pcl, ign);
}
initComponents();
myInitComponents();
pack();
}
private void makeComponentList(List<TGComponent> cs, List<TGComponent> lcs) {
TGComponent tgc;
SysCAMSCompositeComponent ccomp;
for(int i=0; i<lcs.size(); i++) {
tgc = lcs.get(i);
if (tgc instanceof SysCAMSCompositeComponent) {
ccomp = (SysCAMSCompositeComponent)tgc;
// cs.addAll(ccomp.getAllBlockDEComponents());
cs.addAll(ccomp.getAllBlockTDFComponents());
}
if (tgc instanceof SysCAMSBlockTDF) {
cs.add(tgc);
}
if (tgc instanceof SysCAMSBlockDE) {
cs.add(tgc);
}
}
}
private Vector<TGComponent> makeNewVal( List<TGComponent> list) {
Vector<TGComponent> v = new Vector<TGComponent>();
TGComponent tgc;
for(int i=0; i<list.size(); i++) {
tgc = list.get(i);
//
if (tgc instanceof SysCAMSBlockTDF) {
v.addElement(tgc);
}
if (tgc instanceof SysCAMSBlockDE) {
v.addElement(tgc);
}
}
return v;
}
private void checkTask(Vector<? extends TGComponent> tobeChecked, List<TGComponent> source) {
TGComponent t;
for(int i=0; i<tobeChecked.size(); i++) {
t = tobeChecked.elementAt(i);
if (!source.contains(t)) {
tobeChecked.removeElementAt(i);
i--;
}
}
}
public void addNewTask(Vector<TGComponent> added, List<TGComponent> source, Vector<TGComponent> notSource) {
TGComponent tgc;
for(int i=0; i<source.size(); i++) {
tgc = source.get(i);
if (((tgc instanceof SysCAMSBlockTDF) || (tgc instanceof SysCAMSBlockDE)) && (!added.contains(tgc)) && (!notSource.contains(tgc))){
added.addElement( tgc ) ;
//
}
}
}
private void myInitComponents() {
setButtons();
}
private void initComponents() {
Container c = getContentPane();
GridBagLayout gridbag1 = new GridBagLayout();
GridBagConstraints c1 = new GridBagConstraints();
GridBagLayout gridbag2 = new GridBagLayout();
GridBagConstraints c2 = new GridBagConstraints();
setFont(new Font("Helvetica", Font.PLAIN, 14));
c.setLayout(gridbag2);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
c2.weighty = 1.0;
c2.weightx = 1.0;
c2.gridwidth = 1;
c2.fill = GridBagConstraints.HORIZONTAL;
c2.gridheight = 1;
// ignored list
panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
panel1.setBorder(new javax.swing.border.TitledBorder("Ignored components"));
listIgnored = new JList<TGComponent>(ign);
//listIgnored.setPreferredSize(new Dimension(200, 250));
listIgnored.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
listIgnored.addListSelectionListener(this);
JScrollPane scrollPane1 = new JScrollPane(listIgnored);
panel1.add(scrollPane1, BorderLayout.CENTER);
panel1.setPreferredSize(new Dimension(200, 250));
c.add(panel1, c2);
// central buttons
panel3 = new JPanel();
panel3.setLayout(gridbag1);
c1.weighty = 1.0;
c1.weightx = 1.0;
c1.gridwidth = GridBagConstraints.REMAINDER; //end row
c1.fill = GridBagConstraints.HORIZONTAL;
c1.gridheight = 1;
allValidated = new JButton(IconManager.imgic50);
allValidated.setPreferredSize(new Dimension(50, 25));
allValidated.addActionListener(this);
allValidated.setActionCommand("allValidated");
panel3.add(allValidated, c1);
addOneValidated = new JButton(IconManager.imgic48);
addOneValidated.setPreferredSize(new Dimension(50, 25));
addOneValidated.addActionListener(this);
addOneValidated.setActionCommand("addOneValidated");
panel3.add(addOneValidated, c1);
panel3.add(new JLabel(" "), c1);
addOneIgnored = new JButton(IconManager.imgic46);
addOneIgnored.addActionListener(this);
addOneIgnored.setPreferredSize(new Dimension(50, 25));
addOneIgnored.setActionCommand("addOneIgnored");
panel3.add(addOneIgnored, c1);
allIgnored = new JButton(IconManager.imgic44);
allIgnored.addActionListener(this);
allIgnored.setPreferredSize(new Dimension(50, 25));
allIgnored.setActionCommand("allIgnored");
panel3.add(allIgnored, c1);
c.add(panel3, c2);
// validated list
panel2 = new JPanel();
panel2.setLayout(new BorderLayout());
panel2.setBorder(new javax.swing.border.TitledBorder("Used components"));
listValidated = new JList<TGComponent>(val);
//listValidated.setPreferredSize(new Dimension(200, 250));
listValidated.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
listValidated.addListSelectionListener(this);
JScrollPane scrollPane2 = new JScrollPane(listValidated);
panel2.add(scrollPane2, BorderLayout.CENTER);
panel2.setPreferredSize(new Dimension(200, 250));
c2.gridwidth = GridBagConstraints.REMAINDER; //end row
c.add(panel2, c2);
// main panel;
panel6 = new JPanel();
panel6.setLayout(new BorderLayout());
panel5 = new JPanel();
panel5.setLayout(new FlowLayout());
optimize = new JCheckBox("Optimize TML specification");
optimize.setSelected(optimized);
panel5.add(optimize);
panel4 = new JPanel();
panel4.setLayout(new FlowLayout());
closeButton = new JButton("Start Syntax Analysis", IconManager.imgic37);
//closeButton.setPreferredSize(new Dimension(600, 50));
closeButton.addActionListener(this);
closeButton.setPreferredSize(new Dimension(200, 30));
cancelButton = new JButton("Cancel", IconManager.imgic27);
cancelButton.addActionListener(this);
cancelButton.setPreferredSize(new Dimension(200, 30));
panel4.add(cancelButton);
panel4.add(closeButton);
panel6.add(panel5, BorderLayout.NORTH);
panel6.add(panel4, BorderLayout.SOUTH);
c.add(panel6, c2);
}
public void actionPerformed(ActionEvent evt) {
String command = evt.getActionCommand();
// Compare the action command to the known actions.
if (command.equals("Start Syntax Analysis")) {
closeDialog();
} else if (command.equals("Cancel")) {
cancelDialog();
} else if (command.equals("addOneIgnored")) {
addOneIgnored();
} else if (command.equals("addOneValidated")) {
addOneValidated();
} else if (command.equals("allValidated")) {
allValidated();
} else if (command.equals("allIgnored")) {
allIgnored();
}
}
private void addOneIgnored() {
int [] list = listValidated.getSelectedIndices();
Vector<TGComponent> v = new Vector<TGComponent>();
TGComponent o;
for (int i=0; i<list.length; i++){
o = val.elementAt(list[i]);
ign.addElement(o);
v.addElement(o);
}
val.removeAll(v);
listIgnored.setListData(ign);
listValidated.setListData(val);
setButtons();
}
private void addOneValidated() {
int [] list = listIgnored.getSelectedIndices();
Vector<TGComponent> v = new Vector<TGComponent>();
TGComponent o;
for (int i=0; i<list.length; i++){
o = ign.elementAt(list[i]);
val.addElement(o);
v.addElement(o);
}
ign.removeAll(v);
listIgnored.setListData(ign);
listValidated.setListData(val);
setButtons();
}
private void allValidated() {
val.addAll(ign);
ign.removeAllElements();
listIgnored.setListData(ign);
listValidated.setListData(val);
setButtons();
}
private void allIgnored() {
ign.addAll(val);
val.removeAllElements();
listIgnored.setListData(ign);
listValidated.setListData(val);
setButtons();
}
public void closeDialog() {
back.removeAllElements();
for(int i=0; i<val.size(); i++) {
back.addElement(val.elementAt(i));
}
validated = val;
ignored = ign;
optimized = optimize.isSelected();
dispose();
}
public void cancelDialog() {
dispose();
}
private void setButtons() {
int i1 = listIgnored.getSelectedIndex();
int i2 = listValidated.getSelectedIndex();
if (i1 == -1) {
addOneValidated.setEnabled(false);
} else {
addOneValidated.setEnabled(true);
//listValidated.clearSelection();
}
if (i2 == -1) {
addOneIgnored.setEnabled(false);
} else {
addOneIgnored.setEnabled(true);
//listIgnored.clearSelection();
}
if (ign.size() ==0) {
allValidated.setEnabled(false);
} else {
allValidated.setEnabled(true);
}
if (val.size() ==0) {
allIgnored.setEnabled(false);
closeButton.setEnabled(false);
} else {
allIgnored.setEnabled(true);
closeButton.setEnabled(true);
}
}
public void valueChanged(ListSelectionEvent e) {
setButtons();
}
public boolean getOptimize() {
return optimized;
}
}