1 10 package org.mmbase.bridge.jsp.taglib.edit; 11 12 import javax.servlet.jsp.*; 13 import org.mmbase.bridge.*; 14 import org.mmbase.bridge.jsp.taglib.*; 15 import org.mmbase.bridge.jsp.taglib.util.Attribute; 16 import org.mmbase.util.logging.*; 17 import org.mmbase.util.transformers.*; 18 import org.mmbase.util.Casting; 19 20 28 29 public class SetFieldTag extends FieldTag { private static final Logger log = Logging.getLoggerInstance(SetFieldTag.class); 31 32 protected String convert (String s) throws JspTagException { 33 return s; 34 } 35 36 private String body = null; 37 private Attribute valueId = Attribute.NULL; 38 39 public int doStartTag() throws JspTagException { 40 setFieldVar(name.getString(this)); 41 return EVAL_BODY_BUFFERED; 42 } 43 44 public int doAfterBody() throws JspTagException { 45 if (bodyContent != null) body = bodyContent.getString(); 46 return SKIP_BODY; 47 } 48 public void setValueid(String v) throws JspTagException { 49 valueId = getAttribute(v); 50 } 51 52 private static final ByteToCharTransformer base64 = new Base64(); 53 56 public int doEndTag() throws JspTagException { 57 setFieldVar(); 58 Node node = getNode(); 59 if (field == null) { 60 throw new JspTagException("Cannot set field '" + name.getString(this) + "' for node '" + node + "' (it does not exist?)"); 61 } 62 int type = field.getType(); 63 64 Object value; 65 String refid = valueId.getString(this); 66 if (body != null) { 67 if (! refid.equals("")) throw new JspTagException("Cannot use both body and referid attribute on setfield tag"); 68 value = body; 69 } else if (! refid.equals("")) { 70 value = getObject(refid); 71 } else { 72 value = ""; 73 } 74 75 if ((field != null) && (type == Field.TYPE_BYTE)) { 76 if (value instanceof byte[]) { 78 node.setByteValue(fieldName, (byte[]) value); 79 } else if (value instanceof org.apache.commons.fileupload.FileItem) { 80 node.setByteValue(fieldName, ((org.apache.commons.fileupload.FileItem) value).get()); 81 } else { 82 node.setByteValue(fieldName, base64.transformBack(Casting.toString(value))); 83 } 84 } else { 85 String newValue = convert(Casting.toString(value)); 86 switch(type) { 89 case Field.TYPE_NODE: 90 case Field.TYPE_INTEGER: 91 value = Casting.toInteger(newValue); 92 break; 93 case Field.TYPE_LONG: 94 value = Casting.toInteger(newValue); 95 break; 96 default: value = newValue; 98 } 99 100 101 if (log.isDebugEnabled()) { 102 log.debug("Setting field " + fieldName + " to " + value); 103 } 104 105 node.setValue(fieldName, value); 106 107 if (getId() != null) { 108 getContextProvider().getContextContainer().register(getId(), value); 109 } 110 } 111 112 return EVAL_PAGE; 113 } 114 } 115 | Popular Tags |