1 16 package org.apache.cocoon.woody.formmodel; 17 18 import java.util.Iterator ; 19 20 import org.w3c.dom.Element ; 21 import org.apache.cocoon.woody.util.DomHelper; 22 import org.apache.cocoon.woody.Constants; 23 import org.apache.cocoon.woody.datatype.Datatype; 24 import org.apache.cocoon.woody.event.ValueChangedListener; 25 26 31 public class MultiValueFieldDefinitionBuilder extends AbstractDatatypeWidgetDefinitionBuilder { 32 public WidgetDefinition buildWidgetDefinition(Element widgetElement) throws Exception { 33 MultiValueFieldDefinition definition = new MultiValueFieldDefinition(); 34 setLocation(widgetElement, definition); 35 setId(widgetElement, definition); 36 setDisplayData(widgetElement, definition); 37 setValidators(widgetElement, definition); 38 39 Element datatypeElement = DomHelper.getChildElement(widgetElement, Constants.WD_NS, "datatype"); 40 if (datatypeElement == null) 41 throw new Exception ("A nested datatype element is required for the widget specified at " + DomHelper.getLocation(widgetElement)); 42 43 Datatype datatype = datatypeManager.createDatatype(datatypeElement, true); 44 definition.setDatatype(datatype); 45 46 boolean hasSelectionList = buildSelectionList(widgetElement, definition); 47 if (!hasSelectionList) 48 throw new Exception ("Error: multivaluefields always require a selectionlist at " + DomHelper.getLocation(widgetElement)); 49 50 boolean required = DomHelper.getAttributeAsBoolean(widgetElement, "required", false); 51 definition.setRequired(required); 52 53 Iterator iter = buildEventListeners(widgetElement, "on-value-changed", ValueChangedListener.class).iterator(); 54 while (iter.hasNext()) { 55 definition.addValueChangedListener((ValueChangedListener)iter.next()); 56 } 57 return definition; 58 } 59 } 60 | Popular Tags |