13
12
import javax.swing.JLabel;
14
13
import javax.swing.JPanel;
16
import pipe.dataLayer.Arc;
17
import pipe.dataLayer.TAPNInhibitorArc;
18
import pipe.dataLayer.TAPNTransition;
19
import pipe.dataLayer.TimedArc;
20
import pipe.dataLayer.TimedPlace;
21
import pipe.dataLayer.Transition;
22
import pipe.dataLayer.TransportArc;
23
import pipe.dataLayer.colors.ColoredInputArc;
24
import pipe.dataLayer.colors.ColoredTimedPlace;
25
import pipe.dataLayer.colors.ColoredToken;
26
import pipe.dataLayer.colors.ColoredTransportArc;
27
import pipe.gui.CreateGui;
15
import dk.aau.cs.model.tapn.TimedInputArc;
16
import dk.aau.cs.model.tapn.TimedToken;
17
import dk.aau.cs.model.tapn.TimedTransition;
18
import dk.aau.cs.model.tapn.TransportArc;
30
public class AnimationSelectmodeDialog extends JPanel{
20
public class AnimationSelectmodeDialog extends JPanel {
32
22
private static final long serialVersionUID = 7852107237344005547L;
34
TAPNTransition firedtransition = null;
24
TimedTransition transition = null;
36
26
public ArrayList<JComboBox> presetPanels = new ArrayList<JComboBox>();
40
30
private JButton okButton;
41
31
private boolean cancelled = true;
43
public boolean cancelled(){
33
public boolean cancelled() {
47
public AnimationSelectmodeDialog(Transition t){
37
public AnimationSelectmodeDialog(TimedTransition transition) {
49
38
setLayout(new GridBagLayout());
51
40
GridBagConstraints c = new GridBagConstraints();
52
41
c.fill = GridBagConstraints.HORIZONTAL;
58
firedtransition = (TAPNTransition)t; // XXX - unsafe cast (ok by contract)
46
this.transition = transition;
60
48
namePanel = new JPanel(new FlowLayout());
61
namePanel.add(new JLabel("Select tokens to Fire in Transition " + t.getName()));
49
namePanel.add(new JLabel("<html>Select tokens to fire transition <b>" + transition.name() + "</b></html>"));
68
//Start adding the stuff
69
JPanel presetPanelContainer;
70
presetPanelContainer = new JPanel(new FlowLayout());
53
// Start adding the stuff
54
JPanel presetPanelContainer = new JPanel(new FlowLayout());
76
58
add(presetPanelContainer, c);
79
for (Arc a : t.getPreset()){
80
if(!(a instanceof TAPNInhibitorArc)){
81
JPanel presetPanel = createDropDownForArc(a);
82
presetPanelContainer.add(presetPanel);
60
if(transition.isShared()){
61
for(TimedTransition trans : transition.sharedTransition().transitions()){
62
createDropDownsForTransition(trans, presetPanelContainer);
65
createDropDownsForTransition(transition, presetPanelContainer);
90
70
okButton = new javax.swing.JButton();
92
72
okButton.setText("OK");
96
76
okButton.addActionListener(new java.awt.event.ActionListener() {
97
77
public void actionPerformed(java.awt.event.ActionEvent evt) {
106
private JPanel createDropDownForArc(Arc a) {
108
presetPanel = new JPanel(new FlowLayout());
110
//For each place in the preset create a box for selecting tokens
112
presetPanel.setBorder(BorderFactory.createTitledBorder("Place " + a.getSource().getName()));
113
presetPanel.add(new JLabel("Select token from Place " + a.getSource().getName()));
115
if(!CreateGui.getModel().isUsingColors()){
116
ArrayList<String> eligableToken = null;
118
DecimalFormat df = new DecimalFormat();
119
df.setMaximumFractionDigits(Pipe.AGE_DECIMAL_PRECISION);
120
df.setMinimumFractionDigits(1);
121
if (a instanceof TransportArc){
122
eligableToken= new ArrayList<String>();
123
TimedPlace p = (TimedPlace)a.getSource();
125
ArrayList<BigDecimal> tokensOfPlace = p.getTokens();
127
TimedPlace targetPlace = (TimedPlace)((TransportArc)a).getConnectedTo().getTarget();
129
for (int i=0; i< tokensOfPlace.size(); i++){
130
if ( ((TimedArc)a).satisfiesGuard(tokensOfPlace.get(i)) && targetPlace.satisfiesInvariant(tokensOfPlace.get(i))) {
131
eligableToken.add(df.format(tokensOfPlace.get(i)));
135
}else if (a instanceof TimedArc){
136
eligableToken = new ArrayList<String>();
137
//int indexOfOldestEligebleToken = 0;
139
TimedPlace p = (TimedPlace)a.getSource();
141
ArrayList<BigDecimal> tokensOfPlace = p.getTokens();
142
for (int i=0; i< tokensOfPlace.size(); i++){
143
if ( ((TimedArc)a).satisfiesGuard(tokensOfPlace.get(i))){
144
eligableToken.add(df.format(tokensOfPlace.get(i)));
149
JComboBox selectTokenBox = new JComboBox(eligableToken.toArray());
150
selectTokenBox.setSelectedIndex(0);
152
presetPanel.add(selectTokenBox);
153
presetPanels.add(selectTokenBox);
155
ColoredTimedPlace place = (ColoredTimedPlace)a.getSource();
157
ArrayList<ColoredToken> eligibleTokens = new ArrayList<ColoredToken>();
159
if(a instanceof ColoredTransportArc){
160
ColoredTransportArc cta = (ColoredTransportArc)a;
162
for(ColoredToken token : place.getColoredTokens()){
163
if(cta.satisfiesGuard(token)
164
&& cta.satisfiesTargetInvariant(token)){
165
eligibleTokens.add(token);
168
}else if(a instanceof ColoredInputArc){
169
ColoredInputArc cia = (ColoredInputArc)a;
171
for(ColoredToken token : place.getColoredTokens()){
172
if(cia.satisfiesGuard(token)){
173
eligibleTokens.add(token);
178
JComboBox selectTokenBox = new JComboBox(eligibleTokens.toArray());
179
selectTokenBox.setSelectedIndex(0);
181
presetPanel.add(selectTokenBox);
182
presetPanels.add(selectTokenBox);
86
private void createDropDownsForTransition(TimedTransition transition, JPanel presetPanelContainer) {
87
for (TimedInputArc arc : transition.getInputArcs()) {
88
JPanel tokenPanel = createDropDownForArc(arc.source().toString(), arc.getElligibleTokens());
89
presetPanelContainer.add(tokenPanel);
92
for (TransportArc arc : transition.getTransportArcsGoingThrough()) {
93
JPanel tokenPanel = createDropDownForArc(arc.source().toString(), arc.getElligibleTokens());
94
presetPanelContainer.add(tokenPanel);
98
private JPanel createDropDownForArc(String placeName, List<TimedToken> elligibleTokens) {
99
JPanel presetPanel = new JPanel(new FlowLayout());
101
// For each place in the preset create a box for selecting tokens
103
presetPanel.setBorder(BorderFactory.createTitledBorder("Place " + placeName));
104
presetPanel.add(new JLabel("Select token"));
106
JComboBox selectTokenBox = new JComboBox(elligibleTokens.toArray());
107
selectTokenBox.setSelectedIndex(0);
109
presetPanel.add(selectTokenBox);
110
presetPanels.add(selectTokenBox);
184
111
return presetPanel;
187
this.getRootPane().getParent().setVisible(false);
114
private void exit() {
115
this.getRootPane().getParent().setVisible(false);
118
public List<TimedToken> getTokens() {
119
if(cancelled) return null;
121
List<TimedToken> tokens = new ArrayList<TimedToken>();
122
for(JComboBox box : presetPanels){
123
tokens.add((TimedToken)box.getSelectedItem());