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          //"/" + context.getName()+ "/" + getPropertyName()
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  }