]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/text/DbkTextInterpreter.java
Add JGit to client.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / text / DbkTextInterpreter.java
1 package org.argeo.cms.text;
2
3 import javax.jcr.Item;
4 import javax.jcr.Node;
5 import javax.jcr.Property;
6 import javax.jcr.RepositoryException;
7
8 import org.argeo.cms.CmsException;
9 import org.argeo.jcr.docbook.DocBookNames;
10 import org.argeo.jcr.docbook.DocBookTypes;
11
12 /** Based on HTML with a few Wiki-like shortcuts. */
13 public class DbkTextInterpreter implements TextInterpreter {
14
15 @Override
16 public void write(Item item, String content) {
17 try {
18 if (item instanceof Node) {
19 Node node = (Node) item;
20 if (node.isNodeType(DocBookTypes.PARA)) {
21 String raw = convertToStorage(node, content);
22 validateBeforeStoring(raw);
23 Node jcrText;
24 if (!node.hasNode(DocBookNames.JCR_XMLTEXT))
25 jcrText = node.addNode(DocBookNames.JCR_XMLTEXT, DocBookTypes.XMLTEXT);
26 else
27 jcrText = node.getNode(DocBookNames.JCR_XMLTEXT);
28 jcrText.setProperty(DocBookNames.JCR_XMLCHARACTERS, raw);
29 } else {
30 throw new CmsException("Don't know how to interpret " + node);
31 }
32 } else {// property
33 Property property = (Property) item;
34 property.setValue(content);
35 }
36 // item.getSession().save();
37 } catch (RepositoryException e) {
38 throw new CmsException("Cannot set content on " + item, e);
39 }
40 }
41
42 @Override
43 public String read(Item item) {
44 try {
45 String raw = raw(item);
46 return convertFromStorage(item, raw);
47 } catch (RepositoryException e) {
48 throw new CmsException("Cannot get " + item + " for edit", e);
49 }
50 }
51
52 @Override
53 public String raw(Item item) {
54 try {
55 item.getSession().refresh(true);
56 if (item instanceof Node) {
57 Node node = (Node) item;
58 if (node.isNodeType(DocBookTypes.PARA)) {
59 // WORKAROUND FOR BROKEN PARARAPHS
60 // if (!node.hasProperty(CMS_CONTENT)) {
61 // node.setProperty(CMS_CONTENT, "");
62 // node.getSession().save();
63 // }
64 Node jcrText = node.getNode(DocBookNames.JCR_XMLTEXT);
65 return jcrText.getProperty(DocBookNames.JCR_XMLCHARACTERS).getString();
66 } else {
67 throw new CmsException("Don't know how to interpret " + node);
68 }
69 } else {// property
70 Property property = (Property) item;
71 return property.getString();
72 }
73 } catch (RepositoryException e) {
74 throw new CmsException("Cannot get " + item + " content", e);
75 }
76 }
77
78 // EXTENSIBILITY
79 /**
80 * To be overridden, in order to make sure that only valid strings are being
81 * stored.
82 */
83 protected void validateBeforeStoring(String raw) {
84 }
85
86 /** To be overridden, in order to support additional formatting. */
87 protected String convertToStorage(Item item, String content) throws RepositoryException {
88 return content;
89
90 }
91
92 /** To be overridden, in order to support additional formatting. */
93 protected String convertFromStorage(Item item, String content) throws RepositoryException {
94 return content;
95 }
96 }