1 package com.atlassian.config.xml;
2
3 import com.atlassian.config.AbstractConfigElement;
4 import com.atlassian.config.ConfigurationException;
5 import org.dom4j.DocumentHelper;
6 import org.dom4j.Element;
7 import org.dom4j.Node;
8
9 public class Dom4jXmlStringConfigElement extends AbstractConfigElement
10 {
11 protected Element context;
12 protected boolean useCData = true;
13
14 public Dom4jXmlStringConfigElement(String name, Element context, AbstractDom4jXmlConfigurationPersister config)
15 {
16 super(name, context, config);
17 this.useCData = ((AbstractDom4jXmlConfigurationPersister) getConfiguration()).isUseCData();
18 }
19
20
21 public Class getObjectClass()
22 {
23 return String.class;
24 }
25
26 public void saveConfig(Object object) throws ConfigurationException
27 {
28 Element element = getOrMakeElement(getPropertyName());
29 if (useCData)
30 {
31 element.addCDATA((String) object);
32 }
33 else
34 {
35 element.setText((String) object);
36 }
37 }
38
39 public Object loadConfig() throws ConfigurationException
40 {
41
42 Node n = context.selectSingleNode(getPropertyName());
43 if (n != null)
44 {
45 return n.getText();
46 }
47 else
48 {
49 return context.getText();
50 }
51 }
52
53 protected Element getOrMakeElement(String path)
54 {
55 Element element = (Element) context.selectSingleNode(getPropertyName());
56 if (element == null)
57 {
58 element = DocumentHelper.makeElement(context, getPropertyName());
59 }
60 else
61 {
62 element.clearContent();
63 }
64 return element;
65 }
66
67 public Object getContext()
68 {
69 return context;
70 }
71
72 public void setContext(Object context)
73 {
74 if (context instanceof Element)
75 {
76 this.context = (Element) context;
77 }
78 else
79 {
80 throw new IllegalArgumentException("Context must be a: " + Element.class.getName());
81 }
82 }
83
84 public boolean isUseCData()
85 {
86 return useCData;
87 }
88 }