1 10 package org.mmbase.datatypes.processors.xml; 11 import org.mmbase.datatypes.processors.Processor; 12 import org.mmbase.bridge.*; 13 import org.mmbase.util.*; 14 import javax.xml.transform.dom.DOMSource ; 15 import javax.xml.transform.stream.StreamResult ; 16 import org.w3c.dom.Document ; 17 import org.mmbase.util.logging.*; 18 19 20 26 27 public class FieldGetString implements Processor { 28 private static final Logger log = Logging.getLoggerInstance(FieldGetString.class); 29 private static final long serialVersionUID = 1L; 30 31 public Object process(Node node, Field field, Object value) { 32 33 Object realValue = node.getObjectValue(field.getName()); 34 if (realValue == null || value == null) return ""; 35 36 37 if (! (realValue instanceof Document )) { 38 throw new RuntimeException ("FieldGetString should only be defined for XML fields. " + node.getNumber() + "/" + field.getName() + " returned a " + realValue.getClass() + "'" + realValue + "'"); 39 } 40 Document document = (Document ) realValue; 41 42 43 if (value instanceof Document ) { 44 return document; 46 } else { 47 try { 49 switch(Modes.getMode("" + node.getCloud().getProperty(Cloud.PROP_XMLMODE))) { 50 case Modes.WIKI: 51 case Modes.KUPU: 52 case Modes.FLAT: { 53 String string; 55 try { 56 java.net.URL u = ResourceLoader.getConfigurationRoot().getResource("xslt/text.xslt"); 57 java.io.StringWriter res = new java.io.StringWriter (); 58 XSLTransformer.transform(new DOMSource ((Document ) realValue), u, new StreamResult (res), null); 59 string = res.toString(); 60 } catch (Exception e) { 61 log.warn(e); 62 string = e.getMessage(); 63 } 64 return Casting.toType(value.getClass(), node.getCloud(), string); 65 } 66 default: { 67 return value; 68 } 69 70 } 71 } catch (Exception e) { 72 log.error(e.getMessage(), e); 73 return value; 74 } 75 } 76 } 77 } 78 | Popular Tags |