1 10 11 package org.mmbase.bridge.jsp.taglib.typehandler; 12 13 import javax.servlet.jsp.JspTagException ; 14 15 import org.mmbase.bridge.*; 16 import org.mmbase.bridge.jsp.taglib.FieldInfoTag; 17 import org.mmbase.datatypes.StringDataType; 18 import org.mmbase.datatypes.DataType; 19 import org.mmbase.storage.search.*; 20 import org.mmbase.util.transformers.Xml; 21 import org.mmbase.util.transformers.Sql; 22 import org.mmbase.util.logging.Logger; 23 import org.mmbase.util.logging.Logging; 24 25 34 35 public class StringHandler extends AbstractTypeHandler { 36 37 private static final Logger log = Logging.getLoggerInstance(StringHandler.class); 38 39 42 public StringHandler(FieldInfoTag tag) { 43 super(tag); 44 } 45 46 49 public String htmlInput(Node node, Field field, boolean search) throws JspTagException { 50 eh = getEnumHandler(node, field); 51 if (eh != null) { 52 return eh.htmlInput(node, field, search); 53 } 54 55 if(! search) { 56 StringBuffer buffer = new StringBuffer (); 57 try { 58 Object v = getFieldValue(node, field, true); 59 String value = org.mmbase.util.Casting.toString(v); 60 value = tag.decode(value, node); 61 StringDataType dataType = (StringDataType) field.getDataType(); 62 63 if (dataType.getPattern().matcher("\n").matches()) { 64 if(field.getMaxLength() > 2048) { 65 buffer.append("<textarea class=\"big " + getClasses(field) + "\" rows=\"10\" cols=\"80\" "); 68 } else { 69 buffer.append("<textarea class=\"small " + getClasses(field) + "\" rows=\"5\" cols=\"80\" "); 70 } 71 addExtraAttributes(buffer); 72 buffer.append("name=\"").append(prefix(field.getName())).append("\" "); 73 buffer.append("id=\"").append(prefixID(field.getName())).append("\">"); 74 if ("".equals(value)) { 75 String opt = tag.getOptions(); 76 if (opt != null && opt.indexOf("noempty") > -1) { 77 91 buffer.append(" "); 92 } 93 } else { 94 Xml.XMLEscape(value, buffer); 95 } 96 buffer.append("</textarea>"); 97 } else { buffer.append("<input class=\"small " + getClasses(field) + "\" type=\"").append(dataType.isPassword() ? "password" : "text").append("\" size=\"80\" "); 99 buffer.append("name=\"").append(prefix(field.getName())).append("\" "); 100 buffer.append("id=\"").append(prefixID(field.getName())).append("\" "); 101 String opt = tag.getOptions(); 102 if (opt != null && opt.indexOf("noautocomplete") > -1) { 103 buffer.append("autocomplete=\"off\" "); 104 } 105 addExtraAttributes(buffer); 106 buffer.append("value=\""); 107 Xml.XMLEscape(value, buffer); 108 buffer.append("\" />"); 109 } 110 } catch (ClassCastException cce) { 111 DataType dt = field.getDataType(); 112 log.error("Expected StringDataType for field " + field + " but found " + dt.getClass().getName() + ":"+ dt); 113 throw cce; 114 } 115 return buffer.toString(); 116 } else { return super.htmlInput(node, field, search); 118 } 119 } 120 121 124 public boolean useHtmlInput(Node node, Field field) throws JspTagException { 125 String guiType = field.getGUIType(); 126 127 if (guiType.indexOf('.') > 0) { 128 EnumHandler eh = new EnumHandler(tag, node, field); 129 if (eh.isAvailable()) { 130 return eh.useHtmlInput(node, field); 131 } 132 } 133 String fieldValue = (String ) getFieldValue(field); 134 135 if (fieldValue != null) { 136 String fieldName = field.getName(); 137 if (! fieldValue.equals(node.getValue(fieldName))) { 138 if (fieldValue.equals("") && node.getValue(fieldName) == null) return false; 139 node.setStringValue(fieldName, fieldValue); 140 return true; 141 } 142 } 143 144 return false; 145 } 146 protected Object getFieldValue(Field field) throws JspTagException { 147 String fieldName = field.getName(); 148 String fieldValue = (String ) tag.getContextProvider().getContextContainer().find(tag.getPageContext(), prefix(fieldName)); 149 150 fieldValue = tag.encode(fieldValue, field); 151 if (fieldValue != null) { 152 String opt = tag.getOptions(); 153 if (opt != null && opt.indexOf("trim") > -1) { 154 fieldValue = fieldValue.trim(); 155 } 156 } 157 if (log.isDebugEnabled()) { 158 log.debug("Received '" + fieldValue + "' for " + field + " " + tag.getOptions()); 159 } 160 return fieldValue; 161 } 162 163 protected boolean interpretEmptyAsNull(Field field) { 164 return false; } 166 167 170 public String whereHtmlInput(Field field) throws JspTagException { 171 EnumHandler eh = getEnumHandler(null, field); 172 if (eh != null) { 173 return eh.whereHtmlInput(field); 174 } 175 String search = findString(field); 176 if (search == null) return null; 177 178 Sql sql = new Sql(Sql.ESCAPE_QUOTES); 179 return "( UPPER( [" + field.getName() + "] ) LIKE '%" + sql.transform(search.toUpperCase()) + "%')"; 180 } 182 183 protected int getOperator() { 184 return FieldCompareConstraint.LIKE; 185 } 186 protected String getSearchValue(String string) { 187 return "%" + string.toUpperCase() + "%"; 188 } 189 public Constraint whereHtmlInput(Field field, Query query) throws JspTagException { 190 EnumHandler eh = getEnumHandler(null, field); 191 if (eh != null) { 192 return eh.whereHtmlInput(field, query); 193 } 194 Constraint cons = super.whereHtmlInput(field, query); 195 196 if (cons != null) { 197 if (! (cons instanceof FieldConstraint)) { 198 throw new JspTagException ("Found an instance of " + cons.getClass().getName() + " while expected a field-constraint"); 199 } 200 query.setCaseSensitive((FieldConstraint) cons, false); 201 } 202 203 return cons; 204 } 205 206 } 207 | Popular Tags |