KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jimm > datavision > gui > parameter > Inquisitor


1 package jimm.datavision.gui.parameter;
2 import jimm.datavision.Parameter;
3 import jimm.util.I18N;
4 import javax.swing.*;
5
6 /**
7  * An inquisitor knows how to display and control the widgets needed
8  * to ask a user for parameter values. Inquisitors are used in
9  * {@link ParamAskWin}s.
10  *
11  * @author Jim Menard, <a HREF="mailto:jimm@io.com">jimm@io.com</a>
12  */

13 abstract class Inquisitor {
14
15 protected static final int TEXT_FIELD_COLS = 24;
16
17 protected static int instanceCount;
18 protected Parameter parameter;
19 protected JPanel panel;
20 protected String JavaDoc panelName;
21
22 /**
23  * This factory method returns the proper inquisitor for the specified
24  * parameter.
25  *
26  * @param param a parameter
27  */

28 public static Inquisitor create(Parameter param) {
29     if (!param.isLegal(param.getType(), param.getArity())) {
30     // Should not happen
31
String JavaDoc str = I18N.get("Inquisitor.param_cap") + ' ' + param.getName()
32         + ' ' + I18N.get("Inquisitor.illegal");
33     throw new IllegalArgumentException JavaDoc(str);
34     }
35
36     switch (param.getType()) {
37     case Parameter.TYPE_BOOLEAN:
38     return new BoolInq(param);
39     case Parameter.TYPE_STRING:
40     switch (param.getArity()) {
41     case Parameter.ARITY_ONE: return new SingleStringInq(param);
42     case Parameter.ARITY_RANGE: return new RangeStringInq(param);
43     case Parameter.ARITY_LIST_SINGLE:
44         return new ListStringInq(param, false);
45     case Parameter.ARITY_LIST_MULTIPLE:
46         return new ListStringInq(param, true);
47     }
48     break;
49     case Parameter.TYPE_NUMERIC:
50     switch (param.getArity()) {
51     case Parameter.ARITY_ONE: return new SingleNumericInq(param);
52     case Parameter.ARITY_RANGE: return new RangeNumericInq(param);
53     case Parameter.ARITY_LIST_SINGLE:
54         return new ListNumericInq(param, false);
55     case Parameter.ARITY_LIST_MULTIPLE:
56         return new ListNumericInq(param, true);
57     }
58     break;
59     case Parameter.TYPE_DATE:
60     switch (param.getArity()) {
61     case Parameter.ARITY_ONE: return new SingleDateInq(param);
62     case Parameter.ARITY_RANGE: return new RangeDateInq(param);
63     }
64     break;
65     }
66     return null; // Not reached
67
}
68
69 /**
70  * Constructor.
71  *
72  * @param param the parameter we're going to edit
73  */

74 Inquisitor(Parameter param) {
75     parameter = param;
76     panel = new JPanel();
77     panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
78     panelName = "" + instanceCount++;
79 }
80
81 JPanel getPanel() { return panel; }
82
83 String JavaDoc getPanelName() { return panelName; }
84
85 /**
86  * Copy all values from our GUI widgets into the parameter's value(s).
87  */

88 abstract void copyGUIIntoParam();
89
90 /**
91  * Copy all values from parameter's value(s) into our GUI widgets.
92  */

93 abstract void copyParamIntoGUI();
94
95 }
96
Popular Tags