1 10 11 package org.mmbase.bridge.jsp.taglib.typehandler; 12 13 import java.util.*; 14 15 import javax.servlet.jsp.JspTagException ; 16 17 import org.mmbase.bridge.*; 18 import org.mmbase.bridge.jsp.taglib.FieldInfoTag; 19 import org.mmbase.storage.search.Constraint; 20 import org.mmbase.util.Encode; 21 import org.mmbase.util.functions.*; 22 23 25 26 38 39 public class NodeHandler extends AbstractTypeHandler { 40 41 43 47 public NodeHandler(FieldInfoTag tag) { 48 super(tag); 49 } 50 51 protected class IgnoreCaseComparator implements Comparator { 52 public int compare(Object o1, Object o2) { 53 String s1 = (String )o1; 54 String s2 = (String )o2; 55 return s1.toUpperCase().compareTo(s2.toUpperCase()); 56 } 57 } 58 59 private boolean isRelationBuilder(Node n) throws JspTagException { 62 try { 63 NodeManager nm = tag.getCloudVar().getNodeManager(n.getStringValue("name")); 64 return nm.hasField("snumber") && !nm.getName().equals("typerel"); 69 } catch (BridgeException e) { 70 return false; 71 } 72 } 73 74 77 protected boolean useLegacy(Node node, Field field) { 78 return field.getDataType().getEnumerationValues(null, field.getNodeManager().getCloud(), node, field) == null; 79 } 80 81 84 public String htmlInput(Node node, Field field, boolean search) throws JspTagException { 85 86 if(useLegacy(node, field) && 88 tag.getCloudVar().hasNodeManager(field.getGUIType())) { 90 StringBuffer buffer = new StringBuffer (); 91 buffer.append("<select class=\"" + getClasses(field) + "\" name=\"").append( prefix(field.getName()) ).append("\" "); 93 buffer.append("id=\"").append( prefixID(field.getName()) ).append("\" "); 94 addExtraAttributes(buffer); 95 buffer.append(">\n"); 96 String value = "0"; 98 if (node != null) value = node.getStringValue(field.getName()); 99 100 101 Parameters args = new Parameters(org.mmbase.module.core.MMObjectBuilder.GUI_PARAMETERS); 103 args.set("field", ""); 104 args.set("locale", tag.getLocale()); 105 args.set("response", tag.getPageContext().getResponse()); 106 args.set("request", tag.getPageContext().getRequest()); 107 111 NodeIterator nodes = tag.getCloudVar().getNodeManager(field.getGUIType()).getList(null, null, null).nodeIterator(); 112 113 SortedMap sortedGUIs = new TreeMap(new IgnoreCaseComparator()); 114 115 boolean reldefFilter = field.getName().equals("builder") && field.getNodeManager().getName().equals("reldef"); 121 122 while(nodes.hasNext()) { 123 Node n = nodes.nextNode(); 124 if (!reldefFilter || isRelationBuilder(n)) { 126 sortedGUIs.put(n.getFunctionValue("gui", args).toString(), "" + n.getNumber()); 127 } 128 } 129 Iterator i = sortedGUIs.entrySet().iterator(); 130 while(i.hasNext()) { 131 Map.Entry gui = (Map.Entry) i.next(); 132 133 buffer.append(" <option "); 135 if(gui.getValue().equals(value)) { 136 buffer.append("selected=\"selected\" "); 138 } else if (search) { 139 String searchi = (String ) tag.getContextProvider().getContextContainer().find(tag.getPageContext(), prefix(field.getName())); 140 if (gui.getValue().equals(searchi)) { 141 buffer.append(" selected=\"selected\" "); 142 } 143 } 144 buffer.append("value=\"" + gui.getValue() + "\">"); 145 buffer.append(Encode.encode("ESCAPE_XML", (String ) gui.getKey())); 146 buffer.append("</option>\n"); 147 } 148 buffer.append("</select>"); 149 if (search) { 150 buffer.append("<input type=\"checkbox\" name=\""); 151 String name = prefix(field.getName() + "_search"); 152 buffer.append(name); 153 String searchi = (String ) tag.getContextProvider().getContextContainer().find(tag.getPageContext(), name); 154 buffer.append("\" "); 155 buffer.append("id=\"").append(prefixID(field.getName() + "_search")).append("\" "); 156 if (searchi != null) { 157 buffer.append("checked=\"checked\""); 158 } 159 buffer.append(" />\n"); 160 } 161 return buffer.toString(); 162 } 163 return super.htmlInput(node, field, search); 164 } 165 166 169 public String whereHtmlInput(Field field) throws JspTagException { 170 String fieldName = field.getName(); 171 if(useLegacy(null, field) && 172 tag.getCloudVar().hasNodeManager(field.getGUIType())) { 173 String id = prefix(fieldName + "_search"); 174 if ( (String ) tag.getContextProvider().getContextContainer().find(tag.getPageContext(), id) == null) { 175 return null; 176 } 177 } 178 return super.whereHtmlInput(field); 179 } 180 181 public Constraint whereHtmlInput(Field field, Query query) throws JspTagException { 182 String fieldName = field.getName(); 183 if(useLegacy(null, field) && 184 tag.getCloudVar().hasNodeManager(field.getGUIType())) { 185 String id = prefix(fieldName + "_search"); 186 if ( (String ) tag.getContextProvider().getContextContainer().find(tag.getPageContext(), id) == null) { 187 return null; 188 } 189 } 190 return super.whereHtmlInput(field, query); 191 } 192 193 194 } 195 | Popular Tags |