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