001: package org.osbl.demo.urlaub.gui;
002:
003: import org.osbl.client.wings.form.GenericObjectForm;
004: import org.osbl.client.wings.form.ComponentProvider;
005: import org.osbl.client.wings.form.layouter.*;
006: import org.osbl.client.wings.shell.Client;
007: import org.conform.*;
008: import org.conform.modifier.InlineModifier;
009: import org.osbl.demo.urlaub.model.UrlaubsAntrag;
010: import org.osbl.demo.urlaub.model.Typ;
011:
012: public class UrlaubsAntragForm extends GenericObjectForm {
013: public UrlaubsAntragForm() {
014: setDocumentLook(true);
015: }
016:
017: @Override
018: protected Object getObject(String path) {
019: if (ComponentProvider.ROOT.equals(path))
020: return object;
021:
022: return null;
023: }
024:
025: @Override
026: protected void setObject(String path, Object object) {
027: if (ComponentProvider.ROOT.equals(path))
028: this .object = object;
029: }
030:
031: protected Instruction createLayoutInstruction() {
032: return new Page(new Division(UrlaubsAntrag.class.getName(),
033: new Column(new LabelAndEditor(ComponentProvider.ROOT,
034: "typ"), new LabelAndEditor(
035: ComponentProvider.ROOT, "anlass"),
036: new LabelAndEditor(ComponentProvider.ROOT,
037: "vonDatum"), new LabelAndEditor(
038: ComponentProvider.ROOT, "bisDatum")),
039: new Column(new LabelAndEditors(
040: "businessobject.created",
041: new org.osbl.client.wings.form.layouter.Editor(
042: ComponentProvider.ROOT, "created"),
043: new org.osbl.client.wings.form.layouter.Editor(
044: ComponentProvider.ROOT, "createdBy")),
045: new EmptyLine(), new LabelAndEditor(
046: ComponentProvider.ROOT, "vonZeit"),
047: new LabelAndEditor(ComponentProvider.ROOT,
048: "bisZeit"))), new Division(
049: UrlaubsAntrag.class.getName() + ".genehmigung",
050: new Column(new LabelAndEditor(ComponentProvider.ROOT,
051: "genehmigung"), new LabelAndEditor(
052: ComponentProvider.ROOT, "gebucht"),
053: new LabelAndEditor(ComponentProvider.ROOT,
054: "benachrichtigt"), new LabelAndEditor(
055: ComponentProvider.ROOT, "eingetragen"),
056: new LabelAndEditor(ComponentProvider.ROOT,
057: "storniert")), new Column()));
058: }
059:
060: protected BeanMeta createBeanMeta(String path) {
061: return new VariationBeanMetaProvider(Client.getInstance()
062: .getBeanMetaProvider()).addModifier(
063: new InlineModifier() {
064: protected void configure() {
065: property("typ").setWritable(false);
066: property("typ").setAttribute(
067: PropertyMeta.ATTRIBUTE_CHANGE_LISTENER,
068: new PropertyChangeHandler() {
069: protected void propertyChange(
070: Object oldValue,
071: Object newValue) {
072: Typ typ = (Typ) newValue;
073: if (typ == null)
074: return;
075:
076: PropertyMeta typMeta = property("typ");
077: if (!typMeta.isWritable())
078: return;
079:
080: PropertyMeta anlassMeta = property("anlass");
081: PropertyMeta vonDatumMeta = property("vonDatum");
082: PropertyMeta bisDatumMeta = property("bisDatum");
083: PropertyMeta vonZeitMeta = property("vonZeit");
084: PropertyMeta bisZeitMeta = property("bisZeit");
085:
086: switch (typ) {
087: case JAHRESURLAUB:
088: anlassMeta
089: .setWritable(false);
090: anlassMeta
091: .setMandatory(false);
092: vonDatumMeta
093: .setWritable(true);
094: vonDatumMeta
095: .setMandatory(true);
096: bisDatumMeta
097: .setWritable(true);
098: bisDatumMeta
099: .setMandatory(true);
100: vonZeitMeta
101: .setWritable(false);
102: vonZeitMeta
103: .setMandatory(false);
104: bisZeitMeta
105: .setWritable(false);
106: bisZeitMeta
107: .setMandatory(false);
108: break;
109: case ABWESENHEIT:
110: anlassMeta
111: .setWritable(true);
112: anlassMeta
113: .setMandatory(true);
114: vonDatumMeta
115: .setWritable(true);
116: vonDatumMeta
117: .setMandatory(true);
118: bisDatumMeta
119: .setWritable(false);
120: bisDatumMeta
121: .setMandatory(false);
122: vonZeitMeta
123: .setWritable(true);
124: vonZeitMeta
125: .setMandatory(true);
126: bisZeitMeta
127: .setWritable(true);
128: bisZeitMeta
129: .setMandatory(true);
130: break;
131: case SONDERURLAUB:
132: anlassMeta
133: .setWritable(true);
134: anlassMeta
135: .setMandatory(true);
136: vonDatumMeta
137: .setWritable(true);
138: vonDatumMeta
139: .setMandatory(true);
140: bisDatumMeta
141: .setWritable(true);
142: bisDatumMeta
143: .setMandatory(true);
144: vonZeitMeta
145: .setWritable(false);
146: vonZeitMeta
147: .setMandatory(false);
148: bisZeitMeta
149: .setWritable(false);
150: bisZeitMeta
151: .setMandatory(false);
152: break;
153: }
154:
155: updateLabelAndEditor(
156: ComponentProvider.ROOT,
157: "anlass");
158: updateLabelAndEditor(
159: ComponentProvider.ROOT,
160: "vonDatum");
161: updateLabelAndEditor(
162: ComponentProvider.ROOT,
163: "bisDatum");
164: updateLabelAndEditor(
165: ComponentProvider.ROOT,
166: "vonZeit");
167: updateLabelAndEditor(
168: ComponentProvider.ROOT,
169: "bisZeit");
170:
171: // TODO: BeanData.updateApplicability
172: beanData().revalidateAll();
173: }
174: });
175: bean().addValidator(new BeanValidator() {
176: public Object validate(Object value)
177: throws ValidationException {
178: UrlaubsAntrag urlaubsAntrag = (UrlaubsAntrag) value;
179: if (urlaubsAntrag.getTyp() == Typ.ABWESENHEIT)
180: return value;
181:
182: if (urlaubsAntrag.getVonDatum() != null
183: && urlaubsAntrag.getBisDatum() != null
184: && urlaubsAntrag
185: .getBisDatum()
186: .before(
187: urlaubsAntrag
188: .getVonDatum()))
189: throw new ValidationException(
190: new ValidationException.Message(
191: UrlaubsAntrag.class
192: .getName()
193: + ".validation.dateRange"));
194:
195: return value;
196: }
197:
198: public String[] getAffectedPropertyNames() {
199: return new String[] { "bisDatum",
200: "vonDatum" };
201: }
202: });
203: bean().addValidator(new BeanValidator() {
204: public Object validate(Object value)
205: throws ValidationException {
206: UrlaubsAntrag urlaubsAntrag = (UrlaubsAntrag) value;
207: if (urlaubsAntrag.getTyp() != Typ.ABWESENHEIT)
208: return value;
209:
210: if (urlaubsAntrag.getVonZeit() != null
211: && urlaubsAntrag.getBisZeit() != null
212: && urlaubsAntrag
213: .getBisZeit()
214: .before(
215: urlaubsAntrag
216: .getVonZeit()))
217: throw new ValidationException(
218: new ValidationException.Message(
219: UrlaubsAntrag.class
220: .getName()
221: + ".validation.timeRange"));
222:
223: return value;
224: }
225:
226: public String[] getAffectedPropertyNames() {
227: return new String[] { "bisZeit",
228: "vonZeit" };
229: }
230: });
231: }
232: }).getBeanMeta(UrlaubsAntrag.class);
233: }
234: }
|