7
7
import java.util.Hashtable;
8
8
import java.util.List;
9
9
import java.util.Map.Entry;
11
10
import javax.swing.JCheckBox;
12
11
import javax.swing.JLabel;
13
12
import javax.swing.JList;
14
13
import javax.swing.JOptionPane;
15
14
import javax.swing.JScrollPane;
17
15
import dk.aau.cs.TCTL.visitors.BooleanResult;
18
16
import dk.aau.cs.TCTL.visitors.ContainsSharedPlaceVisitor;
19
17
import dk.aau.cs.TCTL.visitors.ContainsSharedTransitionVisitor;
32
30
import dk.aau.cs.model.tapn.SharedTransition;
33
31
import dk.aau.cs.model.tapn.TimedPlace;
34
32
import dk.aau.cs.model.tapn.TimedTransition;
36
33
import pipe.dataLayer.TAPNQuery;
37
34
import pipe.dataLayer.Template;
38
35
import pipe.gui.CreateGui;
64
61
SharedPlacesListModel sharedPlacesListModel;
65
62
SharedTransitionsListModel sharedTransitionsListModel;
66
63
NameGenerator nameGenerator;
68
66
public DeleteSharedPlaceOrTransition(JList list, SharedPlacesAndTransitionsPanel sharedPlacesAndTransitionsPanel, TabContent tab,
69
67
SharedPlacesListModel sharedPlacesListModel, SharedTransitionsListModel sharedTransitionsListModel, NameGenerator nameGenerator) {
92
90
public void actionPerformed(ActionEvent arg0) {
93
if(list.getSelectedValue() != null){
94
ArrayList<String> affectedComponents = new ArrayList<String>();
92
if(list.getSelectedValuesList() != null){
93
ArrayList<String> affectedComponents = new ArrayList<String>();
95
94
if(sharedPlacesAndTransitionsPanel.isDisplayingTransitions()){
96
for(TimedTransition t : ((SharedTransition)list.getSelectedValue()).transitions()){
97
affectedComponents.add(t.model().name());
95
for(Object transition : list.getSelectedValuesList()) {
96
for(TimedTransition t : ((SharedTransition)transition).transitions()){
97
if(!(affectedComponents.contains(t.model().name())))
98
affectedComponents.add(t.model().name());
100
affectedComponents = ((SharedPlace)list.getSelectedValue()).getComponentsUsingThisPlace();
102
ArrayList<String> affectedComponentsWithDupes = new ArrayList<String>();
103
for(Object place : list.getSelectedValuesList()) {
104
affectedComponentsWithDupes.addAll(((SharedPlace)place).getComponentsUsingThisPlace());
106
for(String component : affectedComponentsWithDupes) {
107
if(!(affectedComponents.contains(component))) {
108
affectedComponents.add(component);
103
113
DeleteSharedResult result = new DeleteSharedResult(JOptionPane.OK_OPTION, false);
108
118
if(result.choice == JOptionPane.OK_OPTION){
109
119
undoManager.newEdit();
120
Collection<TAPNQuery> affectedQueries = new ArrayList<TAPNQuery>();
110
122
if(sharedPlacesAndTransitionsPanel.isDisplayingTransitions()){
111
deleteSharedTransition(result.deleteFromTemplates);
123
affectedQueries = findAffectedTransitionQueries(list.getSelectedValuesList());
124
for(Object transition : list.getSelectedValuesList()) {
125
deleteSharedTransition(result.deleteFromTemplates, (SharedTransition) transition, affectedQueries);
113
deleteSharedPlace(result.deleteFromTemplates);
129
affectedQueries = findAffectedPlaceQueries(list.getSelectedValuesList());
130
for(Object place : list.getSelectedValuesList()) {
131
deleteSharedPlace(result.deleteFromTemplates, (SharedPlace) place, affectedQueries);
119
private void deleteSharedPlace(boolean deleteFromTemplates) {
120
SharedPlace sharedPlace = (SharedPlace)list.getSelectedValue();
121
Collection<TAPNQuery> affectedQueries = findAffectedPlaceQueries(sharedPlace);
122
if(affectedQueries.size() > 0){
138
private void deleteSharedPlace(boolean deleteFromTemplates, SharedPlace placeToRemove, Collection<TAPNQuery> affectedQueries) {
139
SharedPlace sharedPlace = placeToRemove;
140
if(affectedQueries.size() > 0 && messageShown == false){
123
142
StringBuffer buffer = new StringBuffer("The following queries contains the shared place and will also be deleted:");
124
143
buffer.append(System.getProperty("line.separator"));
125
144
buffer.append(System.getProperty("line.separator"));
187
private Collection<TAPNQuery> findAffectedPlaceQueries(SharedPlace sharedPlace) {
188
ArrayList<TAPNQuery> queries = new ArrayList<TAPNQuery>();
189
ContainsSharedPlaceVisitor visitor = new ContainsSharedPlaceVisitor(sharedPlace.name());
191
for(TAPNQuery query : tab.queries()){
192
BooleanResult result = new BooleanResult();
193
query.getProperty().accept(visitor, result);
201
private Collection<TAPNQuery> findAffectedTransitionQueries(SharedTransition sharedTransition) {
202
ArrayList<TAPNQuery> queries = new ArrayList<TAPNQuery>();
203
ContainsSharedTransitionVisitor visitor = new ContainsSharedTransitionVisitor(sharedTransition.name());
205
for(TAPNQuery query : tab.queries()){
206
BooleanResult result = new BooleanResult();
207
query.getProperty().accept(visitor, result);
206
private Collection<TAPNQuery> findAffectedPlaceQueries(List<Object> sharedPlaces) {
207
ArrayList<TAPNQuery> queries = new ArrayList<TAPNQuery>();
208
for(Object sharedPlace : sharedPlaces) {
209
ContainsSharedPlaceVisitor visitor = new ContainsSharedPlaceVisitor(((SharedPlace)sharedPlace).name());
211
for(TAPNQuery query : tab.queries()){
212
BooleanResult result = new BooleanResult();
213
query.getProperty().accept(visitor, result);
214
if(result.result() && !(queries.contains(query))){
222
private Collection<TAPNQuery> findAffectedTransitionQueries(List<Object> sharedTransitions) {
223
ArrayList<TAPNQuery> queries = new ArrayList<TAPNQuery>();
224
for(Object sharedTransition : sharedTransitions) {
225
ContainsSharedTransitionVisitor visitor = new ContainsSharedTransitionVisitor(((SharedTransition)sharedTransition).name());
227
for(TAPNQuery query : tab.queries()){
228
BooleanResult result = new BooleanResult();
229
query.getProperty().accept(visitor, result);
230
if(result.result() && !(queries.contains(query))){
215
239
private Command createDeleteArcCommand(Template template, Arc arc, DrawingSurfaceImpl drawingSurface) {
216
240
if(arc instanceof TimedInhibitorArcComponent){
231
255
undoManager.addEdit(cmd);
234
private void deleteSharedTransition(boolean deleteFromTemplates) {
235
SharedTransition sharedTransition = (SharedTransition)list.getSelectedValue();
236
Collection<TAPNQuery> affectedQueries = findAffectedTransitionQueries(sharedTransition);
237
if(affectedQueries.size() > 0){
238
StringBuffer buffer = new StringBuffer("The following queries contains the shared transition and will also be deleted:");
239
buffer.append(System.getProperty("line.separator"));
240
buffer.append(System.getProperty("line.separator"));
242
for(TAPNQuery query : affectedQueries){
243
buffer.append(query.getName());
244
buffer.append(System.getProperty("line.separator"));
246
buffer.append(System.getProperty("line.separator"));
247
buffer.append("Do you want to continue?");
248
int choice = JOptionPane.showConfirmDialog(CreateGui.getApp(), buffer.toString(), "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
249
if(choice == JOptionPane.NO_OPTION) return;
251
Command cmd = new DeleteQueriesCommand(tab, affectedQueries);
253
undoManager.addEdit(cmd);
258
private void deleteSharedTransition(boolean deleteFromTemplates, SharedTransition transitionToBeRemoved, Collection<TAPNQuery> affectedQueries) {
259
SharedTransition sharedTransition = transitionToBeRemoved;
260
if(affectedQueries.size() > 0 && !messageShown){
262
StringBuffer buffer = new StringBuffer("The following queries contains the shared transition and will also be deleted:");
263
buffer.append(System.getProperty("line.separator"));
264
buffer.append(System.getProperty("line.separator"));
266
for(TAPNQuery query : affectedQueries){
267
buffer.append(query.getName());
268
buffer.append(System.getProperty("line.separator"));
270
buffer.append(System.getProperty("line.separator"));
271
buffer.append("Do you want to continue?");
272
int choice = JOptionPane.showConfirmDialog(CreateGui.getApp(), buffer.toString(), "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
273
if(choice == JOptionPane.NO_OPTION) return;
275
Command cmd = new DeleteQueriesCommand(tab, affectedQueries);
277
undoManager.addEdit(cmd);
255
279
if(deleteFromTemplates){
256
280
for(Template template : tab.allTemplates()){ // TODO: Get rid of pipe references somehow