1 /**
2 * Copyright 2010 The Kuali Foundation Licensed under the
3 * Educational Community License, Version 2.0 (the "License"); you may
4 * not use this file except in compliance with the License. You may
5 * obtain a copy of the License at
6 *
7 * http://www.osedu.org/licenses/ECL-2.0
8 *
9 * Unless required by applicable law or agreed to in writing,
10 * software distributed under the License is distributed on an "AS IS"
11 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12 * or implied. See the License for the specific language governing
13 * permissions and limitations under the License.
14 */
15
16 package org.kuali.student.common.ui.client.configurable.mvc;
17
18 import org.kuali.student.common.assembly.data.LookupParamMetadata;
19 import org.kuali.student.common.assembly.data.Metadata;
20 import org.kuali.student.common.assembly.data.MetadataInterrogator;
21 import org.kuali.student.common.assembly.data.MetadataInterrogator.ConstraintIds;
22 import org.kuali.student.common.ui.client.configurable.mvc.impl.DefaultWidgetFactoryImpl;
23
24 import com.google.gwt.core.client.GWT;
25 import com.google.gwt.user.client.ui.Widget;
26
27 /**
28 * Returns a corresponding auto generated widget based on metadata. Not all fields can have their
29 * widgets reliably generated (or it may be better to not use the default), in these cases pass the
30 * custom widget into FieldDescriptor directly.
31 * <br>
32 * Things within the metadata taken into account:
33 * access = meta.getWriteAccess(); <br>
34 * isMultiLine - uses text area for multiline<br>
35 * isRepeating - if this is true and the metadata has lookupdata generates a picker that can be used to produce a list<br>
36 * isRichText = MetadataInterrogator.hasConstraint(meta, ConstraintIds.RICH_TEXT); <br>
37 * maxLength - affects how long a text field will be<br>
38 * type - affects why kind of widget is generated<br>
39 * lookupMeta - generates a widget that is backed by a search and based on attributes in its lookupMeta<br>
40 * additionalLookups - additional lookups for the generated widget<br>
41 * canEdit <br>
42 * canUnmask <br>
43 * canView <br>
44 *
45 * Note that this class can use gwt deferred binding to have its DefaultWidgetFactory implementation
46 * overridden with a custom one, though the result is high impact for as most fields rely on this class.
47 *
48 * Default widget abstract class - see DefaultWidgetFactoryImpl for implementation.
49 *
50 * @author Kuali Student Team
51 *
52 */
53 public abstract class DefaultWidgetFactory {
54 private static final DefaultWidgetFactory instance = GWT.create(DefaultWidgetFactoryImpl.class);
55 public static DefaultWidgetFactory getInstance() {
56 return instance;
57 }
58
59 /**
60 * Gets the input widget by auto generating based on the metadata within the FieldDescriptor passed in
61 * @param meta
62 * @return
63 */
64 public abstract Widget getWidget(FieldDescriptor field);
65
66 /**
67 * Gets the input widget by auto generating based on the metadata passed in
68 * @param meta
69 * @return
70 */
71 public abstract Widget getWidget(Metadata meta);
72
73 /**
74 * Gets the read only widget by auto generating based on the metadata passed in
75 * @param meta
76 * @return
77 */
78 public abstract Widget getReadOnlyWidget(Metadata meta);
79
80
81 /**
82 * Generates a widget based on the LookupParamMetadata passed in
83 * @param meta
84 * @return
85 */
86 public abstract Widget getWidget(LookupParamMetadata meta);
87
88 }
89