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

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