Révision 2727
tmp/org.txm.rcp/src/main/java/org/txm/rcp/swt/widget/parameters/ParametersDialog.java (revision 2727) | ||
---|---|---|
41 | 41 |
|
42 | 42 |
@SuppressWarnings("rawtypes") |
43 | 43 |
public class ParametersDialog extends Dialog { |
44 |
|
|
44 | 45 |
Object bean; |
46 |
|
|
45 | 47 |
String script; |
48 |
|
|
46 | 49 |
String title; |
47 |
|
|
48 |
List<NamedOptionDef> parameters; |
|
49 |
List<String> fieldNames = new ArrayList<String>(); // store all the declared parameters names |
|
50 |
LinkedHashMap<String, ParameterField> widgets = new LinkedHashMap<String, ParameterField>(); |
|
50 |
|
|
51 |
List<NamedOptionDef> parameters; |
|
52 |
|
|
53 |
List<String> fieldNames = new ArrayList<>(); // store all the declared parameters names |
|
54 |
|
|
55 |
LinkedHashMap<String, ParameterField> widgets = new LinkedHashMap<>(); |
|
56 |
|
|
51 | 57 |
protected boolean error = false; |
58 |
|
|
52 | 59 |
protected Map args; // store values given by another Macro, if contains all the needed values, no dialog is shown |
60 |
|
|
53 | 61 |
protected int numberOfParameters; // number of parameters to show in the dialog box (not set by 'args'), if 0 parameters no dialog is shown |
62 |
|
|
54 | 63 |
protected boolean mustShowDialog; // show dialog if args.size == 0 OR if there is at least one mandatory field to set |
55 |
|
|
56 |
HashMap<String, Object> values = new HashMap<String, Object>(); // store the values of the parameters (may not contains all the values needed |
|
64 |
|
|
65 |
HashMap<String, Object> values = new HashMap<>(); // store the values of the parameters (may not contains all the values needed |
|
66 |
|
|
57 | 67 |
Properties defaultValues; // default values set by the .properties file |
68 |
|
|
58 | 69 |
Properties defaultScriptValues = new Properties(); // default values set by the Groovy script @Field@def annotation attribute |
59 |
|
|
70 |
|
|
60 | 71 |
File propFile; |
61 |
// private int titleWidth;
|
|
62 |
// private Composite parent;
|
|
63 |
|
|
72 |
// private int titleWidth;
|
|
73 |
// private Composite parent;
|
|
74 |
|
|
64 | 75 |
/** |
65 | 76 |
* |
66 | 77 |
* @param parentShell |
... | ... | |
72 | 83 |
super(parentShell); |
73 | 84 |
if (bean != null) |
74 | 85 |
this.script = bean.getClass().getName(); |
75 |
this.parameters = new ArrayList<NamedOptionDef>();
|
|
86 |
this.parameters = new ArrayList<>(); |
|
76 | 87 |
this.bean = bean; |
77 | 88 |
this.args = args; |
78 | 89 |
setShellStyle(getShellStyle() | SWT.RESIZE); |
79 |
|
|
90 |
|
|
80 | 91 |
// count the number of fields to show. If "0" then don't show the dialog, see the "open()" function |
81 | 92 |
// and select only the NamedOptionDef annotations |
82 | 93 |
numberOfParameters = 0; // number of parameters not set by args |
83 | 94 |
int numberOfMandatoryFields = 0; |
84 | 95 |
for (OptionHandler arg : allParameters) { |
85 | 96 |
if (arg.option instanceof NamedOptionDef) { |
86 |
NamedOptionDef option = (NamedOptionDef)arg.option; |
|
97 |
NamedOptionDef option = (NamedOptionDef) arg.option;
|
|
87 | 98 |
this.parameters.add(option); |
88 | 99 |
fieldNames.add(option.name()); |
89 | 100 |
if (args.containsKey(option.name())) { |
90 | 101 |
continue; // don't show the field |
91 | 102 |
} |
92 | 103 |
|
93 |
//count number of mandatory fields set AND add exception for "Separator" widget types |
|
104 |
// count number of mandatory fields set AND add exception for "Separator" widget types
|
|
94 | 105 |
if (option.required() || "Separator".equals(option.widget())) numberOfMandatoryFields++; |
95 | 106 |
numberOfParameters++; |
96 | 107 |
} |
97 | 108 |
} |
98 |
|
|
109 |
|
|
99 | 110 |
mustShowDialog = numberOfMandatoryFields > 0 || (args.size() == 0 && numberOfParameters > 0); |
100 |
|
|
111 |
|
|
101 | 112 |
// initialize the properties file default values store |
102 | 113 |
defaultValues = new Properties(); |
103 |
String scriptRootDir = Toolbox.getTxmHomePath() + "/scripts"; //$NON-NLS-1$ |
|
104 |
File currentRootDir = new File(scriptRootDir, "macro"); //$NON-NLS-1$ |
|
105 |
|
|
106 |
propFile = new File(currentRootDir, this.script.replace(".", "/")+".properties"); |
|
107 |
|
|
114 |
String scriptRootDir = Toolbox.getTxmHomePath() + "/scripts/groovy/user"; //$NON-NLS-1$ |
|
115 |
|
|
116 |
propFile = new File(scriptRootDir, this.script.replace(".", "/") + ".properties"); |
|
117 |
|
|
108 | 118 |
loadDefaultValuesFromPropFile(); |
109 |
|
|
110 | 119 |
|
120 |
|
|
111 | 121 |
} |
112 |
|
|
113 |
|
|
122 |
|
|
123 |
|
|
114 | 124 |
private void loadDefaultValuesFromPropFile() { |
115 | 125 |
if (propFile.exists()) { |
116 | 126 |
try { |
117 | 127 |
defaultValues.load(new FileReader(propFile)); |
118 |
Log.info("Retrieving previous macro parameters from "+propFile+" values="+defaultValues.entrySet() + "..."); |
|
119 |
} catch (Exception e) { |
|
120 |
Log.severe("Failed to load previous values from "+propFile+": "+e); |
|
128 |
Log.info("Retrieving previous macro parameters from " + propFile + " values=" + defaultValues.entrySet() + "..."); |
|
129 |
} |
|
130 |
catch (Exception e) { |
|
131 |
Log.severe("Failed to load previous values from " + propFile + ": " + e); |
|
121 | 132 |
Log.printStackTrace(e); |
122 | 133 |
} |
123 | 134 |
} |
124 | 135 |
|
125 |
//initialize the script default values |
|
126 |
for (NamedOptionDef option : this.parameters) { |
|
127 |
String widgetName = option.widget(); |
|
128 |
String stringValue = option.def(); |
|
129 |
Object value = null; |
|
130 |
if ("File".equals(widgetName) || "FileOpen".equals(widgetName)) { //$NON-NLS-1$ |
|
131 |
value = new File(stringValue); |
|
132 |
} else if ("CreateFile".equals(widgetName) || "FileSave".equals(widgetName)) { //$NON-NLS-1$ |
|
133 |
value = new File(stringValue); |
|
134 |
} else if ("Folder".equals(widgetName)) { //$NON-NLS-1$ |
|
135 |
value = new File(stringValue); |
|
136 |
} else if ("Query".equals(widgetName)) { //$NON-NLS-1$ |
|
137 |
value = new CQLQuery(stringValue); |
|
138 |
} else if ("Date".equals(widgetName)) { //$NON-NLS-1$ |
|
139 |
try { |
|
140 |
value = DateField.formater.parse(stringValue); |
|
141 |
} catch (ParseException e) { |
|
142 |
Log.severe("Wrong default date format: "+stringValue+". Waiting for: "+DateField.STRINGFORMAT+". Error = "+e + "."); |
|
143 |
value = new Date(); |
|
144 |
} |
|
145 |
} else if ("Time".equals(widgetName)) { //$NON-NLS-1$ |
|
146 |
value = Integer.parseInt(stringValue); |
|
147 |
} else if ("String".equals(widgetName)) { //$NON-NLS-1$ |
|
148 |
value = stringValue; |
|
149 |
} else if ("Separator".equals(widgetName)) { //$NON-NLS-1$ |
|
150 |
value = stringValue; |
|
151 |
} else if ("Password".equals(widgetName)) { //$NON-NLS-1$ |
|
152 |
value = stringValue; |
|
153 |
} else if ("StringArray".equals(widgetName)) { //$NON-NLS-1$ |
|
154 |
value = stringValue; |
|
155 |
} else if ("StringArrayMultiple".equals(widgetName)) { //$NON-NLS-1$ |
|
156 |
value = stringValue; |
|
157 |
} else if ("StructuralUnits".equals(widgetName)) { //$NON-NLS-1$ |
|
158 |
value = stringValue; |
|
159 |
} else if ("Text".equals(widgetName)) { //$NON-NLS-1$ |
|
160 |
value = stringValue; |
|
161 |
} else if ("Integer".equals(widgetName)) { //$NON-NLS-1$ |
|
162 |
value = Integer.parseInt(stringValue); |
|
163 |
} else if ("Float".equals(widgetName)) { //$NON-NLS-1$ |
|
164 |
value = Float.parseFloat(stringValue); |
|
165 |
} else if ("Boolean".equals(widgetName)) { //$NON-NLS-1$ |
|
166 |
value = Boolean.parseBoolean(stringValue); |
|
167 |
} else { |
|
168 |
System.out.println(TXMUIMessages.unknowedWidgetNameColon+widgetName+TXMUIMessages.FileTreeContentProvider_4); |
|
169 |
} |
|
136 |
// initialize the script default values |
|
137 |
for (NamedOptionDef option : this.parameters) { |
|
138 |
String widgetName = option.widget(); |
|
139 |
String stringValue = option.def(); |
|
140 |
Object value = null; |
|
141 |
if ("File".equals(widgetName) || "FileOpen".equals(widgetName)) { //$NON-NLS-1$ |
|
142 |
value = new File(stringValue); |
|
143 |
} |
|
144 |
else if ("CreateFile".equals(widgetName) || "FileSave".equals(widgetName)) { //$NON-NLS-1$ |
|
145 |
value = new File(stringValue); |
|
146 |
} |
|
147 |
else if ("Folder".equals(widgetName)) { //$NON-NLS-1$ |
|
148 |
value = new File(stringValue); |
|
149 |
} |
|
150 |
else if ("Query".equals(widgetName)) { //$NON-NLS-1$ |
|
151 |
value = new CQLQuery(stringValue); |
|
152 |
} |
|
153 |
else if ("Date".equals(widgetName)) { //$NON-NLS-1$ |
|
154 |
try { |
|
155 |
value = DateField.formater.parse(stringValue); |
|
170 | 156 |
} |
157 |
catch (ParseException e) { |
|
158 |
Log.severe("Wrong default date format: " + stringValue + ". Waiting for: " + DateField.STRINGFORMAT + ". Error = " + e + "."); |
|
159 |
value = new Date(); |
|
160 |
} |
|
161 |
} |
|
162 |
else if ("Time".equals(widgetName)) { //$NON-NLS-1$ |
|
163 |
value = Integer.parseInt(stringValue); |
|
164 |
} |
|
165 |
else if ("String".equals(widgetName)) { //$NON-NLS-1$ |
|
166 |
value = stringValue; |
|
167 |
} |
|
168 |
else if ("Separator".equals(widgetName)) { //$NON-NLS-1$ |
|
169 |
value = stringValue; |
|
170 |
} |
|
171 |
else if ("Password".equals(widgetName)) { //$NON-NLS-1$ |
|
172 |
value = stringValue; |
|
173 |
} |
|
174 |
else if ("StringArray".equals(widgetName)) { //$NON-NLS-1$ |
|
175 |
value = stringValue; |
|
176 |
} |
|
177 |
else if ("StringArrayMultiple".equals(widgetName)) { //$NON-NLS-1$ |
|
178 |
value = stringValue; |
|
179 |
} |
|
180 |
else if ("StructuralUnits".equals(widgetName)) { //$NON-NLS-1$ |
|
181 |
value = stringValue; |
|
182 |
} |
|
183 |
else if ("Text".equals(widgetName)) { //$NON-NLS-1$ |
|
184 |
value = stringValue; |
|
185 |
} |
|
186 |
else if ("Integer".equals(widgetName)) { //$NON-NLS-1$ |
|
187 |
value = Integer.parseInt(stringValue); |
|
188 |
} |
|
189 |
else if ("Float".equals(widgetName)) { //$NON-NLS-1$ |
|
190 |
value = Float.parseFloat(stringValue); |
|
191 |
} |
|
192 |
else if ("Boolean".equals(widgetName)) { //$NON-NLS-1$ |
|
193 |
value = Boolean.parseBoolean(stringValue); |
|
194 |
} |
|
195 |
else { |
|
196 |
System.out.println(TXMUIMessages.unknowedWidgetNameColon + widgetName + TXMUIMessages.FileTreeContentProvider_4); |
|
197 |
} |
|
198 |
} |
|
171 | 199 |
} |
172 |
|
|
173 |
|
|
174 |
/* (non-Javadoc) |
|
200 |
|
|
201 |
|
|
202 |
/* |
|
203 |
* (non-Javadoc) |
|
175 | 204 |
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) |
176 | 205 |
*/ |
177 | 206 |
@Override |
... | ... | |
179 | 208 |
super.configureShell(newShell); |
180 | 209 |
int idx2 = script.lastIndexOf("Macro"); |
181 | 210 |
if (idx2 < 0) idx2 = script.length(); |
182 |
title = TXMUIMessages.bind(TXMUIMessages.p0ParametersInput,script.substring(script.lastIndexOf(".")+1, idx2));
|
|
211 |
title = TXMUIMessages.bind(TXMUIMessages.p0ParametersInput, script.substring(script.lastIndexOf(".") + 1, idx2));
|
|
183 | 212 |
newShell.setText(title); |
184 | 213 |
} |
185 |
|
|
214 |
|
|
215 |
@Override |
|
186 | 216 |
protected void createButtonsForButtonBar(Composite parent) { |
187 |
//create the reset button (hack of the Back button) |
|
188 |
// Button propButton = createButton(parent, IDialogConstants.BACK_ID,
|
|
189 |
// "...", false);
|
|
190 |
// propButton.removeListener(SWT.Selection, propButton.getListeners(SWT.Selection)[0]);
|
|
191 |
// |
|
192 |
// propButton.addSelectionListener(new SelectionAdapter() {
|
|
193 |
// @Override
|
|
194 |
// public void widgetSelected(SelectionEvent e) {
|
|
195 |
// FileDialog dialog = new FileDialog(e.display.getActiveShell());
|
|
196 |
// dialog.setFilterPath(propFile.getParent());
|
|
197 |
// dialog.setFilterExtensions(new String[] {"*.properties"});
|
|
198 |
// dialog.setFileName(propFile.getName());
|
|
199 |
// String path = dialog.open();
|
|
200 |
// if (path != null) {
|
|
201 |
// propFile = new File(path);
|
|
202 |
// loadDefaultValuesFromPropFile();
|
|
203 |
// }
|
|
204 |
// }
|
|
205 |
// });
|
|
217 |
// create the reset button (hack of the Back button)
|
|
218 |
// Button propButton = createButton(parent, IDialogConstants.BACK_ID,
|
|
219 |
// "...", false);
|
|
220 |
// propButton.removeListener(SWT.Selection, propButton.getListeners(SWT.Selection)[0]);
|
|
221 |
//
|
|
222 |
// propButton.addSelectionListener(new SelectionAdapter() {
|
|
223 |
// @Override
|
|
224 |
// public void widgetSelected(SelectionEvent e) {
|
|
225 |
// FileDialog dialog = new FileDialog(e.display.getActiveShell());
|
|
226 |
// dialog.setFilterPath(propFile.getParent());
|
|
227 |
// dialog.setFilterExtensions(new String[] {"*.properties"});
|
|
228 |
// dialog.setFileName(propFile.getName());
|
|
229 |
// String path = dialog.open();
|
|
230 |
// if (path != null) {
|
|
231 |
// propFile = new File(path);
|
|
232 |
// loadDefaultValuesFromPropFile();
|
|
233 |
// }
|
|
234 |
// }
|
|
235 |
// });
|
|
206 | 236 |
|
207 | 237 |
Button button = createButton(parent, IDialogConstants.BACK_ID, |
208 | 238 |
"Reset values", false); |
209 | 239 |
button.removeListener(SWT.Selection, button.getListeners(SWT.Selection)[0]); |
210 |
|
|
240 |
|
|
211 | 241 |
button.addSelectionListener(new SelectionAdapter() { |
242 |
|
|
212 | 243 |
@Override |
213 | 244 |
public void widgetSelected(SelectionEvent e) { |
214 |
//System.out.println("Reseting fields to default values"); |
|
245 |
// System.out.println("Reseting fields to default values");
|
|
215 | 246 |
for (String k : widgets.keySet()) { |
216 | 247 |
widgets.get(k).resetToDefault(); |
217 | 248 |
} |
218 | 249 |
} |
219 | 250 |
}); |
220 | 251 |
if (numberOfParameters == 0) button.setEnabled(false); |
221 |
|
|
252 |
|
|
222 | 253 |
super.createButtonsForButtonBar(parent); |
223 | 254 |
this.getButton(IDialogConstants.OK_ID).setText(TXMUIMessages.run); |
224 | 255 |
} |
225 |
|
|
256 |
|
|
257 |
@Override |
|
226 | 258 |
protected Control createButtonBar(Composite parent) { |
227 | 259 |
Control c = super.createButtonBar(parent); |
228 |
|
|
229 |
// int barWidth = c.getSize().x;
|
|
230 |
// if (barWidth > titleWidth) {
|
|
231 |
// GridData cdata = (GridData)(this.parent.getLayoutData());
|
|
232 |
// cdata.widthHint = barWidth;
|
|
233 |
// }
|
|
234 |
|
|
260 |
|
|
261 |
// int barWidth = c.getSize().x;
|
|
262 |
// if (barWidth > titleWidth) {
|
|
263 |
// GridData cdata = (GridData)(this.parent.getLayoutData());
|
|
264 |
// cdata.widthHint = barWidth;
|
|
265 |
// }
|
|
266 |
|
|
235 | 267 |
return c; |
236 | 268 |
} |
237 |
|
|
238 |
/* (non-Javadoc) |
|
269 |
|
|
270 |
/* |
|
271 |
* (non-Javadoc) |
|
239 | 272 |
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) |
240 | 273 |
*/ |
241 | 274 |
@Override |
242 | 275 |
protected Control createDialogArea(Composite composite) { |
243 |
//this.parent = composite; |
|
276 |
// this.parent = composite;
|
|
244 | 277 |
super.createDialogArea(composite); |
245 |
|
|
278 |
|
|
246 | 279 |
composite.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, true)); |
247 | 280 |
|
248 | 281 |
GridLayout layout = new GridLayout(1, true); |
249 | 282 |
composite.setLayout(layout); |
250 |
|
|
251 |
//TODO: this width initialization does not works : it does not depends on the buttonBar width |
|
252 |
// GridData cdata = (GridData)(composite.getLayoutData());
|
|
253 |
// titleWidth = FitFontSize.calculate(composite, title) + 100;
|
|
254 |
// cdata.widthHint = titleWidth;
|
|
255 |
|
|
283 |
|
|
284 |
// TODO: this width initialization does not works : it does not depends on the buttonBar width
|
|
285 |
// GridData cdata = (GridData)(composite.getLayoutData());
|
|
286 |
// titleWidth = FitFontSize.calculate(composite, title) + 100;
|
|
287 |
// cdata.widthHint = titleWidth;
|
|
288 |
|
|
256 | 289 |
// initialize each widget + default value *of the widget* |
257 | 290 |
for (NamedOptionDef option : parameters) { |
258 |
//if (arg.option instanceof NamedOptionDef) { |
|
259 |
|
|
260 |
//NamedOptionDef option = (NamedOptionDef)arg.option; |
|
261 |
|
|
291 |
// if (arg.option instanceof NamedOptionDef) {
|
|
292 |
|
|
293 |
// NamedOptionDef option = (NamedOptionDef)arg.option;
|
|
294 |
|
|
262 | 295 |
// if the 'args' contains a value filled by another Macro, don't show the widget |
263 | 296 |
if (args.containsKey(option.name())) { |
264 |
//System.out.println("Args contains '"+option.name()+"' with value '"+args.get(option.name())+"'"); |
|
297 |
// System.out.println("Args contains '"+option.name()+"' with value '"+args.get(option.name())+"'");
|
|
265 | 298 |
continue; // don't show the field |
266 | 299 |
} |
267 |
|
|
300 |
|
|
268 | 301 |
// each widget is initialized with de default value set in @Field@def attribute |
269 | 302 |
String widgetName = option.widget(); |
270 | 303 |
ParameterField widget = null; |
271 | 304 |
if ("File".equals(widgetName) || "FileOpen".equals(widgetName)) { //$NON-NLS-1$ |
272 | 305 |
widget = new FileField(composite, SWT.NONE, option); |
273 |
} else if ("CreateFile".equals(widgetName) || "FileSave".equals(widgetName)) { //$NON-NLS-1$ |
|
306 |
} |
|
307 |
else if ("CreateFile".equals(widgetName) || "FileSave".equals(widgetName)) { //$NON-NLS-1$ |
|
274 | 308 |
widget = new CreateFileField(composite, SWT.NONE, option); |
275 |
} else if ("Folder".equals(widgetName)) { //$NON-NLS-1$ |
|
309 |
} |
|
310 |
else if ("Folder".equals(widgetName)) { //$NON-NLS-1$ |
|
276 | 311 |
widget = new FolderField(composite, SWT.NONE, option); |
277 |
} else if ("Query".equals(widgetName)) { //$NON-NLS-1$ |
|
312 |
} |
|
313 |
else if ("Query".equals(widgetName)) { //$NON-NLS-1$ |
|
278 | 314 |
widget = new QueryField(composite, SWT.NONE, option); |
279 |
} else if ("Date".equals(widgetName)) { //$NON-NLS-1$ |
|
315 |
} |
|
316 |
else if ("Date".equals(widgetName)) { //$NON-NLS-1$ |
|
280 | 317 |
widget = new DateField(composite, SWT.NONE, option); |
281 |
} else if ("Time".equals(widgetName)) { //$NON-NLS-1$ |
|
318 |
} |
|
319 |
else if ("Time".equals(widgetName)) { //$NON-NLS-1$ |
|
282 | 320 |
widget = new TimeField(composite, SWT.NONE, option); |
283 |
} else if ("Separator".equals(widgetName)) { //$NON-NLS-1$ |
|
284 |
widget = new SeparatorField(composite, SWT.NONE, option); |
|
285 |
} else if ("String".equals(widgetName)) { //$NON-NLS-1$ |
|
286 |
widget = new StringField(composite, SWT.NONE, option); |
|
287 |
} else if ("Password".equals(widgetName)) { //$NON-NLS-1$ |
|
288 |
widget = new PasswordField(composite, SWT.NONE, option); |
|
289 |
} else if ("StringArray".equals(widgetName)) { //$NON-NLS-1$ |
|
321 |
} |
|
322 |
else if ("Separator".equals(widgetName)) { //$NON-NLS-1$ |
|
323 |
widget = new SeparatorField(composite, SWT.NONE, option); |
|
324 |
} |
|
325 |
else if ("String".equals(widgetName)) { //$NON-NLS-1$ |
|
326 |
widget = new StringField(composite, SWT.NONE, option); |
|
327 |
} |
|
328 |
else if ("Password".equals(widgetName)) { //$NON-NLS-1$ |
|
329 |
widget = new PasswordField(composite, SWT.NONE, option); |
|
330 |
} |
|
331 |
else if ("StringArray".equals(widgetName)) { //$NON-NLS-1$ |
|
290 | 332 |
widget = new StringArrayField(composite, SWT.NONE, option); |
291 |
} else if ("StringArrayMultiple".equals(widgetName)) { //$NON-NLS-1$ |
|
333 |
} |
|
334 |
else if ("StringArrayMultiple".equals(widgetName)) { //$NON-NLS-1$ |
|
292 | 335 |
widget = new StringArrayMultipleField(composite, SWT.NONE, option); |
293 |
} else if ("StructuralUnits".equals(widgetName)) { //$NON-NLS-1$ |
|
336 |
} |
|
337 |
else if ("StructuralUnits".equals(widgetName)) { //$NON-NLS-1$ |
|
294 | 338 |
widget = new CospusStructuresField(composite, SWT.NONE, option); |
295 |
} else if ("Text".equals(widgetName)) { //$NON-NLS-1$ |
|
339 |
} |
|
340 |
else if ("Text".equals(widgetName)) { //$NON-NLS-1$ |
|
296 | 341 |
widget = new LongStringField(composite, SWT.NONE, option); |
297 |
} else if ("Integer".equals(widgetName)) { //$NON-NLS-1$ |
|
342 |
} |
|
343 |
else if ("Integer".equals(widgetName)) { //$NON-NLS-1$ |
|
298 | 344 |
widget = new IntegerField(composite, SWT.NONE, option); |
299 |
} else if ("Float".equals(widgetName)) { //$NON-NLS-1$ |
|
345 |
} |
|
346 |
else if ("Float".equals(widgetName)) { //$NON-NLS-1$ |
|
300 | 347 |
widget = new FloatField(composite, SWT.NONE, option); |
301 |
} else if ("Boolean".equals(widgetName)) { //$NON-NLS-1$ |
|
348 |
} |
|
349 |
else if ("Boolean".equals(widgetName)) { //$NON-NLS-1$ |
|
302 | 350 |
widget = new BooleanField(composite, SWT.NONE, option); |
303 |
} else { |
|
304 |
System.out.println(TXMUIMessages.unknowedWidgetNameColon+widgetName+TXMUIMessages.FileTreeContentProvider_4); |
|
305 | 351 |
} |
306 |
|
|
352 |
else { |
|
353 |
System.out.println(TXMUIMessages.unknowedWidgetNameColon + widgetName + TXMUIMessages.FileTreeContentProvider_4); |
|
354 |
} |
|
355 |
|
|
307 | 356 |
if (widget != null) { |
308 | 357 |
widgets.put(option.name(), widget); |
309 |
|
|
358 |
|
|
310 | 359 |
// set default value in the fields, not enough if args contains the value |
311 | 360 |
String value = defaultValues.getProperty(option.name()); |
312 | 361 |
if (value != null) { // set the default value using the properties stored |
313 | 362 |
widget.setDefault(value); |
314 | 363 |
} |
315 | 364 |
} |
316 |
// }
|
|
365 |
// }
|
|
317 | 366 |
} |
318 | 367 |
new Label(composite, SWT.NONE).setText(TXMUIMessages.mandatoryFields); |
319 |
|
|
368 |
|
|
320 | 369 |
return composite; |
321 | 370 |
} |
322 |
|
|
323 |
/* (non-Javadoc) |
|
371 |
|
|
372 |
/* |
|
373 |
* (non-Javadoc) |
|
324 | 374 |
* @see org.eclipse.jface.dialogs.Dialog#okPressed() |
325 | 375 |
*/ |
326 | 376 |
@Override |
327 | 377 |
protected void okPressed() { |
328 | 378 |
error = false; |
329 |
|
|
379 |
|
|
330 | 380 |
// get widget values |
331 | 381 |
for (String field : widgets.keySet()) { |
332 | 382 |
ParameterField w = widgets.get(field); |
333 | 383 |
Object value = w.getWidgetValue(); |
334 |
|
|
384 |
|
|
335 | 385 |
// is widget set if mandatory EXCEPT "Separator" widgets |
336 | 386 |
if (w.isWidgetMandatory() && value == null && !("Separator".equals(w.getWidgetType()))) { |
337 |
System.out.println(TXMUIMessages.errorColonMissingValueColon+field);
|
|
387 |
System.out.println(TXMUIMessages.errorColonMissingValueColon + field);
|
|
338 | 388 |
error = true; |
339 |
} else if (value != null) { |
|
389 |
} |
|
390 |
else if (value != null) { |
|
340 | 391 |
values.put(field, value); |
341 |
//System.out.println(""+field+"\t"+values.get(field)); |
|
392 |
// System.out.println(""+field+"\t"+values.get(field));
|
|
342 | 393 |
} // else value is not filled |
343 | 394 |
} |
344 |
|
|
345 |
//initialize variables |
|
395 |
|
|
396 |
// initialize variables
|
|
346 | 397 |
if (!error) { |
347 | 398 |
initializeMacroVariables(); |
348 | 399 |
saveParameters(); |
349 |
|
|
400 |
|
|
350 | 401 |
if (!error) { |
351 | 402 |
super.okPressed(); |
352 | 403 |
} |
353 |
}
|
|
404 |
} |
|
354 | 405 |
} |
355 |
|
|
406 |
|
|
356 | 407 |
private void saveParameters() { |
357 | 408 |
if (!error) { |
358 | 409 |
try { |
359 | 410 |
propFile.getParentFile().mkdirs(); |
360 | 411 |
defaultValues.store(new FileWriter(propFile), ""); |
361 |
} catch (IOException e) { |
|
362 |
System.out.println("Warning: failed to store default macro valuesin "+propFile+": "+e); |
|
412 |
} |
|
413 |
catch (IOException e) { |
|
414 |
System.out.println("Warning: failed to store default macro valuesin " + propFile + ": " + e); |
|
363 | 415 |
Log.printStackTrace(e); |
364 | 416 |
} |
365 | 417 |
} |
366 | 418 |
} |
367 |
|
|
368 |
|
|
419 |
|
|
420 |
|
|
369 | 421 |
/** |
370 | 422 |
* can use the args map to initialize variable not set with the dialog box |
371 | 423 |
*/ |
372 | 424 |
private void initializeMacroVariables() { |
373 |
// System.out.println("Initialize macro variables of "+fieldNames);
|
|
425 |
// System.out.println("Initialize macro variables of "+fieldNames);
|
|
374 | 426 |
if (bean == null) return; |
375 | 427 |
|
376 | 428 |
Class c = bean.getClass(); |
377 |
for (String name :fieldNames) { |
|
429 |
for (String name : fieldNames) {
|
|
378 | 430 |
Object value = values.get(name); |
379 |
// if (value == null) { // no widget or not set by user
|
|
380 |
// value = defaultScriptValues.get(name);
|
|
381 |
// }
|
|
382 |
// if (value == null) { // no default set by script
|
|
383 |
// value = defaultValues.get(name);
|
|
384 |
// }
|
|
385 |
//System.out.println("test if args contains name="+name+" "+args.containsKey(name)); |
|
431 |
// if (value == null) { // no widget or not set by user
|
|
432 |
// value = defaultScriptValues.get(name);
|
|
433 |
// }
|
|
434 |
// if (value == null) { // no default set by script
|
|
435 |
// value = defaultValues.get(name);
|
|
436 |
// }
|
|
437 |
// System.out.println("test if args contains name="+name+" "+args.containsKey(name));
|
|
386 | 438 |
if (args.containsKey(name)) { // the 'args' variable may contains values set by another Macro |
387 | 439 |
value = args.get(name); |
388 |
} else { // store the default value only if user set it in the dialog box |
|
440 |
} |
|
441 |
else { // store the default value only if user set it in the dialog box |
|
389 | 442 |
if (value != null) { |
390 | 443 |
defaultValues.setProperty(name, value.toString()); |
391 | 444 |
} |
392 | 445 |
} |
393 |
|
|
446 |
|
|
394 | 447 |
try { |
395 |
//System.out.println("setting "+name+ " with "+values.get(name)); |
|
448 |
// System.out.println("setting "+name+ " with "+values.get(name));
|
|
396 | 449 |
Field field = c.getDeclaredField(name); |
397 | 450 |
field.setAccessible(true); |
398 | 451 |
field.set(bean, value); |
399 |
} catch (Exception e) { |
|
400 |
System.out.println(TXMUIMessages.errorInAtOptionNameDeclarationColon+e.getMessage()); |
|
452 |
} |
|
453 |
catch (Exception e) { |
|
454 |
System.out.println(TXMUIMessages.errorInAtOptionNameDeclarationColon + e.getMessage()); |
|
401 | 455 |
Log.printStackTrace(e); |
402 | 456 |
error = true; |
403 | 457 |
} |
404 |
|
|
458 |
|
|
405 | 459 |
} |
406 | 460 |
} |
407 |
|
|
408 |
|
|
461 |
|
|
462 |
|
|
409 | 463 |
protected boolean isError() { |
410 | 464 |
return error; |
411 | 465 |
} |
412 |
|
|
466 |
|
|
413 | 467 |
public HashMap<String, Object> getValues() { |
414 | 468 |
return values; |
415 | 469 |
} |
416 |
|
|
417 |
static boolean errorOpen,retOpen; |
|
470 |
|
|
471 |
static boolean errorOpen, retOpen; |
|
472 |
|
|
418 | 473 |
/** |
419 | 474 |
* Conveniance method to initialize the parameters dialog. |
420 | 475 |
* Can detect the "args" Groovy binding and use it to set variables |
... | ... | |
427 | 482 |
errorOpen = true; |
428 | 483 |
retOpen = false; |
429 | 484 |
|
430 |
// if (!(bean instanceof groovy.lang.Script)) {
|
|
431 |
// System.out.println(Messages.ParametersDialog_15);
|
|
432 |
// return false;
|
|
433 |
// }
|
|
434 |
|
|
485 |
// if (!(bean instanceof groovy.lang.Script)) {
|
|
486 |
// System.out.println(Messages.ParametersDialog_15);
|
|
487 |
// return false;
|
|
488 |
// }
|
|
489 |
|
|
435 | 490 |
Object oArgs = null; |
436 | 491 |
if (bean instanceof groovy.lang.Script) { |
437 | 492 |
groovy.lang.Script script = (groovy.lang.Script) bean; |
438 |
|
|
493 |
|
|
439 | 494 |
// if the "args" variable exists then use its values. Can be used to set a default value by another Macro |
440 | 495 |
if (script.getBinding().hasVariable("args")) { |
441 | 496 |
oArgs = script.getBinding().getVariable("args"); //$NON-NLS-1$ |
442 | 497 |
} |
443 | 498 |
} |
444 |
|
|
499 |
|
|
445 | 500 |
final Map args; |
446 | 501 |
if (oArgs == null || !(oArgs instanceof Map)) { |
447 | 502 |
args = new HashMap<String, Object>(); |
448 |
} else { |
|
449 |
args = (Map)oArgs; |
|
450 | 503 |
} |
504 |
else { |
|
505 |
args = (Map) oArgs; |
|
506 |
} |
|
451 | 507 |
|
452 | 508 |
if (bean instanceof groovy.lang.Script) { // create the args binding if not already existing |
453 | 509 |
groovy.lang.Script script = (groovy.lang.Script) bean; |
... | ... | |
457 | 513 |
} |
458 | 514 |
|
459 | 515 |
Display.getDefault().syncExec(new Runnable() { |
460 |
public void run() { |
|
516 |
|
|
517 |
@Override |
|
518 |
public void run() { |
|
461 | 519 |
boolean okNames = true; |
462 | 520 |
CmdLineParser parser = new CmdLineParser(bean); |
463 |
|
|
521 |
|
|
464 | 522 |
Display display = Display.getCurrent(); |
465 | 523 |
Shell shell = display.getActiveShell(); |
466 |
|
|
524 |
|
|
467 | 525 |
// check names |
468 | 526 |
Class c = bean.getClass(); |
469 | 527 |
for (OptionHandler opt : parser.getOptions()) { |
470 | 528 |
try { |
471 | 529 |
if (opt.option instanceof NamedOptionDef) { |
472 |
NamedOptionDef option = (NamedOptionDef)opt.option; |
|
530 |
NamedOptionDef option = (NamedOptionDef) opt.option;
|
|
473 | 531 |
c.getDeclaredField(option.name()); |
474 | 532 |
} |
475 |
} catch (NoSuchFieldException e) { |
|
476 |
System.out.println(TXMUIMessages.errorInAtOptionNameDeclarationColon+e.getMessage()); |
|
533 |
} |
|
534 |
catch (NoSuchFieldException e) { |
|
535 |
System.out.println(TXMUIMessages.errorInAtOptionNameDeclarationColon + e.getMessage()); |
|
477 | 536 |
okNames = false; |
478 | 537 |
} |
479 | 538 |
} |
... | ... | |
484 | 543 |
if (dialog.getMustShowDialog()) { |
485 | 544 |
retOpen = dialog.open() == ParametersDialog.OK; |
486 | 545 |
errorOpen = dialog.isError(); |
487 |
} else { // fields initialized by 'args' |
|
546 |
} |
|
547 |
else { // fields initialized by 'args' |
|
488 | 548 |
dialog.initializeMacroVariables(); // with args |
489 | 549 |
if (dialog.getNumberOfFields() > 0) dialog.saveParameters(); |
490 | 550 |
retOpen = true; |
... | ... | |
494 | 554 |
if (bean instanceof groovy.lang.Script) { // reset the timer binding if already existing |
495 | 555 |
groovy.lang.Script script = (groovy.lang.Script) bean; |
496 | 556 |
if (script.getBinding().hasVariable("timer")) { |
497 |
Timer timer = (Timer)script.getBinding().getVariable("timer"); |
|
557 |
Timer timer = (Timer) script.getBinding().getVariable("timer");
|
|
498 | 558 |
timer.reset(); |
499 | 559 |
} |
500 | 560 |
} |
... | ... | |
503 | 563 |
}); |
504 | 564 |
return retOpen && !errorOpen; |
505 | 565 |
} |
506 |
|
|
566 |
|
|
507 | 567 |
public boolean getMustShowDialog() { |
508 | 568 |
return mustShowDialog; |
509 | 569 |
} |
510 |
|
|
570 |
|
|
511 | 571 |
protected int getNumberOfFields() { |
512 | 572 |
return numberOfParameters; |
513 | 573 |
} |
514 |
|
|
515 |
// TODO: uncomment this to enable "args" detection |
|
516 |
// public int open() { |
|
517 |
// System.out.println("Number of parameters: "+numberOfParameters); |
|
518 |
// if (numberOfParameters == 0) { |
|
519 |
// return ParametersDialog.OK; |
|
520 |
// } else { |
|
521 |
// return super.open(); |
|
522 |
// } |
|
523 |
// } |
|
524 |
} |
|
574 |
|
|
575 |
// TODO: uncomment this to enable "args" detection |
|
576 |
// public int open() { |
|
577 |
// System.out.println("Number of parameters: "+numberOfParameters); |
|
578 |
// if (numberOfParameters == 0) { |
|
579 |
// return ParametersDialog.OK; |
|
580 |
// } else { |
|
581 |
// return super.open(); |
|
582 |
// } |
|
583 |
// } |
|
584 |
} |
Formats disponibles : Unified diff