KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > riotfamily > components > editor > ComponentFormRepository


1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1
3  * The contents of this file are subject to the Mozilla Public License Version
4  * 1.1 (the "License"); you may not use this file except in compliance with
5  * the License. You may obtain a copy of the License at
6  * http://www.mozilla.org/MPL/
7  *
8  * Software distributed under the License is distributed on an "AS IS" basis,
9  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
10  * for the specific language governing rights and limitations under the
11  * License.
12  *
13  * The Original Code is Riot.
14  *
15  * The Initial Developer of the Original Code is
16  * Neteye GmbH.
17  * Portions created by the Initial Developer are Copyright (C) 2007
18  * the Initial Developer. All Rights Reserved.
19  *
20  * Contributor(s):
21  * Felix Gnass [fgnass at neteye dot de]
22  *
23  * ***** END LICENSE BLOCK ***** */

24 package org.riotfamily.components.editor;
25
26 import java.util.HashMap JavaDoc;
27 import java.util.Iterator JavaDoc;
28
29 import org.riotfamily.common.beans.propertyeditors.BooleanEditor;
30 import org.riotfamily.components.Component;
31 import org.riotfamily.components.ComponentRepository;
32 import org.riotfamily.components.property.FileStoreProperyProcessor;
33 import org.riotfamily.components.property.PropertyEditorProcessor;
34 import org.riotfamily.components.property.XmlPropertyProcessor;
35 import org.riotfamily.forms.Element;
36 import org.riotfamily.forms.Form;
37 import org.riotfamily.forms.element.Checkbox;
38 import org.riotfamily.forms.element.NumberField;
39 import org.riotfamily.forms.element.collection.XmlSequence;
40 import org.riotfamily.forms.element.upload.FileUpload;
41 import org.riotfamily.forms.element.upload.FlashUpload;
42 import org.riotfamily.forms.element.upload.ImageUpload;
43 import org.riotfamily.forms.factory.FormFactory;
44 import org.riotfamily.forms.factory.xml.XmlFormRepository;
45 import org.springframework.beans.propertyeditors.CustomNumberEditor;
46
47 /**
48  * @author Felix Gnass [fgnass at neteye dot de]
49  * @since 6.5
50  */

51 public class ComponentFormRepository extends XmlFormRepository {
52
53     private ComponentRepository componentRepository;
54
55     public ComponentFormRepository(ComponentRepository componentRepository) {
56         this.componentRepository = componentRepository;
57         componentRepository.setFormRepository(this);
58         setDefaultBeanClass(HashMap JavaDoc.class);
59     }
60
61     public void configure() {
62         componentRepository.resetPropertyProcessors();
63         super.configure();
64     }
65
66     public void registerFormFactory(String JavaDoc id, FormFactory formFactory) {
67         String JavaDoc[] s = id.split("#");
68         String JavaDoc type = s[0];
69         String JavaDoc formId = s[s.length - 1];
70         super.registerFormFactory(formId, formFactory);
71         Component component = componentRepository.getComponent(type);
72         setupForm(component, formFactory.createForm());
73     }
74
75     protected void setupForm(Component component, Form form) {
76         Iterator JavaDoc it = form.getRegisteredElements().iterator();
77         while (it.hasNext()) {
78             Element e = (Element) it.next();
79             if (e instanceof FileUpload) {
80                 FileUpload upload = (FileUpload) e;
81                 component.addPropertyProcessor(
82                         new FileStoreProperyProcessor(
83                         upload.getEditorBinding().getProperty(),
84                         upload.getFileStore()));
85
86                 if (upload.getSizeProperty() != null) {
87                     component.addPropertyProcessor(
88                             new PropertyEditorProcessor(
89                             upload.getSizeProperty(),
90                             new CustomNumberEditor(Long JavaDoc.class, true)));
91                 }
92                 if (upload instanceof ImageUpload) {
93                     ImageUpload imageUpload = (ImageUpload) upload;
94                     if (imageUpload.getWidthProperty() != null) {
95                         component.addPropertyProcessor(
96                                 new PropertyEditorProcessor(
97                                 imageUpload.getWidthProperty(),
98                                 new CustomNumberEditor(Integer JavaDoc.class, true)));
99                     }
100                     if (imageUpload.getHeightProperty() != null) {
101                         component.addPropertyProcessor(
102                                 new PropertyEditorProcessor(
103                                 imageUpload.getHeightProperty(),
104                                 new CustomNumberEditor(Integer JavaDoc.class, true)));
105                     }
106                 }
107                 if (upload instanceof FlashUpload) {
108                     FlashUpload flashUpload = (FlashUpload) upload;
109                     if (flashUpload.getWidthProperty() != null) {
110                         component.addPropertyProcessor(
111                                 new PropertyEditorProcessor(
112                                 flashUpload.getWidthProperty(),
113                                 new CustomNumberEditor(Integer JavaDoc.class, true)));
114                     }
115                     if (flashUpload.getHeightProperty() != null) {
116                         component.addPropertyProcessor(
117                                 new PropertyEditorProcessor(
118                                 flashUpload.getHeightProperty(),
119                                 new CustomNumberEditor(Integer JavaDoc.class, true)));
120                     }
121                     if (flashUpload.getVersionProperty() != null) {
122                         component.addPropertyProcessor(
123                                 new PropertyEditorProcessor(
124                                 flashUpload.getVersionProperty(),
125                                 new CustomNumberEditor(Integer JavaDoc.class, true)));
126                     }
127                 }
128             }
129             else if (e instanceof Checkbox) {
130                 Checkbox cb = (Checkbox) e;
131                 component.addPropertyProcessor(
132                         new PropertyEditorProcessor(
133                         cb.getEditorBinding().getProperty(),
134                         new BooleanEditor(),
135                         Boolean.toString(cb.isCheckedByDefault())));
136             }
137             else if (e instanceof NumberField) {
138                 NumberField nf = (NumberField) e;
139                 Class JavaDoc numberClass = nf.getEditorBinding().getPropertyType();
140                 if (!(Number JavaDoc.class.isAssignableFrom(numberClass))) {
141                     numberClass = Integer JavaDoc.class;
142                 }
143                 component.addPropertyProcessor(
144                         new PropertyEditorProcessor(
145                         nf.getEditorBinding().getProperty(),
146                         new CustomNumberEditor(numberClass, false)));
147             }
148             else if (e instanceof XmlSequence) {
149                 XmlSequence xs = (XmlSequence) e;
150                 component.addPropertyProcessor(new XmlPropertyProcessor(
151                         xs.getEditorBinding().getProperty()));
152             }
153         }
154     }
155
156
157 }
158
Popular Tags