599
643
fastestTraceRadioButton.setEnabled(false);
600
644
someTraceRadioButton.setEnabled(false);
601
645
noTraceRadioButton.setEnabled(true);
646
} else if (lens.isTimed()) {
647
fastestTraceRadioButton.setEnabled(tapnNetwork.isNonStrict() && !queryHasDeadlock() &&
648
!(newProperty instanceof TCTLEGNode || newProperty instanceof TCTLAFNode));
649
someTraceRadioButton.setEnabled(true);
650
noTraceRadioButton.setEnabled(true);
651
} else if (queryIsReachability()) {
652
fastestTraceRadioButton.setEnabled(false);
653
someTraceRadioButton.setEnabled(true);
654
noTraceRadioButton.setEnabled(true);
603
fastestTraceRadioButton.setEnabled(tapnNetwork.isNonStrict() && !queryHasDeadlock() && !(newProperty instanceof TCTLEGNode || newProperty instanceof TCTLAFNode));
604
someTraceRadioButton.setEnabled(true);
605
noTraceRadioButton.setEnabled(true);
656
fastestTraceRadioButton.setEnabled(false);
657
someTraceRadioButton.setEnabled(false);
658
noTraceRadioButton.setEnabled(false);
659
noTraceRadioButton.setSelected(true);
608
662
if(getTraceOption() == TraceOption.FASTEST) {
609
663
if(fastestTraceRadioButton.isEnabled()){
610
664
fastestTraceRadioButton.setSelected(true);
612
someTraceRadioButton.setSelected(true);
665
} else if (someTraceRadioButton.isEnabled()) {
666
someTraceRadioButton.setSelected(true);
668
noTraceRadioButton.setSelected(true);
617
private void resetQuantifierSelectionButtons() {
618
quantificationRadioButtonGroup.clearSelection();
673
private boolean queryIsReachability() {
674
return new IsReachabilityVisitor().isReachability(newProperty);
677
private void resetQuantifierSelectionButtons() {
678
quantificationButtonGroup.clearSelection();
621
681
private void exit() {
622
682
rootPane.getParent().setVisible(false);
625
public String getQuantificationSelection() {
626
if (existsDiamond.isSelected()) {
628
} else if (existsBox.isSelected()) {
630
} else if (forAllDiamond.isSelected()) {
632
} else if (forAllBox.isSelected()) {
639
685
public boolean queryHasDeadlock(){
640
686
return new HasDeadlockVisitor().hasDeadLock(newProperty);
742
798
private void updateQueryButtonsAccordingToSelection() {
743
if (currentSelection.getObject() instanceof TCTLAtomicPropositionNode) {
799
TCTLAbstractProperty current = currentSelection.getObject();
800
if (current instanceof TCTLStateToPathConverter && !lens.isTimed()) {
801
current = ((TCTLStateToPathConverter) current).getProperty();
803
if (current instanceof TCTLAtomicPropositionNode) {
744
804
TCTLAtomicPropositionNode node = (TCTLAtomicPropositionNode) currentSelection.getObject();
745
if(!(node.getLeft() instanceof TCTLPlaceNode && node.getRight() instanceof TCTLConstNode)){
748
TCTLPlaceNode placeNode = (TCTLPlaceNode) node.getLeft();
749
TCTLConstNode placeMarkingNode = (TCTLConstNode) node.getRight();
751
806
// bit of a hack to prevent posting edits to the undo manager when
752
807
// we programmatically change the selection in the atomic proposition comboboxes etc.
753
808
// because a different atomic proposition was selected
754
809
userChangedAtomicPropSelection = false;
755
if(placeNode.getTemplate().equals(""))
756
templateBox.setSelectedItem(SHARED);
758
templateBox.setSelectedItem(tapnNetwork.getTAPNByName(placeNode.getTemplate()));
759
placesBox.setSelectedItem(placeNode.getPlace());
760
relationalOperatorBox.setSelectedItem(node.getOp());
761
placeMarking.setValue(placeMarkingNode.getConstant());
762
userChangedAtomicPropSelection = true;
763
} else if (currentSelection.getObject() instanceof TCTLEFNode) {
764
existsDiamond.setSelected(true);
765
} else if (currentSelection.getObject() instanceof TCTLEGNode) {
766
existsBox.setSelected(true);
767
} else if (currentSelection.getObject() instanceof TCTLAGNode) {
768
forAllBox.setSelected(true);
769
} else if (currentSelection.getObject() instanceof TCTLAFNode) {
770
forAllDiamond.setSelected(true);
810
if (node.getLeft() instanceof TCTLPlaceNode) {
811
TCTLPlaceNode placeNode = (TCTLPlaceNode) node.getLeft();
812
if (placeNode.getTemplate().equals("")) {
813
templateBox.setSelectedItem(SHARED);
815
templateBox.setSelectedItem(tapnNetwork.getTAPNByName(placeNode.getTemplate()));
818
if (lens.isTimed()) {
819
updateTimedQueryButtons(node);
821
updateUntimedQueryButtons(node);
823
} else if (current instanceof TCTLTransitionNode) {
824
TCTLTransitionNode transitionNode = (TCTLTransitionNode) current;
825
userChangedAtomicPropSelection = false;
826
if (transitionNode.getTemplate().equals("")) {
827
templateBox.setSelectedItem(SHARED);
829
templateBox.setSelectedItem(tapnNetwork.getTAPNByName(transitionNode.getTemplate()));
831
placesBox.setSelectedItem(transitionNode.getTransition());
832
userChangedAtomicPropSelection = true;
834
if (!lens.isTimed()) {
835
setEnablednessOfOperatorAndMarkingBoxes();
839
private void updateTimedQueryButtons(TCTLAtomicPropositionNode node) {
840
if (!(node.getLeft() instanceof TCTLPlaceNode && node.getRight() instanceof TCTLConstNode)) {
843
TCTLPlaceNode placeNode = (TCTLPlaceNode) node.getLeft();
844
TCTLConstNode placeMarkingNode = (TCTLConstNode) node.getRight();
846
placesBox.setSelectedItem(placeNode.getPlace());
847
relationalOperatorBox.setSelectedItem(node.getOp());
848
placeMarking.setValue(placeMarkingNode.getConstant());
849
userChangedAtomicPropSelection = true;
852
private void updateUntimedQueryButtons(TCTLAtomicPropositionNode node) {
853
userChangedAtomicPropSelection = false;
854
if (node.getLeft() instanceof TCTLPlaceNode) {
855
TCTLPlaceNode placeNode = (TCTLPlaceNode) node.getLeft();
856
placesBox.setSelectedItem(placeNode.getPlace());
858
if (placesBox.getItemCount() > 0) {
859
placesBox.setSelectedIndex(0);
862
relationalOperatorBox.setSelectedItem(node.getOp());
864
if (node.getRight() instanceof TCTLConstNode) {
865
TCTLConstNode placeMarkingNode = (TCTLConstNode) node.getRight();
866
placeMarking.setValue(placeMarkingNode.getConstant());
868
userChangedAtomicPropSelection = true;
871
private void setEnablednessOfOperatorAndMarkingBoxes() {
872
if (transitionIsSelected()) {
873
placeMarking.setVisible(false);
874
relationalOperatorBox.setVisible(false);
875
transitionIsEnabledLabel.setVisible(true);
877
transitionIsEnabledLabel.setVisible(false);
878
placeMarking.setVisible(true);
879
relationalOperatorBox.setVisible(true);
883
private boolean transitionIsSelected() {
884
String itemName = (String) placesBox.getSelectedItem();
885
if (itemName == null) return false;
886
boolean transitionSelected = false;
887
boolean sharedTransitionSelected = false;
888
for (TimedArcPetriNet tapn : tapnNetwork.activeTemplates()) {
889
if (tapn.getTransitionByName(itemName) != null) {
890
transitionSelected = true;
894
if (!transitionSelected) {
895
sharedTransitionSelected = tapnNetwork.getSharedTransitionByName(itemName) != null;
897
return transitionSelected || sharedTransitionSelected;
774
900
private void deleteSelection() {
775
901
if (currentSelection != null) {
776
902
TCTLAbstractProperty replacement = null;
822
948
String reductionOptionString = getReductionOptionAsString();
824
950
ArrayList<String> options = new ArrayList<String>();
826
952
disableSymmetryUpdate = true;
827
953
//The order here should be the same as in EngineSupportOptions
828
boolean[] queryOptions = new boolean[]{fastestTraceRadioButton.isSelected(),
829
(queryHasDeadlock() && (getQuantificationSelection().equals("E<>") || getQuantificationSelection().equals("A[]")) && highestNetDegree <= 2),
830
(queryHasDeadlock() && (getQuantificationSelection().equals("E[]") || getQuantificationSelection().equals("A<>"))),
954
boolean[] queryOptions = new boolean[]{
955
fastestTraceRadioButton.isSelected(),
956
(queryHasDeadlock() && (newProperty.toString().contains("EF") || newProperty.toString().contains("AG")) && highestNetDegree <= 2),
957
(queryHasDeadlock() && (newProperty.toString().contains("EG") || newProperty.toString().contains("AF"))),
831
958
(queryHasDeadlock() && hasInhibitorArcs),
832
959
tapnNetwork.hasWeights(),
833
960
hasInhibitorArcs,
834
961
tapnNetwork.hasUrgentTransitions(),
835
(getQuantificationSelection().equals("E[]") || getQuantificationSelection().equals("A<>")),
962
(newProperty.toString().contains("EG") || newProperty.toString().contains("AF")),
836
963
//we want to know if it is strict
837
964
!tapnNetwork.isNonStrict(),
838
965
//we want to know if it is timed
840
967
(queryHasDeadlock() && highestNetDegree > 2),
842
(getQuantificationSelection().equals("E[]") || getQuantificationSelection().equals("A<>")) && highestNetDegree > 2,
969
(newProperty.toString().contains("EG") || newProperty.toString().contains("AF")) && highestNetDegree > 2,
843
970
newProperty.hasNestedPathQuantifiers()
847
974
if(useTimeDarts != null){
848
975
if(hasForcedDisabledTimeDarts){
849
976
hasForcedDisabledTimeDarts = false;
850
977
useTimeDarts.setSelected(true);
852
useTimeDarts.setEnabled(true);
979
useTimeDarts.setEnabled(true);
855
982
if(useStubbornReduction != null){
1012
1160
setEnablednessOfAddPredicateButton();
1163
private void enableOnlyUntimedStateButtons() {
1164
existsBox.setEnabled(true);
1165
existsDiamond.setEnabled(true);
1166
forAllBox.setEnabled(true);
1167
forAllDiamond.setEnabled(true);
1168
existsUntil.setEnabled(true);
1169
existsNext.setEnabled(true);
1170
forAllUntil.setEnabled(true);
1171
forAllNext.setEnabled(true);
1173
conjunctionButton.setEnabled(true);
1174
disjunctionButton.setEnabled(true);
1175
negationButton.setEnabled(true);
1176
templateBox.setEnabled(true);
1177
placesBox.setEnabled(true);
1178
relationalOperatorBox.setEnabled(true);
1179
placeMarking.setEnabled(true);
1180
truePredicateButton.setEnabled(true);
1181
falsePredicateButton.setEnabled(true);
1182
deadLockPredicateButton.setEnabled(true);
1183
setEnablednessOfAddPredicateButton();
1015
1186
private void enableOnlyForAllBox() {
1016
1187
existsBox.setEnabled(false);
1017
1188
existsDiamond.setEnabled(false);
1018
1189
forAllBox.setEnabled(true);
1019
1190
forAllDiamond.setEnabled(false);
1191
if (!lens.isTimed()) {
1192
existsUntil.setEnabled(false);
1193
existsNext.setEnabled(false);
1194
forAllUntil.setEnabled(false);
1195
forAllNext.setEnabled(false);
1020
1198
conjunctionButton.setEnabled(false);
1021
1199
disjunctionButton.setEnabled(false);
1022
1200
negationButton.setEnabled(false);
1076
1254
disableAllQueryButtons();
1077
1255
disableEditingButtons();
1078
1256
setSaveButtonsEnabled();
1080
1258
// Set default caret location to end of query
1081
1259
queryField.setCaretPosition(queryField.getText().length());
1084
1262
private void updateQueryOnAtomicPropositionChange() {
1085
if (currentSelection != null && currentSelection.getObject() instanceof TCTLAtomicPropositionNode) {
1086
Object item = templateBox.getSelectedItem();
1263
if (currentSelection != null && (currentSelection.getObject() instanceof TCTLAtomicPropositionNode ||
1264
(!lens.isTimed() && currentSelection.getObject() instanceof TCTLTransitionNode))) {
1266
Object item = templateBox.getSelectedItem();
1087
1267
String template = item.equals(SHARED) ? "" : item.toString();
1088
TCTLAtomicPropositionNode property = new TCTLAtomicPropositionNode(
1089
new TCTLPlaceNode(template, (String) placesBox.getSelectedItem()),
1090
(String) relationalOperatorBox.getSelectedItem(),
1091
new TCTLConstNode((Integer) placeMarking.getValue()));
1268
TCTLAbstractStateProperty property;
1270
if (!lens.isTimed() && transitionIsSelected()) {
1271
property = new TCTLTransitionNode(template, (String) placesBox.getSelectedItem());
1273
property = new TCTLAtomicPropositionNode(
1274
new TCTLPlaceNode(template, (String) placesBox.getSelectedItem()),
1275
(String) relationalOperatorBox.getSelectedItem(),
1276
new TCTLConstNode((Integer) placeMarking.getValue()));
1092
1279
if (!property.equals(currentSelection.getObject())) {
1093
1280
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1094
1281
newProperty = newProperty.replace(currentSelection.getObject(), property);
1188
reductionOption.addItem(reduction);
1189
reductionOption.setSelectedItem(reduction);
1190
symmetryReduction.setSelected(symmetry);
1191
useTimeDarts.setSelected(queryToCreateFrom.useTimeDarts());
1192
usePTrie.setSelected(queryToCreateFrom.usePTrie());
1193
useStubbornReduction.setSelected(queryToCreateFrom.isStubbornReductionEnabled());
1194
useGCD.setSelected(queryToCreateFrom.useGCD());
1195
useOverApproximation.setSelected(queryToCreateFrom.useOverApproximation());
1196
useReduction.setSelected(queryToCreateFrom.useReduction());
1197
discreteInclusion.setSelected(queryToCreateFrom.discreteInclusion());
1198
if(queryToCreateFrom.discreteInclusion()) selectInclusionPlacesButton.setEnabled(true);
1377
reductionOption.addItem(reduction);
1378
reductionOption.setSelectedItem(reduction);
1380
if (lens.isTimed()) {
1381
setupTimedReductionOptions(queryToCreateFrom);
1383
setupUntimedReductionOptions(queryToCreateFrom);
1387
private void setupTimedReductionOptions(TAPNQuery queryToCreateFrom) {
1388
symmetryReduction.setSelected(queryToCreateFrom.useSymmetry());
1389
useTimeDarts.setSelected(queryToCreateFrom.useTimeDarts());
1390
usePTrie.setSelected(queryToCreateFrom.usePTrie());
1391
useStubbornReduction.setSelected(queryToCreateFrom.isStubbornReductionEnabled());
1392
useGCD.setSelected(queryToCreateFrom.useGCD());
1393
useOverApproximation.setSelected(queryToCreateFrom.useOverApproximation());
1394
useReduction.setSelected(queryToCreateFrom.useReduction());
1395
discreteInclusion.setSelected(queryToCreateFrom.discreteInclusion());
1397
if (queryToCreateFrom.discreteInclusion()) {
1398
selectInclusionPlacesButton.setEnabled(true);
1402
private void setupUntimedReductionOptions(TAPNQuery queryToCreateFrom) {
1403
useSiphonTrap.setSelected(queryToCreateFrom.isSiphontrapEnabled());
1404
useQueryReduction.setSelected(queryToCreateFrom.isQueryReductionEnabled());
1405
useStubbornReduction.setSelected(queryToCreateFrom.isStubbornReductionEnabled());
1406
useReduction.setSelected(queryToCreateFrom.useReduction());
1201
1409
private void setupTraceOptionsFromQuery(TAPNQuery queryToCreateFrom) {
1202
1410
if (queryToCreateFrom.getTraceOption() == TraceOption.SOME) {
1203
1411
someTraceRadioButton.setSelected(true);
1522
1732
gbc.fill = GridBagConstraints.BOTH;
1733
gbc.anchor = GridBagConstraints.CENTER;
1524
1735
queryPanel.add(queryScrollPane, gbc);
1527
1738
private void initQuantificationPanel() {
1528
1739
quantificationPanel = new JPanel(new GridBagLayout());
1529
1740
quantificationPanel.setBorder(BorderFactory.createTitledBorder("Quantification"));
1530
quantificationRadioButtonGroup = new ButtonGroup();
1741
quantificationButtonGroup = new ButtonGroup();
1531
1742
approximationRadioButtonGroup = new ButtonGroup();
1533
existsDiamond = new JRadioButton("(EF) There exists some reachable marking that satisifies:");
1534
existsBox = new JRadioButton("(EG) There exists a trace on which every marking satisfies:");
1535
forAllDiamond = new JRadioButton("(AF) On all traces there is eventually a marking that satisfies:");
1536
forAllBox = new JRadioButton("(AG) All reachable markings satisfy:");
1539
existsDiamond.setToolTipText(TOOL_TIP_EXISTS_DIAMOND);
1540
existsBox.setToolTipText(TOOL_TIP_EXISTS_BOX);
1541
forAllDiamond.setToolTipText(TOOL_TIP_FORALL_DIAMOND);
1542
forAllBox.setToolTipText(TOOL_TIP_FORALL_BOX);
1544
quantificationRadioButtonGroup.add(existsDiamond);
1545
quantificationRadioButtonGroup.add(existsBox);
1546
quantificationRadioButtonGroup.add(forAllDiamond);
1547
quantificationRadioButtonGroup.add(forAllBox);
1549
GridBagConstraints gbc = new GridBagConstraints();
1552
gbc.anchor = GridBagConstraints.WEST;
1553
quantificationPanel.add(existsDiamond, gbc);
1556
quantificationPanel.add(existsBox, gbc);
1559
quantificationPanel.add(forAllDiamond, gbc);
1562
quantificationPanel.add(forAllBox, gbc);
1744
// Instantiate buttons
1745
existsDiamond = new JButton("EF");
1746
existsBox = new JButton("EG");
1747
forAllDiamond = new JButton("AF");
1748
forAllBox = new JButton("AG");
1749
existsUntil = new JButton("EU");
1750
existsNext = new JButton("EX");
1751
forAllUntil = new JButton("AU");
1752
forAllNext = new JButton("AX");
1755
existsDiamond.setToolTipText(TOOL_TIP_EXISTS_DIAMOND);
1756
existsBox.setToolTipText(TOOL_TIP_EXISTS_BOX);
1757
forAllDiamond.setToolTipText(TOOL_TIP_FORALL_DIAMOND);
1758
forAllBox.setToolTipText(TOOL_TIP_FORALL_BOX);
1759
existsUntil.setToolTipText(TOOL_TIP_EXISTS_UNTIL);
1760
existsNext.setToolTipText(TOOL_TIP_EXISTS_NEXT);
1761
forAllUntil.setToolTipText(TOOL_TIP_FORALL_UNTIL);
1762
forAllNext.setToolTipText(TOOL_TIP_FORALL_NEXT);
1764
// Add buttons to panel
1765
quantificationButtonGroup.add(existsDiamond);
1766
quantificationButtonGroup.add(existsBox);
1767
quantificationButtonGroup.add(forAllDiamond);
1768
quantificationButtonGroup.add(forAllBox);
1769
quantificationButtonGroup.add(existsUntil);
1770
quantificationButtonGroup.add(existsNext);
1771
quantificationButtonGroup.add(forAllUntil);
1772
quantificationButtonGroup.add(forAllNext);
1774
// Place buttons in GUI
1775
GridBagConstraints gbc = new GridBagConstraints();
1777
gbc.anchor = GridBagConstraints.WEST;
1779
// First column of buttons
1781
gbc.insets = new Insets(0, 0, 5, 0);
1782
quantificationPanel.add(existsDiamond, gbc);
1784
quantificationPanel.add(existsBox, gbc);
1786
quantificationPanel.add(existsUntil, gbc);
1788
quantificationPanel.add(existsNext, gbc);
1790
// Second column of buttons
1793
gbc.insets = new Insets(0, 0, 5, 0);
1794
quantificationPanel.add(forAllDiamond, gbc);
1796
quantificationPanel.add(forAllBox, gbc);
1798
quantificationPanel.add(forAllUntil, gbc);
1800
quantificationPanel.add(forAllNext, gbc);
1802
// Add quantification panel to query panel
1564
1803
gbc = new GridBagConstraints();
1568
1807
gbc.fill = GridBagConstraints.VERTICAL;
1569
1808
queryPanel.add(quantificationPanel, gbc);
1810
if (lens.isTimed()) {
1811
addTimedQuantificationListeners();
1813
addUntimedQuantificationListeners();
1817
private void addTimedQuantificationListeners() {
1571
1818
// Add action listeners to the query options
1572
1819
existsBox.addActionListener(e -> {
1573
1820
TCTLEGNode property = new TCTLEGNode(getSpecificChildOfProperty(1, currentSelection.getObject()));
1574
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1575
newProperty = newProperty.replace(currentSelection.getObject(), property);
1576
updateSelection(property);
1577
undoSupport.postEdit(edit);
1821
existsBox.setSelected(true);
1822
addPropertyToQuery(property);
1581
1826
existsDiamond.addActionListener(e -> {
1582
1827
TCTLEFNode property = new TCTLEFNode(getSpecificChildOfProperty(1, currentSelection.getObject()));
1583
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1584
newProperty = newProperty.replace(currentSelection.getObject(), property);
1585
updateSelection(property);
1586
undoSupport.postEdit(edit);
1828
existsDiamond.setSelected(true);
1829
addPropertyToQuery(property);
1590
1833
forAllBox.addActionListener(e -> {
1591
1834
TCTLAGNode property = new TCTLAGNode(getSpecificChildOfProperty(1, currentSelection.getObject()));
1592
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1593
newProperty = newProperty.replace(currentSelection.getObject(), property);
1594
updateSelection(property);
1595
undoSupport.postEdit(edit);
1835
forAllBox.setSelected(true);
1836
addPropertyToQuery(property);
1599
1840
forAllDiamond.addActionListener(e -> {
1600
1841
TCTLAFNode property = new TCTLAFNode(getSpecificChildOfProperty(1, currentSelection.getObject()));
1601
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1602
newProperty = newProperty.replace(currentSelection.getObject(), property);
1603
updateSelection(property);
1604
undoSupport.postEdit(edit);
1842
forAllDiamond.setSelected(true);
1843
addPropertyToQuery(property);
1848
private void unselectButtons() {
1849
existsDiamond.setSelected(false);
1850
existsBox.setSelected(false);
1851
forAllBox.setSelected(false);
1852
forAllDiamond.setSelected(false);
1855
private void addUntimedQuantificationListeners() {
1856
addTimedQuantificationListeners();
1858
existsNext.addActionListener(new ActionListener() {
1859
public void actionPerformed(ActionEvent e) {
1860
TCTLAbstractPathProperty property;
1861
if (currentSelection.getObject() instanceof TCTLAbstractStateProperty) {
1862
property = new TCTLEXNode((TCTLAbstractStateProperty) currentSelection.getObject());
1864
property = new TCTLEXNode(getSpecificChildOfProperty(1, currentSelection.getObject()));
1866
addPropertyToQuery(property);
1870
existsUntil.addActionListener(new ActionListener() {
1871
public void actionPerformed(ActionEvent e) {
1872
TCTLAbstractPathProperty property;
1873
if (currentSelection.getObject() instanceof TCTLAbstractStateProperty) {
1874
property = new TCTLEUNode((TCTLAbstractStateProperty) currentSelection.getObject(),
1875
new TCTLStatePlaceHolder());
1877
property = new TCTLEUNode(getSpecificChildOfProperty(1, currentSelection.getObject()),
1878
getSpecificChildOfProperty(2, currentSelection.getObject()));
1880
addPropertyToQuery(property);
1884
forAllNext.addActionListener(new ActionListener() {
1885
public void actionPerformed(ActionEvent e) {
1886
TCTLAbstractPathProperty property;
1887
if (currentSelection.getObject() instanceof TCTLAbstractStateProperty) {
1888
property = new TCTLAXNode((TCTLAbstractStateProperty) currentSelection.getObject());
1890
property = new TCTLAXNode(getSpecificChildOfProperty(1, currentSelection.getObject()));
1892
addPropertyToQuery(property);
1896
forAllUntil.addActionListener(new ActionListener() {
1897
public void actionPerformed(ActionEvent e) {
1898
TCTLAbstractPathProperty property;
1899
if (currentSelection.getObject() instanceof TCTLAbstractStateProperty) {
1900
property = new TCTLAUNode((TCTLAbstractStateProperty) currentSelection.getObject(),
1901
new TCTLStatePlaceHolder());
1903
property = new TCTLAUNode(getSpecificChildOfProperty(1, currentSelection.getObject()),
1904
getSpecificChildOfProperty(2, currentSelection.getObject()));
1906
addPropertyToQuery(property);
1911
private void addPropertyToQuery(TCTLAbstractPathProperty property) {
1912
if (currentSelection.getObject() instanceof TCTLAbstractStateProperty) {
1913
addPropertyToQuery(ConvertToStateProperty(property));
1917
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1918
newProperty = newProperty.replace(currentSelection.getObject(), property);
1919
updateSelection(property);
1920
undoSupport.postEdit(edit);
1924
private void addPropertyToQuery(TCTLAbstractStateProperty property) {
1925
if (currentSelection.getObject() instanceof TCTLAbstractPathProperty) {
1926
addPropertyToQuery(ConvertToPathProperty(property));
1930
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1931
newProperty = newProperty.replace(currentSelection.getObject(), property);
1932
updateSelection(property);
1933
undoSupport.postEdit(edit);
1937
private TCTLAbstractStateProperty ConvertToStateProperty(TCTLAbstractPathProperty p) {
1938
if (p instanceof TCTLStateToPathConverter) {
1939
return ((TCTLStateToPathConverter) p).getProperty();
1940
} else return new TCTLPathToStateConverter(p);
1943
private TCTLAbstractPathProperty ConvertToPathProperty(TCTLAbstractStateProperty p) {
1944
if (p instanceof TCTLPathToStateConverter) {
1945
return ((TCTLPathToStateConverter) p).getProperty();
1946
} else return new TCTLStateToPathConverter(p);
1609
1949
private void initLogicPanel() {
1610
1950
logicButtonPanel = new JPanel(new GridBagLayout());
1611
1951
logicButtonPanel.setBorder(BorderFactory.createTitledBorder("Logic"));
1696
2023
if (currentSelection.getObject() instanceof TCTLOrListNode) {
1697
2024
orListNode = new TCTLOrListNode((TCTLOrListNode) currentSelection.getObject());
1698
2025
orListNode.addDisjunct(new TCTLStatePlaceHolder());
1699
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), orListNode);
1700
newProperty = newProperty.replace(currentSelection.getObject(), orListNode);
1701
updateSelection(orListNode);
1702
undoSupport.postEdit(edit);
1703
} else if (currentSelection.getObject() instanceof TCTLAndListNode) {
2026
addPropertyToQuery(orListNode);
2027
} else if (currentSelection.getObject() instanceof TCTLAndListNode) {
1704
2028
orListNode = new TCTLOrListNode(((TCTLAndListNode) currentSelection.getObject()).getProperties());
1705
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), orListNode);
1706
newProperty = newProperty.replace(currentSelection.getObject(), orListNode);
1707
updateSelection(orListNode);
1708
undoSupport.postEdit(edit);
1709
} else if (currentSelection.getObject() instanceof TCTLAbstractStateProperty) {
2029
addPropertyToQuery(orListNode);
2030
} else if (currentSelection.getObject() instanceof TCTLAbstractStateProperty) {
1710
2031
TCTLAbstractStateProperty prop = (TCTLAbstractStateProperty) currentSelection.getObject();
1711
2032
TCTLAbstractProperty parentNode = prop.getParent();
1715
2036
// new placeholder disjunct to it
1716
2037
orListNode = new TCTLOrListNode((TCTLOrListNode) parentNode);
1717
2038
orListNode.addDisjunct(new TCTLStatePlaceHolder());
1718
UndoableEdit edit = new QueryConstructionEdit(parentNode, orListNode);
1719
newProperty = newProperty.replace(parentNode, orListNode);
1720
updateSelection(orListNode);
1721
undoSupport.postEdit(edit);
2039
addPropertyToQuery(orListNode);
1723
2041
TCTLStatePlaceHolder ph = new TCTLStatePlaceHolder();
1724
2042
orListNode = new TCTLOrListNode(getStateProperty(currentSelection.getObject()), ph);
1725
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), orListNode);
1726
newProperty = newProperty.replace(currentSelection.getObject(), orListNode);
1727
updateSelection(orListNode);
1728
undoSupport.postEdit(edit);
2043
addPropertyToQuery(orListNode);
2045
} else if (!lens.isTimed()) {
2046
checkUntimedOrNode();
1736
2051
negationButton.addActionListener(e -> {
1737
TCTLNotNode property = new TCTLNotNode(getStateProperty(currentSelection.getObject()));
1738
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1739
newProperty = newProperty.replace(currentSelection.getObject(), property);
1740
updateSelection(property);
1741
undoSupport.postEdit(edit);
2052
if (lens.isTimed()) {
2053
TCTLNotNode property = new TCTLNotNode(getStateProperty(currentSelection.getObject()));
2054
addPropertyToQuery(property);
2056
TCTLAbstractStateProperty root;
2057
if (currentSelection.getObject() instanceof TCTLAbstractPathProperty) {
2058
root = ConvertToStateProperty(getPathProperty(currentSelection.getObject()));
2060
root = getStateProperty(currentSelection.getObject());
2062
TCTLNotNode property = new TCTLNotNode(root);
2063
addPropertyToQuery(property);
2068
private void checkUntimedAndNode() {
2069
TCTLAndListNode andListNode;
2070
if (currentSelection.getObject() instanceof TCTLStateToPathConverter) {
2071
TCTLStatePlaceHolder ph = new TCTLStatePlaceHolder();
2073
TCTLAbstractStateProperty prop = ((TCTLStateToPathConverter) currentSelection.getObject()).getProperty();
2075
if (prop instanceof TCTLAndListNode) {
2076
andListNode = new TCTLAndListNode((TCTLAndListNode) prop);
2077
andListNode.addConjunct(new TCTLStatePlaceHolder());
2078
} else if (prop instanceof TCTLOrListNode) {
2079
andListNode = new TCTLAndListNode(((TCTLOrListNode) prop).getProperties());
2081
andListNode = new TCTLAndListNode(getStateProperty(prop), ph);
2084
TCTLAbstractPathProperty property = new TCTLStateToPathConverter(andListNode);
2085
addPropertyToQuery(property);
2086
} else if (currentSelection.getObject() instanceof TCTLAbstractPathProperty) {
2087
TCTLStatePlaceHolder ph = new TCTLStatePlaceHolder();
2088
andListNode = new TCTLAndListNode(getStateProperty(
2089
new TCTLPathToStateConverter((TCTLAbstractPathProperty) currentSelection.getObject())), ph);
2091
TCTLAbstractPathProperty property = new TCTLStateToPathConverter(andListNode);
2092
addPropertyToQuery(property);
2096
private void checkUntimedOrNode() {
2097
TCTLOrListNode orListNode;
2098
if (currentSelection.getObject() instanceof TCTLStateToPathConverter) {
2099
TCTLStatePlaceHolder ph = new TCTLStatePlaceHolder();
2101
TCTLAbstractStateProperty prop = ((TCTLStateToPathConverter) currentSelection.getObject()).getProperty();
2103
if (prop instanceof TCTLOrListNode) {
2104
orListNode = new TCTLOrListNode((TCTLOrListNode) prop);
2105
orListNode.addDisjunct(new TCTLStatePlaceHolder());
2106
} else if (prop instanceof TCTLAndListNode) {
2107
orListNode = new TCTLOrListNode(((TCTLAndListNode) prop).getProperties());
2109
orListNode = new TCTLOrListNode(getStateProperty(prop), ph);
2112
TCTLAbstractPathProperty property = new TCTLStateToPathConverter(orListNode);
2113
addPropertyToQuery(property);
2114
} else if (currentSelection.getObject() instanceof TCTLAbstractPathProperty) {
2115
TCTLStatePlaceHolder ph = new TCTLStatePlaceHolder();
2116
orListNode = new TCTLOrListNode(getStateProperty(
2117
new TCTLPathToStateConverter((TCTLAbstractPathProperty) currentSelection.getObject())), ph);
2119
TCTLAbstractPathProperty property = new TCTLStateToPathConverter(orListNode);
2120
addPropertyToQuery(property);
1746
2124
private void initPredicationConstructionPanel() {
1747
2125
predicatePanel = new JPanel(new GridBagLayout());
1748
2126
predicatePanel.setBorder(BorderFactory.createTitledBorder("Predicates"));
1809
2200
gbc.anchor = GridBagConstraints.WEST;
1810
2201
predicatePanel.add(templateBox, gbc);
1812
gbc = new GridBagConstraints();
1815
gbc.anchor = GridBagConstraints.WEST;
1816
predicatePanel.add(placesBox, gbc);
1818
String[] relationalSymbols = { "=", "<=", "<", ">=", ">" };
1819
relationalOperatorBox = new JComboBox<>(new DefaultComboBoxModel<>(relationalSymbols));
1822
predicatePanel.add(relationalOperatorBox, gbc);
1824
placeMarking = new CustomJSpinner(0);
1825
placeMarking.setMaximumSize(new Dimension(60, 30));
1826
placeMarking.setMinimumSize(new Dimension(60, 30));
1827
placeMarking.setPreferredSize(new Dimension(60, 30));
1830
predicatePanel.add(placeMarking, gbc);
1832
addPredicateButton = new JButton("Add predicate to the query");
1836
predicatePanel.add(addPredicateButton, gbc);
2203
JPanel templateRow = new JPanel(new FlowLayout(FlowLayout.CENTER));
2204
predicatePanel.add(templateRow, gbc);
2205
templateBox.setPreferredSize(new Dimension(292, 27));
2206
templateRow.add(templateBox);
2208
JPanel placeRow = new JPanel(new FlowLayout(FlowLayout.CENTER));
2210
predicatePanel.add(placeRow, gbc);
2211
placeRow.add(placesBox);
2213
String[] relationalSymbols = { "=", "!=", "<=", "<", ">=", ">" };
2214
relationalOperatorBox = new JComboBox(new DefaultComboBoxModel(relationalSymbols));
2215
relationalOperatorBox.setPreferredSize(new Dimension(80, 27));
2216
placeRow.add(relationalOperatorBox);
2218
placeMarking = new CustomJSpinner(0);
2219
placeMarking.setPreferredSize(new Dimension(80, 27));
2220
placeRow.add(placeMarking);
2222
transitionIsEnabledLabel = new JLabel(" is enabled");
2223
transitionIsEnabledLabel.setPreferredSize(new Dimension(165, 27));
2224
if (!lens.isTimed()) placeRow.add(transitionIsEnabledLabel);
2226
JPanel addPredicateRow = new JPanel(new FlowLayout(FlowLayout.CENTER));
2228
predicatePanel.add(addPredicateRow, gbc);
2229
addPredicateButton = new JButton("Add predicate to the query");
2230
addPredicateButton.setPreferredSize(new Dimension(292, 27));
2231
addPredicateRow.add(addPredicateButton);
1838
2233
JSeparator separator = new JSeparator(SwingConstants.HORIZONTAL);
1839
2234
separator.setEnabled(true);
1845
2240
gbc.fill = GridBagConstraints.HORIZONTAL;
1846
2241
predicatePanel.add(separator,gbc);
1848
truePredicateButton = new JButton("True");
1849
gbc = new GridBagConstraints();
1852
gbc.insets = new Insets(0, -38, 0,0);
1853
predicatePanel.add(truePredicateButton, gbc);
1855
falsePredicateButton = new JButton("False");
1856
gbc = new GridBagConstraints();
1859
gbc.insets = new Insets(0, -88, 0,0);
1860
predicatePanel.add(falsePredicateButton, gbc);
1862
deadLockPredicateButton = new JButton("Deadlock");
1863
gbc = new GridBagConstraints();
1867
gbc.insets = new Insets(0, -35, 0,0);
1868
predicatePanel.add(deadLockPredicateButton, gbc);
2243
truePredicateButton = new JButton("True");
2244
truePredicateButton.setPreferredSize(new Dimension(90, 27));
2246
falsePredicateButton = new JButton("False");
2247
falsePredicateButton.setPreferredSize(new Dimension(90, 27));
2249
deadLockPredicateButton = new JButton("Deadlock");
2250
deadLockPredicateButton.setPreferredSize(new Dimension(103, 27));
2252
JPanel trueFalseDeadlock = new JPanel(new FlowLayout(FlowLayout.CENTER));
2253
trueFalseDeadlock.add(truePredicateButton);
2254
trueFalseDeadlock.add(falsePredicateButton);
2255
trueFalseDeadlock.add(deadLockPredicateButton);
2257
gbc = new GridBagConstraints();
2260
gbc.anchor = GridBagConstraints.CENTER;
2261
predicatePanel.add(trueFalseDeadlock, gbc);
1870
2263
gbc = new GridBagConstraints();
1889
2282
public void actionPerformed(ActionEvent e) {
1890
2283
String template = templateBox.getSelectedItem().toString();
1891
2284
if(template.equals(SHARED)) template = "";
1892
TCTLAtomicPropositionNode property = new TCTLAtomicPropositionNode(
1893
new TCTLPlaceNode(template, (String) placesBox.getSelectedItem()),
1894
(String) relationalOperatorBox.getSelectedItem(),
1895
new TCTLConstNode((Integer) placeMarking.getValue()));
1896
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), property);
1897
newProperty = newProperty.replace(currentSelection.getObject(), property);
1898
updateSelection(property);
1899
undoSupport.postEdit(edit);
2286
if (lens.isTimed() && transitionIsSelected()) {
2287
addPropertyToQuery(new TCTLTransitionNode(template, (String) placesBox.getSelectedItem()));
2289
TCTLAtomicPropositionNode property = new TCTLAtomicPropositionNode(
2290
new TCTLPlaceNode(template, (String) placesBox.getSelectedItem()),
2291
(String) relationalOperatorBox.getSelectedItem(),
2292
new TCTLConstNode((Integer) placeMarking.getValue()));
2293
addPropertyToQuery(property);
1906
2298
truePredicateButton.addActionListener(new ActionListener() {
1907
2299
public void actionPerformed(ActionEvent e) {
1908
2300
TCTLTrueNode trueNode = new TCTLTrueNode();
1909
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), trueNode);
1910
newProperty = newProperty.replace(currentSelection.getObject(), trueNode);
1911
updateSelection(trueNode);
1912
undoSupport.postEdit(edit);
2301
addPropertyToQuery(trueNode);
1917
2305
falsePredicateButton.addActionListener(new ActionListener() {
1918
2306
public void actionPerformed(ActionEvent e) {
1919
2307
TCTLFalseNode falseNode = new TCTLFalseNode();
1920
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), falseNode);
1921
newProperty = newProperty.replace(currentSelection.getObject(), falseNode);
1922
updateSelection(falseNode);
1923
undoSupport.postEdit(edit);
2308
addPropertyToQuery(falseNode);
1928
2312
deadLockPredicateButton.addActionListener(new ActionListener() {
1929
2313
public void actionPerformed(ActionEvent e) {
1930
2314
TCTLDeadlockNode deadLockNode = new TCTLDeadlockNode();
1931
UndoableEdit edit = new QueryConstructionEdit(currentSelection.getObject(), deadLockNode);
1932
newProperty = newProperty.replace(currentSelection.getObject(), deadLockNode);
1933
updateSelection(deadLockNode);
1934
undoSupport.postEdit(edit);
2315
addPropertyToQuery(deadLockNode);
1939
2319
placesBox.addActionListener(e -> {
2281
2699
approximationRadioButtonGroup.add(noApproximationEnable);
2282
2700
approximationRadioButtonGroup.add(overApproximationEnable);
2283
2701
approximationRadioButtonGroup.add(underApproximationEnable);
2285
Enumeration<AbstractButton> buttons = approximationRadioButtonGroup.getElements();
2703
Enumeration<AbstractButton> buttons = approximationRadioButtonGroup.getElements();
2287
2705
while(buttons.hasMoreElements()){
2288
AbstractButton button = buttons.nextElement();
2706
AbstractButton button = buttons.nextElement();
2289
2707
button.addActionListener(e -> setEnabledOptionsAccordingToCurrentReduction());
2292
2710
GridBagConstraints gridBagConstraints = new GridBagConstraints();
2293
2711
gridBagConstraints.gridy = 0;
2294
2712
gridBagConstraints.weightx = 1;
2295
2713
gridBagConstraints.anchor = GridBagConstraints.WEST;
2297
JLabel approximationDenominatorLabel = new JLabel("Approximation constant: ");
2299
overApproximationDenominator = new CustomJSpinner(2, 2, Integer.MAX_VALUE);
2715
JLabel approximationDenominatorLabel = new JLabel("Approximation constant: ");
2717
overApproximationDenominator = new CustomJSpinner(2, 2, Integer.MAX_VALUE);
2300
2718
overApproximationDenominator.setMaximumSize(new Dimension(65, 30));
2301
2719
overApproximationDenominator.setMinimumSize(new Dimension(65, 30));
2302
2720
overApproximationDenominator.setPreferredSize(new Dimension(65, 30));
2303
2721
overApproximationDenominator.setToolTipText(TOOL_TIP_APPROXIMATION_CONSTANT);
2305
2723
overApproximationOptionsPanel.add(noApproximationEnable, gridBagConstraints);
2306
2724
overApproximationOptionsPanel.add(overApproximationEnable, gridBagConstraints);
2307
2725
overApproximationOptionsPanel.add(underApproximationEnable, gridBagConstraints);
2308
2726
overApproximationOptionsPanel.add(approximationDenominatorLabel, gridBagConstraints);
2309
2727
overApproximationOptionsPanel.add(overApproximationDenominator);
2311
2729
gridBagConstraints = new GridBagConstraints();
2312
2730
gridBagConstraints.gridx = 0;
2313
2731
gridBagConstraints.gridy = 5;
2314
2732
gridBagConstraints.anchor = GridBagConstraints.WEST;
2315
2733
gridBagConstraints.insets = new Insets(5,10,5,10);
2316
2734
gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
2318
2736
add(overApproximationOptionsPanel, gridBagConstraints);
2342
2760
gbc.insets = new Insets(0,5,0,5);
2343
2761
reductionOptionsPanel.add(reductionOption, gbc);
2345
symmetryReduction = new JCheckBox("Use symmetry reduction");
2346
symmetryReduction.setSelected(true);
2347
symmetryReduction.setToolTipText(TOOL_TIP_SYMMETRY_REDUCTION);
2349
gbc = new GridBagConstraints();
2352
gbc.anchor = GridBagConstraints.WEST;
2353
gbc.insets = new Insets(0,5,0,5);
2354
reductionOptionsPanel.add(symmetryReduction, gbc);
2356
discreteInclusion = new JCheckBox("Use discrete inclusion");
2357
discreteInclusion.setVisible(true);
2358
discreteInclusion.setToolTipText(TOOL_TIP_DISCRETE_INCLUSION);
2359
discreteInclusion.addActionListener(new ActionListener() {
2360
public void actionPerformed(ActionEvent e) {
2361
selectInclusionPlacesButton.setEnabled(discreteInclusion.isSelected());
2365
gbc = new GridBagConstraints();
2368
gbc.anchor = GridBagConstraints.WEST;
2369
gbc.insets = new Insets(0,5,0,5);
2370
reductionOptionsPanel.add(discreteInclusion, gbc);
2372
selectInclusionPlacesButton = new JButton("Select Inclusion Places");
2373
selectInclusionPlacesButton.setEnabled(false);
2374
selectInclusionPlacesButton.setToolTipText(TOOL_TIP_SELECT_INCLUSION_PLACES);
2375
selectInclusionPlacesButton.addActionListener(new ActionListener() {
2376
public void actionPerformed(ActionEvent e) {
2377
inclusionPlaces = ChooseInclusionPlacesDialog.showInclusionPlacesDialog(tapnNetwork, inclusionPlaces);
2381
gbc = new GridBagConstraints();
2384
gbc.anchor = GridBagConstraints.WEST;
2385
gbc.insets = new Insets(0,5,0,5);
2386
reductionOptionsPanel.add(selectInclusionPlacesButton, gbc);
2388
useTimeDarts = new JCheckBox("Use Time Darts");
2389
useTimeDarts.setSelected(false);
2390
useTimeDarts.setToolTipText(TOOL_TIP_TIME_DARTS);
2391
useTimeDarts.addActionListener(e -> setEnabledOptionsAccordingToCurrentReduction());
2393
gbc = new GridBagConstraints();
2396
gbc.anchor = GridBagConstraints.WEST;
2397
gbc.insets = new Insets(0,5,0,5);
2398
reductionOptionsPanel.add(useTimeDarts, gbc);
2400
useGCD = new JCheckBox("Use GCD");
2401
useGCD.setSelected(true);
2402
useGCD.setToolTipText(TOOL_TIP_GCD);
2404
gbc = new GridBagConstraints();
2407
gbc.anchor = GridBagConstraints.WEST;
2408
gbc.insets = new Insets(0,5,0,5);
2409
reductionOptionsPanel.add(useGCD, gbc);
2411
usePTrie = new JCheckBox("Use PTrie");
2412
usePTrie.setSelected(true);
2413
usePTrie.setToolTipText(TOOL_TIP_PTRIE);
2415
gbc = new GridBagConstraints();
2418
gbc.anchor = GridBagConstraints.WEST;
2419
gbc.insets = new Insets(0,5,0,5);
2420
reductionOptionsPanel.add(selectInclusionPlacesButton, gbc);
2422
useReduction = new JCheckBox("Apply net reductions");
2423
useReduction.setSelected(true);
2425
gbc = new GridBagConstraints();
2428
gbc.anchor = GridBagConstraints.WEST;
2429
gbc.insets = new Insets(0,5,0,5);
2430
reductionOptionsPanel.add(useReduction, gbc);
2433
gbc = new GridBagConstraints();
2436
gbc.anchor = GridBagConstraints.WEST;
2437
gbc.insets = new Insets(0,5,0,5);
2438
reductionOptionsPanel.add(usePTrie, gbc);
2440
useStubbornReduction = new JCheckBox("Use stubborn reduction");
2441
useStubbornReduction.setSelected(true);
2442
useStubbornReduction.setToolTipText(TOOL_TIP_STUBBORN_REDUCTION);
2444
gbc = new GridBagConstraints();
2447
gbc.anchor = GridBagConstraints.WEST;
2448
gbc.insets = new Insets(0,5,0,5);
2449
reductionOptionsPanel.add(useStubbornReduction, gbc);
2451
useOverApproximation = new JCheckBox("Use untimed state-equations check");
2452
useOverApproximation.setSelected(true);
2453
useOverApproximation.setToolTipText(TOOL_TIP_OVERAPPROX);
2455
gbc = new GridBagConstraints();
2458
gbc.anchor = GridBagConstraints.WEST;
2459
gbc.insets = new Insets(0,5,0,5);
2460
reductionOptionsPanel.add(useOverApproximation, gbc);
2763
useReduction = new JCheckBox("Apply net reductions");
2764
useSiphonTrap = new JCheckBox("Use siphon-trap analysis");
2765
useQueryReduction = new JCheckBox("Use query reduction");
2766
useStubbornReduction = new JCheckBox("Use stubborn reduction");
2767
symmetryReduction = new JCheckBox("Use symmetry reduction");
2768
discreteInclusion = new JCheckBox("Use discrete inclusion");
2769
selectInclusionPlacesButton = new JButton("Select Inclusion Places");
2770
useTimeDarts = new JCheckBox("Use Time Darts");
2771
useGCD = new JCheckBox("Use GCD");
2772
usePTrie = new JCheckBox("Use PTrie");
2773
useOverApproximation = new JCheckBox("Use untimed state-equations check");
2775
useReduction.setSelected(true);
2776
useSiphonTrap.setSelected(false);
2777
useQueryReduction.setSelected(true);
2778
useStubbornReduction.setSelected(true);
2779
symmetryReduction.setSelected(true);
2780
discreteInclusion.setVisible(true);
2781
selectInclusionPlacesButton.setEnabled(false);
2782
useTimeDarts.setSelected(false);
2783
useGCD.setSelected(true);
2784
usePTrie.setSelected(true);
2785
useOverApproximation.setSelected(true);
2787
useReduction.setToolTipText(TOOL_TIP_USE_STRUCTURALREDUCTION);
2788
useSiphonTrap.setToolTipText(TOOL_TIP_USE_SIPHONTRAP);
2789
useQueryReduction.setToolTipText(TOOL_TIP_USE_QUERY_REDUCTION);
2790
useStubbornReduction.setToolTipText(TOOL_TIP_STUBBORN_REDUCTION);
2791
symmetryReduction.setToolTipText(TOOL_TIP_SYMMETRY_REDUCTION);
2792
discreteInclusion.setToolTipText(TOOL_TIP_DISCRETE_INCLUSION);
2793
selectInclusionPlacesButton.setToolTipText(TOOL_TIP_SELECT_INCLUSION_PLACES);
2794
useTimeDarts.setToolTipText(TOOL_TIP_TIME_DARTS);
2795
useGCD.setToolTipText(TOOL_TIP_GCD);
2796
usePTrie.setToolTipText(TOOL_TIP_PTRIE);
2797
useOverApproximation.setToolTipText(TOOL_TIP_OVERAPPROX);
2799
if (lens.isTimed()) {
2800
initTimedReductionOptions();
2802
initUntimedReductionOptions();
2462
2805
gbc = new GridBagConstraints();
2467
2810
add(reductionOptionsPanel, gbc);
2813
private void initTimedReductionOptions() {
2814
GridBagConstraints gbc = new GridBagConstraints();
2817
gbc.anchor = GridBagConstraints.WEST;
2818
gbc.insets = new Insets(0,5,0,5);
2819
reductionOptionsPanel.add(symmetryReduction, gbc);
2822
reductionOptionsPanel.add(discreteInclusion, gbc);
2825
reductionOptionsPanel.add(useStubbornReduction, gbc);
2828
reductionOptionsPanel.add(useOverApproximation, gbc);
2831
reductionOptionsPanel.add(selectInclusionPlacesButton, gbc);
2834
reductionOptionsPanel.add(useTimeDarts, gbc);
2837
reductionOptionsPanel.add(useGCD, gbc);
2840
reductionOptionsPanel.add(selectInclusionPlacesButton, gbc);
2843
reductionOptionsPanel.add(usePTrie, gbc);
2845
discreteInclusion.addActionListener(new ActionListener() {
2846
public void actionPerformed(ActionEvent e) {
2847
selectInclusionPlacesButton.setEnabled(discreteInclusion.isSelected());
2851
selectInclusionPlacesButton.addActionListener(new ActionListener() {
2852
public void actionPerformed(ActionEvent e) {
2853
inclusionPlaces = ChooseInclusionPlacesDialog.showInclusionPlacesDialog(tapnNetwork, inclusionPlaces);
2857
useTimeDarts.addActionListener(e -> setEnabledOptionsAccordingToCurrentReduction());
2860
private void initUntimedReductionOptions() {
2861
GridBagConstraints gbc = new GridBagConstraints();
2864
gbc.anchor = GridBagConstraints.WEST;
2865
gbc.insets = new Insets(0,5,0,5);
2866
reductionOptionsPanel.add(useReduction, gbc);
2869
reductionOptionsPanel.add(useSiphonTrap, gbc);
2872
reductionOptionsPanel.add(useQueryReduction, gbc);
2875
reductionOptionsPanel.add(useStubbornReduction, gbc);
2470
2878
protected void setEnabledOptionsAccordingToCurrentReduction() {
2471
2879
refreshQueryEditingButtons();
2472
2880
refreshTraceOptions();
2473
refreshSymmetryReduction();
2474
refreshStubbornReduction();
2475
refreshDiscreteOptions();
2476
refreshDiscreteInclusion();
2477
refreshOverApproximationOption();
2881
if (lens.isTimed()) {
2882
refreshSymmetryReduction();
2883
refreshStubbornReduction();
2884
refreshDiscreteOptions();
2885
refreshDiscreteInclusion();
2886
refreshOverApproximationOption();
2478
2888
updateSearchStrategies();
2479
2889
refreshExportButtonText();
2648
3067
private void queryChanged(){
2649
setEnabledReductionOptions();
2650
refreshOverApproximationOption();
3068
setEnabledReductionOptions();
3069
if (lens.isTimed()) refreshOverApproximationOption();
2654
3073
private void initButtonPanel(QueryDialogueOption option) {
2655
3074
buttonPanel = new JPanel(new BorderLayout());
2656
3075
if (option == QueryDialogueOption.Save) {
2657
3076
saveButton = new JButton("Save");
2658
3077
saveAndVerifyButton = new JButton("Save and Verify");
2659
3078
cancelButton = new JButton("Cancel");
2661
3080
mergeNetComponentsButton = new JButton(EXPORT_COMPOSED_BTN_TEXT);
2662
3081
mergeNetComponentsButton.setVisible(false);
2664
3083
saveUppaalXMLButton = new JButton(EXPORT_UPPAAL_BTN_TEXT);
2665
3084
//Only show in advanced mode
2666
3085
saveUppaalXMLButton.setVisible(false);
2668
3087
//Add tool tips
2669
3088
saveButton.setToolTipText(TOOL_TIP_SAVE_BUTTON);
2670
3089
saveAndVerifyButton.setToolTipText(TOOL_TIP_SAVE_AND_VERIFY_BUTTON);
2671
3090
cancelButton.setToolTipText(TOOL_TIP_CANCEL_BUTTON);
2672
3091
saveUppaalXMLButton.setToolTipText(TOOL_TIP_SAVE_UPPAAL_BUTTON);
2673
3092
mergeNetComponentsButton.setToolTipText(TOOL_TIP_SAVE_COMPOSED_BUTTON);
2675
3094
saveButton.addActionListener(new ActionListener() {
2676
3095
public void actionPerformed(ActionEvent evt) {
2679
3098
if (checkIfSomeReductionOption()) {
2680
3099
querySaved = true;