1 16 package org.apache.cocoon.forms.datatype; 17 18 import java.lang.reflect.Field ; 19 import java.lang.reflect.Modifier ; 20 import java.util.Locale ; 21 22 import org.apache.cocoon.forms.FormsConstants; 23 import org.apache.cocoon.xml.AttributesImpl; 24 import org.apache.cocoon.xml.XMLUtils; 25 import org.xml.sax.ContentHandler ; 26 import org.xml.sax.SAXException ; 27 28 58 public class EnumSelectionList implements SelectionList { 59 public static final String TEXT_EL = "text"; 60 61 private Datatype datatype; 62 private Class clazz; 63 private boolean nullable; 64 65 69 public EnumSelectionList(String className, Datatype datatype, boolean nullable) throws ClassNotFoundException { 70 this.datatype = datatype; 71 this.nullable = nullable; 72 this.clazz = Class.forName(className); 73 } 74 75 78 public Datatype getDatatype() { 79 return datatype; 80 } 81 82 85 public void generateSaxFragment(ContentHandler contentHandler, 86 Locale locale) 87 throws SAXException { 88 try { 89 contentHandler.startElement(FormsConstants.INSTANCE_NS, SELECTION_LIST_EL, FormsConstants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL, XMLUtils.EMPTY_ATTRIBUTES); 90 Field fields[] = clazz.getDeclaredFields(); 91 if (nullable) { 93 AttributesImpl voidAttrs = new AttributesImpl(); 94 voidAttrs.addCDATAAttribute("value", ""); 95 contentHandler.startElement(FormsConstants.INSTANCE_NS, ITEM_EL, FormsConstants.INSTANCE_PREFIX_COLON + ITEM_EL, voidAttrs); 96 contentHandler.endElement(FormsConstants.INSTANCE_NS, ITEM_EL, FormsConstants.INSTANCE_PREFIX_COLON + ITEM_EL); 97 } 98 for (int i = 0 ; i < fields.length ; ++i) { 99 int mods = fields[i].getModifiers(); 100 if (Modifier.isPublic(mods) && Modifier.isStatic(mods) 101 && Modifier.isFinal(mods) && fields[i].get(null).getClass().equals(clazz)) { 102 String stringValue = clazz.getName() + "." + fields[i].getName(); 103 AttributesImpl itemAttrs = new AttributesImpl(); 105 itemAttrs.addCDATAAttribute("value", stringValue); 106 contentHandler.startElement(FormsConstants.INSTANCE_NS, ITEM_EL, FormsConstants.INSTANCE_PREFIX_COLON + ITEM_EL, itemAttrs); 107 contentHandler.startElement(FormsConstants.INSTANCE_NS, LABEL_EL, FormsConstants.INSTANCE_PREFIX_COLON + LABEL_EL, XMLUtils.EMPTY_ATTRIBUTES); 108 contentHandler.startElement(FormsConstants.I18N_NS, TEXT_EL, FormsConstants.I18N_PREFIX_COLON + TEXT_EL, XMLUtils.EMPTY_ATTRIBUTES); 110 contentHandler.characters(stringValue.toCharArray(), 0, stringValue.length()); 111 contentHandler.endElement(FormsConstants.I18N_NS, TEXT_EL, FormsConstants.I18N_PREFIX_COLON + TEXT_EL); 112 contentHandler.endElement(FormsConstants.INSTANCE_NS, LABEL_EL, FormsConstants.INSTANCE_PREFIX_COLON + LABEL_EL); 113 contentHandler.endElement(FormsConstants.INSTANCE_NS, ITEM_EL, FormsConstants.INSTANCE_PREFIX_COLON + ITEM_EL); 114 } 115 } 116 contentHandler.endElement(FormsConstants.INSTANCE_NS, SELECTION_LIST_EL, FormsConstants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL); 118 } catch (Exception e) { 119 throw new SAXException ("Got exception trying to get enum's values", e); 120 } 121 } 122 } 123 | Popular Tags |