source: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/ModelsTabComposite.java @ 1094

Last change on this file since 1094 was 1094, checked in by pharms, 11 years ago
  • added a visualization for task trees
  • Property svn:mime-type set to text/plain
File size: 12.0 KB
RevLine 
[927]1//   Copyright 2012 Georg-August-Universität Göttingen, Germany
2//
3//   Licensed under the Apache License, Version 2.0 (the "License");
4//   you may not use this file except in compliance with the License.
5//   You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9//   Unless required by applicable law or agreed to in writing, software
10//   distributed under the License is distributed on an "AS IS" BASIS,
11//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//   See the License for the specific language governing permissions and
13//   limitations under the License.
14
[922]15package de.ugoe.cs.autoquest.ui.swt;
[526]16
17import org.eclipse.swt.SWT;
18import org.eclipse.swt.widgets.Composite;
19import org.eclipse.swt.widgets.Button;
20import org.eclipse.swt.widgets.List;
21import org.eclipse.swt.widgets.MessageBox;
22import org.eclipse.swt.layout.GridLayout;
23import org.eclipse.swt.layout.GridData;
24
[1094]25import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
[922]26import de.ugoe.cs.autoquest.usageprofiles.FirstOrderMarkovModel;
27import de.ugoe.cs.autoquest.usageprofiles.IDotCompatible;
28import de.ugoe.cs.autoquest.usageprofiles.IStochasticProcess;
[526]29import de.ugoe.cs.util.console.CommandExecuter;
[667]30import de.ugoe.cs.util.console.GlobalDataContainer;
[526]31
32import org.eclipse.swt.events.SelectionAdapter;
33import org.eclipse.swt.events.SelectionEvent;
34
35public class ModelsTabComposite extends Composite {
36
[1094]37    /** */
[570]38    List modelList;
[526]39
[1094]40    /** */
41    Button btnShow;
42
43    /** */
44    Button btnDelete_1;
45
46    /** */
47    Button btnGenSequences;
48
49    /** */
50    Button btnProperties;
51
52    /** */
53    Button btnCreateDot;
54   
[570]55    /**
56     * Create the composite.
57     *
58     * @param parent
59     * @param style
60     */
61    public ModelsTabComposite(Composite parent, int style) {
62        super(parent, style);
63        createContents();
64    }
[526]65
[1094]66    /**
67     *
68     */
[570]69    private void createContents() {
70        setLayout(new GridLayout(5, false));
71
72        modelList = new List(this, SWT.BORDER | SWT.V_SCROLL);
73        modelList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 5, 1));
[1094]74        modelList.addSelectionListener(new SelectionAdapter() {
75            @Override
76            public void widgetSelected(SelectionEvent e) {
77                String[] selectedStrings = modelList.getSelection();
78                if (selectedStrings.length == 1) {
79                    btnShow.setEnabled(true);
80                    btnDelete_1.setEnabled(true);
81                    Object obj = GlobalDataContainer.getInstance().getData(selectedStrings[0]);
82                    if (obj instanceof IStochasticProcess) {
83                        btnGenSequences.setEnabled(true);
84                        btnProperties.setEnabled(true);
85                        btnCreateDot.setEnabled(true);
86                    }
87                    else {
88                        btnGenSequences.setEnabled(false);
89                        btnProperties.setEnabled(false);
90                        btnCreateDot.setEnabled(false);
91                    }
92                }
93                else if (selectedStrings.length > 1) {
94                    btnShow.setEnabled(false);
95                    btnDelete_1.setEnabled(true);
96                    btnProperties.setEnabled(false);
97                    btnCreateDot.setEnabled(false);
98                   
99                    boolean enableSequenceGeneration = true;
100                    for (String selectedString : selectedStrings) {
101                        Object obj = GlobalDataContainer.getInstance().getData(selectedString);
102                        if (!(obj instanceof IStochasticProcess)) {
103                            enableSequenceGeneration = false;
104                            break;
105                        }
106                    }
107                    btnGenSequences.setEnabled(enableSequenceGeneration);
108                }
109            }
110        });
[570]111
[1094]112        btnShow = new Button(this, SWT.NONE);
[570]113        btnShow.addSelectionListener(new SelectionAdapter() {
114            @Override
115            public void widgetSelected(SelectionEvent e) {
116                String[] selectedStrings = modelList.getSelection();
117                if (selectedStrings.length == 0) {
118                    SWTHelpers.noSelectionError(getShell());
119                    return;
120                }
[1094]121                else if (selectedStrings.length > 1) {
122                    SWTHelpers.moreThanOneSelectedError(getShell());
123                    return;
124                }
125               
126                Object obj = GlobalDataContainer.getInstance().getData(selectedStrings[0]);
127               
128                if (obj instanceof FirstOrderMarkovModel) {
[570]129                    String command = "showMarkovModel " + selectedStrings[0];
130                    CommandExecuter.getInstance().exec(command);
131                }
[1094]132                else if (obj instanceof ITaskTree) {
133                    ShowTaskTreeDialog showTaskTreeDialog = new ShowTaskTreeDialog
134                        (getShell(), SWT.NONE, (ITaskTree) obj, selectedStrings[0]);
135                    showTaskTreeDialog.open();
136                }
[570]137                else {
138                    MessageBox messageBox = new MessageBox(getShell(), SWT.NONE);
139                    messageBox.setText("Feature Not Available");
[1094]140                    messageBox.setMessage("This feature is currently only available for " +
141                                          "first-order Markov models and task trees.");
[570]142                    messageBox.open();
143                }
144            }
145        });
146        btnShow.setText("Visualize");
[1094]147        btnShow.setEnabled(false);
[570]148
[1094]149        btnDelete_1 = new Button(this, SWT.NONE);
[570]150        btnDelete_1.addSelectionListener(new SelectionAdapter() {
151            @Override
152            public void widgetSelected(SelectionEvent e) {
153                if (SWTHelpers.deleteSelectedFromStorage(modelList)) {
154                    updateModelList();
155                }
156                else {
157                    SWTHelpers.noSelectionError(getShell());
158                }
159            }
160        });
161        btnDelete_1.setText("Delete");
[1094]162        btnDelete_1.setEnabled(false);
[570]163
[1094]164        btnGenSequences = new Button(this, SWT.NONE);
[570]165        btnGenSequences.addSelectionListener(new SelectionAdapter() {
166            @Override
167            public void widgetSelected(SelectionEvent e) {
168                String[] selectedStrings = modelList.getSelection();
169                if (selectedStrings.length == 0) {
170                    SWTHelpers.noSelectionError(getShell());
171                    return;
172                }
[1094]173               
174                boolean enableSequenceGeneration = true;
175                for (String selectedString : selectedStrings) {
176                    Object obj = GlobalDataContainer.getInstance().getData(selectedString);
177                    if (!(obj instanceof IStochasticProcess)) {
178                        enableSequenceGeneration = false;
179                        break;
180                    }
181                }
182               
183                if (enableSequenceGeneration) {
184                    GenerateSequencesDialog generateSequencesDialog =
185                        new GenerateSequencesDialog(getShell(), SWT.NONE);
186                    generateSequencesDialog.setProcessName(selectedStrings[0]);
187                    generateSequencesDialog.open();
188                }
189                else {
190                    MessageBox messageBox = new MessageBox(getShell(), SWT.NONE);
191                    messageBox.setText("Feature Not Available");
192                    messageBox.setMessage("This feature is not available for task trees. Please " +
193                                          "deselect the selected task tree(s)!");
194                    messageBox.open();
195                }
[570]196            }
197        });
198        btnGenSequences.setText("Gen. Sequences");
[1094]199        btnGenSequences.setEnabled(false);
[570]200
[1094]201        btnProperties = new Button(this, SWT.NONE);
[570]202        btnProperties.addSelectionListener(new SelectionAdapter() {
203            @Override
204            public void widgetSelected(SelectionEvent e) {
205                String[] selectedStrings = modelList.getSelection();
206                if (selectedStrings.length == 0) {
207                    SWTHelpers.noSelectionError(getShell());
208                    return;
209                }
[1094]210                else if (selectedStrings.length > 1) {
211                    SWTHelpers.moreThanOneSelectedError(getShell());
212                    return;
213                }
214               
215                Object obj = GlobalDataContainer.getInstance().getData(selectedStrings[0]);
216               
217                if (obj instanceof IStochasticProcess) {
218                    IStochasticProcess process = (IStochasticProcess) obj;
219                    ModelPropertiesDialog modelPropertiesDialog =
220                        new ModelPropertiesDialog(getShell(), SWT.NONE);
221                    modelPropertiesDialog.setStochasticProcess(process);
222                    modelPropertiesDialog.open();
223                }
224                else {
225                    MessageBox messageBox = new MessageBox(getShell(), SWT.NONE);
226                    messageBox.setText("Feature Not Available");
227                    messageBox.setMessage("The feature is currently only available for " +
228                                          "stochastic processes. Please select a model that " +
229                                          "is a stochastic process.");
230                    messageBox.open();
231                }
[570]232            }
233        });
234        btnProperties.setText("Properties");
[1094]235        btnProperties.setEnabled(false);
[570]236
[1094]237        btnCreateDot = new Button(this, SWT.NONE);
[570]238        btnCreateDot.addSelectionListener(new SelectionAdapter() {
239            @Override
240            public void widgetSelected(SelectionEvent e) {
241                String[] selectedStrings = modelList.getSelection();
242                if (selectedStrings.length == 0) {
243                    SWTHelpers.noSelectionError(getShell());
244                    return;
245                }
[1094]246                else if (selectedStrings.length > 1) {
247                    SWTHelpers.moreThanOneSelectedError(getShell());
248                    return;
[570]249                }
[1094]250               
251                Object obj = GlobalDataContainer.getInstance().getData(selectedStrings[0]);
252               
253                if (obj instanceof IStochasticProcess) {
254                    String command;
255                    if (obj instanceof IDotCompatible) {
256                        command = "printDot ";
257                    }
258                    else {
259                        command = "printTrieDot ";
260                    }
261                    command += selectedStrings[0];
262                    CommandExecuter.getInstance().exec(command);
263                }
[570]264                else {
[1094]265                    MessageBox messageBox = new MessageBox(getShell(), SWT.NONE);
266                    messageBox.setText("Feature Not Available");
267                    messageBox.setMessage("The feature is currently only available for " +
268                                          "stochastic processes. Please select a model that " +
269                                          "is a stochastic process.");
270                    messageBox.open();
[570]271                }
272            }
273        });
274        btnCreateDot.setText("Create DOT");
[1094]275        btnCreateDot.setEnabled(false);
[570]276    }
277
[1094]278    /**
279     *
280     */
[570]281    @Override
282    protected void checkSubclass() {
283        // Disable the check that prevents subclassing of SWT components
284    }
285
[1094]286    /**
287     *
288     */
[570]289    public void updateModelList() {
290        modelList.removeAll();
[1094]291        for (String key : GlobalDataContainer.getInstance().getAllKeys()) {
292            if ((GlobalDataContainer.getInstance().getData(key) instanceof IStochasticProcess) ||
293                (GlobalDataContainer.getInstance().getData(key) instanceof ITaskTree))
294            {
[666]295                modelList.add(key);
296            }
[570]297        }
298    }
299
[526]300}
Note: See TracBrowser for help on using the repository browser.