1 24 package org.riotfamily.components.editor; 25 26 import java.util.HashMap ; 27 import java.util.Iterator ; 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 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 .class); 59 } 60 61 public void configure() { 62 componentRepository.resetPropertyProcessors(); 63 super.configure(); 64 } 65 66 public void registerFormFactory(String id, FormFactory formFactory) { 67 String [] s = id.split("#"); 68 String type = s[0]; 69 String 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 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 .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 .class, true))); 99 } 100 if (imageUpload.getHeightProperty() != null) { 101 component.addPropertyProcessor( 102 new PropertyEditorProcessor( 103 imageUpload.getHeightProperty(), 104 new CustomNumberEditor(Integer .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 .class, true))); 114 } 115 if (flashUpload.getHeightProperty() != null) { 116 component.addPropertyProcessor( 117 new PropertyEditorProcessor( 118 flashUpload.getHeightProperty(), 119 new CustomNumberEditor(Integer .class, true))); 120 } 121 if (flashUpload.getVersionProperty() != null) { 122 component.addPropertyProcessor( 123 new PropertyEditorProcessor( 124 flashUpload.getVersionProperty(), 125 new CustomNumberEditor(Integer .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 numberClass = nf.getEditorBinding().getPropertyType(); 140 if (!(Number .class.isAssignableFrom(numberClass))) { 141 numberClass = Integer .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 |