KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > richtext > processors > xml > UnPGet


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.richtext.processors.xml;
11 import org.mmbase.datatypes.processors.xml.Modes;
12 import org.mmbase.datatypes.processors.*;
13 import org.mmbase.bridge.*;
14 import org.mmbase.bridge.util.xml.Generator;
15 import org.mmbase.bridge.Node;
16 import org.mmbase.util.logging.*;
17 import org.mmbase.util.*;
18 import org.mmbase.richtext.transformers.XmlField;
19 import org.mmbase.util.xml.XMLWriter;
20 import javax.xml.transform.dom.DOMSource JavaDoc;
21 import javax.xml.transform.stream.StreamResult JavaDoc;
22 import javax.xml.parsers.*;
23
24 import java.util.*;
25 import java.io.*;
26 import org.w3c.dom.*;
27
28
29 /**
30  * If field was previously not 'mmxf' (but for example just a string), then it may be the case that
31  * getXMLValue on that field returns <p>ascii-like text</p>. This processor can be
32  * chained before MmxfGetString to ensure that the field is really Mmxf, even if such 'p' fields are stored.
33  *
34  * @author Michiel Meeuwissen
35  * @version $Id: UnPGet.java,v 1.2 2005/10/25 22:29:17 michiel Exp $
36  * @since MMBase-1.8
37  */

38
39 public class UnPGet implements Processor {
40     private static final Logger log = Logging.getLoggerInstance(UnPGet.class);
41
42     private static final int serialVersionUID = 1;
43
44     public Object JavaDoc process(Node node, Field field, Object JavaDoc value) {
45         // first, unhtml-ize, if starts with "<p>"
46
if (value instanceof String JavaDoc) {
47             String JavaDoc string = (String JavaDoc) value;
48             if (string.startsWith("<p")) {
49                 try {
50                     Document realValue = node.getXMLValue(field.getName());
51                     java.net.URL JavaDoc u = ResourceLoader.getConfigurationRoot().getResource("xslt/text.xslt");
52                     StringWriter res = new StringWriter();
53                     XSLTransformer.transform(new DOMSource JavaDoc((Document) realValue), u, new StreamResult JavaDoc(res), null);
54                     string = res.toString();
55                 } catch (Exception JavaDoc e) {
56                     log.warn(e);
57                     string = e.getMessage();
58                 }
59                 log.debug("Unhtml-lized " + string);
60                 // now, apply wiki format, to make it actual mmxf
61
XmlField trans = new XmlField(XmlField.RICH);
62                 value = trans.transformBack(string);
63                 log.debug("MMXF-lized " + value);
64                 return value;
65             } else {
66                 return value;
67             }
68         } else if (value instanceof Document) {
69             Document xml = (Document) value;
70             if (xml.getDocumentElement().getTagName().equals("p")) {
71                 String JavaDoc string;
72                 try {
73                     java.net.URL JavaDoc u = ResourceLoader.getConfigurationRoot().getResource("xslt/text.xslt");
74                     StringWriter res = new StringWriter();
75                     XSLTransformer.transform(new DOMSource JavaDoc(xml), u, new StreamResult JavaDoc(res), null);
76                     string = res.toString();
77                 } catch (Exception JavaDoc e) {
78                     log.warn(e);
79                     string = e.getMessage();
80                 }
81                 log.debug("Unhtml-lized " + string);
82                 // now, apply wiki format, to make it actual mmxf
83
XmlField trans = new XmlField(XmlField.RICH);
84                 value = trans.transformBack(string);
85                 log.debug("MMXF-lized " + value);
86                 try {
87                     value = MmxfSetString.parse(value);
88                 } catch (Exception JavaDoc e) {
89                     log.warn(e);
90                     return value;
91                 }
92                 return value;
93             } else {
94                 return xml;
95             }
96         } else {
97             return value;
98         }
99         
100     }
101      
102     public String JavaDoc toString() {
103         return "get_unp";
104     }
105   
106 }
107
Popular Tags