source: trunk/quest-ui-swt/src/main/java/de/ugoe/cs/quest/ui/swt/TrainModelDialog.java @ 570

Last change on this file since 570 was 570, checked in by sherbold, 12 years ago
  • adapted to quest coding style
  • Property svn:mime-type set to text/plain
File size: 9.9 KB
Line 
1
2package de.ugoe.cs.quest.ui.swt;
3
4import java.util.Arrays;
5
6import org.eclipse.swt.widgets.Dialog;
7import org.eclipse.swt.widgets.Display;
8import org.eclipse.swt.widgets.MessageBox;
9import org.eclipse.swt.widgets.Shell;
10import org.eclipse.swt.widgets.Button;
11import org.eclipse.swt.SWT;
12import org.eclipse.swt.widgets.Group;
13import org.eclipse.swt.widgets.Label;
14import org.eclipse.swt.widgets.Text;
15import org.eclipse.swt.widgets.Spinner;
16import org.eclipse.swt.layout.GridLayout;
17import org.eclipse.swt.layout.GridData;
18import org.eclipse.swt.events.SelectionAdapter;
19import org.eclipse.swt.events.SelectionEvent;
20
21import de.ugoe.cs.util.console.CommandExecuter;
22
23public class TrainModelDialog extends Dialog {
24
25    protected Shell shlTrainUsageModel;
26
27    private Button btnFirstorderMarkovModel;
28    private Button btnHighorderMarkovModel;
29    private Button btnPredictionByPartial;
30    private Button btnDeterministicFiniteAutomaton;
31
32    private Spinner minOrderSpinner;
33    private Spinner maxOrderSpinner;
34    private Text modelnameText;
35
36    private String[] sequenceNames;
37    private Text probEscapeText;
38    private Label lblEscapeProbability;
39
40    /**
41     * Create the dialog.
42     *
43     * @param parent
44     * @param style
45     */
46    public TrainModelDialog(Shell parent, int style) {
47        super(parent, style);
48        setText("SWT Dialog");
49    }
50
51    /**
52     * Open the dialog.
53     */
54    public void open() {
55        createContents();
56        shlTrainUsageModel.open();
57        shlTrainUsageModel.layout();
58        Display display = getParent().getDisplay();
59        while (!shlTrainUsageModel.isDisposed()) {
60            if (!display.readAndDispatch()) {
61                display.sleep();
62            }
63        }
64    }
65
66    /**
67     * Create contents of the dialog.
68     */
69    private void createContents() {
70        shlTrainUsageModel =
71            new Shell(getParent(), SWT.DIALOG_TRIM | SWT.MIN | SWT.APPLICATION_MODAL);
72        shlTrainUsageModel.setSize(219, 330);
73        shlTrainUsageModel.setText("Train Usage Model");
74        shlTrainUsageModel.setLayout(new GridLayout(2, false));
75
76        Group grpGeneralInformation = new Group(shlTrainUsageModel, SWT.NONE);
77        grpGeneralInformation.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1));
78        grpGeneralInformation.setText("Name");
79        grpGeneralInformation.setLayout(new GridLayout(1, false));
80
81        modelnameText = new Text(grpGeneralInformation, SWT.BORDER);
82        modelnameText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
83
84        Group grpType = new Group(shlTrainUsageModel, SWT.NONE);
85        grpType.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1));
86        grpType.setText("Type");
87        grpType.setLayout(new GridLayout(2, false));
88
89        btnFirstorderMarkovModel = new Button(grpType, SWT.RADIO);
90        btnFirstorderMarkovModel.addSelectionListener(new SelectionAdapter() {
91            @Override
92            public void widgetSelected(SelectionEvent e) {
93                minOrderSpinner.setEnabled(false);
94                maxOrderSpinner.setEnabled(false);
95                probEscapeText.setEnabled(false);
96            }
97        });
98        btnFirstorderMarkovModel
99            .setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 2, 1));
100        btnFirstorderMarkovModel.setText("First-Order Markov Model");
101        btnFirstorderMarkovModel.setSelection(true);
102
103        btnHighorderMarkovModel = new Button(grpType, SWT.RADIO);
104        btnHighorderMarkovModel.addSelectionListener(new SelectionAdapter() {
105            @Override
106            public void widgetSelected(SelectionEvent e) {
107                minOrderSpinner.setEnabled(false);
108                maxOrderSpinner.setEnabled(true);
109                probEscapeText.setEnabled(false);
110            }
111        });
112        btnHighorderMarkovModel.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 2, 1));
113        btnHighorderMarkovModel.setText("High-Order Markov Model");
114
115        btnPredictionByPartial = new Button(grpType, SWT.RADIO);
116        btnPredictionByPartial.addSelectionListener(new SelectionAdapter() {
117            @Override
118            public void widgetSelected(SelectionEvent e) {
119                minOrderSpinner.setEnabled(true);
120                maxOrderSpinner.setEnabled(true);
121                probEscapeText.setEnabled(true);
122            }
123        });
124        btnPredictionByPartial.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, true, false, 2, 1));
125        btnPredictionByPartial.setText("Prediction by Partial Match");
126
127        lblEscapeProbability = new Label(grpType, SWT.NONE);
128        lblEscapeProbability.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
129        lblEscapeProbability.setText("Escape Probability:");
130
131        probEscapeText = new Text(grpType, SWT.BORDER);
132        probEscapeText.setText("0.1");
133        probEscapeText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
134        probEscapeText.setEnabled(false);
135
136        btnDeterministicFiniteAutomaton = new Button(grpType, SWT.RADIO);
137        btnDeterministicFiniteAutomaton.addSelectionListener(new SelectionAdapter() {
138            @Override
139            public void widgetSelected(SelectionEvent e) {
140                minOrderSpinner.setEnabled(false);
141                maxOrderSpinner.setEnabled(false);
142                probEscapeText.setEnabled(false);
143            }
144        });
145        btnDeterministicFiniteAutomaton.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false,
146                                                                   false, 2, 1));
147        btnDeterministicFiniteAutomaton.setText("Deterministic Finite Automaton");
148
149        Group grpModelProperties = new Group(shlTrainUsageModel, SWT.NONE);
150        grpModelProperties.setLayout(new GridLayout(4, false));
151        grpModelProperties.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 2, 1));
152        grpModelProperties.setText("Order");
153
154        Label lblMin = new Label(grpModelProperties, SWT.NONE);
155        lblMin.setText("Min.");
156
157        minOrderSpinner = new Spinner(grpModelProperties, SWT.BORDER);
158        minOrderSpinner.setEnabled(false);
159
160        Label lblMax = new Label(grpModelProperties, SWT.NONE);
161        lblMax.setText("Max.");
162
163        maxOrderSpinner = new Spinner(grpModelProperties, SWT.BORDER);
164        maxOrderSpinner.setEnabled(false);
165        maxOrderSpinner.setMinimum(2);
166
167        Button btnTrain = new Button(shlTrainUsageModel, SWT.NONE);
168        btnTrain.addSelectionListener(new SelectionAdapter() {
169            @Override
170            public void widgetSelected(SelectionEvent e) {
171                String command = "";
172                String modelname = modelnameText.getText();
173                if (modelname.equals("")) {
174                    MessageBox messageBox = new MessageBox(shlTrainUsageModel, SWT.ERROR);
175                    messageBox.setText("Error");
176                    messageBox.setMessage("No modelname defined!");
177                    messageBox.open();
178                    return;
179                }
180                if (btnFirstorderMarkovModel.getSelection()) {
181                    command = "trainMarkovModel " + modelname + " " + sequenceNames[0];
182
183                }
184                else if (btnHighorderMarkovModel.getSelection()) {
185                    int modelOrder = maxOrderSpinner.getSelection();
186                    command =
187                        "trainMarkovModel " + modelname + " " + sequenceNames[0] + " " + modelOrder;
188                }
189                else if (btnPredictionByPartial.getSelection()) {
190                    int minOrder = minOrderSpinner.getSelection();
191                    int maxOrder = maxOrderSpinner.getSelection();
192                    if (minOrder > maxOrder) {
193                        MessageBox messageBox = new MessageBox(shlTrainUsageModel, SWT.ERROR);
194                        messageBox.setText("Error");
195                        messageBox
196                            .setMessage("Min. Order must be smaller than or equal to max. order!");
197                        messageBox.open();
198                        return;
199                    }
200                    double probEscape = Double.parseDouble(probEscapeText.getText());
201                    if (probEscape < 0.0 || probEscape > 1.0) {
202                        MessageBox messageBox = new MessageBox(shlTrainUsageModel, SWT.ERROR);
203                        messageBox.setText("Error");
204                        messageBox.setMessage("Escape probability must be in [0,1]!");
205                        messageBox.open();
206                        return;
207                    }
208                    command =
209                        "trainPPM " + modelname + " " + sequenceNames[0] + " " + probEscape + " " +
210                            maxOrder + " " + minOrder;
211                }
212                else if (btnDeterministicFiniteAutomaton.getSelection()) {
213                    command = "trainDFA " + modelname + " " + sequenceNames[0];
214                }
215                CommandExecuter.getInstance().exec(command);
216                for (int i = 1; i < sequenceNames.length; i++) {
217                    command = "updateModel " + sequenceNames[i];
218                    CommandExecuter.getInstance().exec(command);
219                }
220                shlTrainUsageModel.dispose();
221            }
222        });
223        btnTrain.setText("Train!");
224
225        Button btnAbort = new Button(shlTrainUsageModel, SWT.NONE);
226        btnAbort.addSelectionListener(new SelectionAdapter() {
227            @Override
228            public void widgetSelected(SelectionEvent e) {
229                shlTrainUsageModel.dispose();
230            }
231        });
232        btnAbort.setText("Abort");
233
234    }
235
236    public void setSequenceNames(String[] sequenceNames) {
237        this.sequenceNames = Arrays.copyOf(sequenceNames, sequenceNames.length);
238    }
239}
Note: See TracBrowser for help on using the repository browser.