KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > opensymphony > user > provider > file > XMLPropertySetCache


1 /*
2  * Copyright (c) 2002-2003 by OpenSymphony
3  * All rights reserved.
4  */

5 package com.opensymphony.user.provider.file;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9
10 import org.w3c.dom.*;
11
12 import com.opensymphony.module.propertyset.PropertySet;
13 import com.opensymphony.module.propertyset.PropertySetManager;
14 import com.opensymphony.module.propertyset.xml.XMLPropertySet;
15
16 import java.io.FileWriter JavaDoc;
17 import java.io.StringReader JavaDoc;
18
19 import java.util.HashMap JavaDoc;
20 import java.util.Iterator JavaDoc;
21
22 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
23
24
25 class XMLPropertySetCache extends FilePropertySetCache {
26     //~ Static fields/initializers /////////////////////////////////////////////
27

28     protected static final Log log = LogFactory.getLog(XMLPropertySetCache.class);
29
30     //~ Constructors ///////////////////////////////////////////////////////////
31

32     public XMLPropertySetCache(String JavaDoc storeFile, String JavaDoc storeFileType) {
33         super(storeFile, storeFileType);
34         load();
35     }
36
37     //~ Methods ////////////////////////////////////////////////////////////////
38

39     public boolean load() {
40         try {
41             // clear the groups first
42
propertySets = new HashMap JavaDoc();
43
44             DocumentBuilderFactory JavaDoc factory = DocumentBuilderFactory.newInstance();
45             
46             Document document = factory.newDocumentBuilder().parse(getInputStreamFromStoreFile());
47             NodeList users = document.getDocumentElement().getChildNodes();
48
49             if (log.isDebugEnabled()) {
50                 log.debug("loaded " + storeFile);
51             }
52
53             // read each <user>
54
for (int i = 0; i < users.getLength(); i++) {
55                 Element userElement = (Element) users.item(i);
56
57                 if (userElement.getNodeName().equals("user")) {
58                     if (userElement.getAttribute("id") == null) {
59                         log.warn("attribute 'id' required for <user/> in " + storeFile);
60
61                         continue;
62                     }
63
64                     String JavaDoc userName = userElement.getAttribute("id");
65                     Node propertySetContent = userElement.getFirstChild();
66                     log.debug(propertySetContent.toString());
67                     
68                     XMLPropertySet ps = (XMLPropertySet)PropertySetManager.getInstance("xml", null);
69                     Document d = factory.newDocumentBuilder().newDocument();
70                     d.appendChild(propertySetContent);
71                     ps.loadFromDocument(d);
72                     propertySets.put(userName, ps);
73                     
74                     log.debug("added user credentials " + userName);
75                 } else {
76                     log.warn("expected 'user' element, found " + userElement.getNodeName() + " in " + storeFile);
77                 }
78             }
79
80             return true;
81         } catch (Exception JavaDoc e) {
82             log.fatal("cannot load from file " + storeFile + ".", e);
83         }
84
85         return false;
86     }
87
88     public boolean store() {
89         try {
90             DocumentBuilderFactory JavaDoc factory = DocumentBuilderFactory.newInstance();
91             Document document = factory.newDocumentBuilder().newDocument();
92             Node root = document.createElement("users");
93
94             // a <user id="foo" password="bar"> for each group
95
for (Iterator JavaDoc i = propertySets.keySet().iterator(); i.hasNext();) {
96                 String JavaDoc userKey = i.next().toString();
97                 XMLPropertySet ps = (XMLPropertySet) propertySets.get(userKey);
98                 //Node user = createElement("user").addAttribute("id", userKey);
99
Node userNode = new Node();
100                 root.appendChild(userNode);
101                 log.debug(ps.saveToDocument().toString());
102                 //userElement.add(ps.saveToDocument().toString());
103
}
104
105             // print it nicely
106
OutputFormat format = OutputFormat.createPrettyPrint();
107             XMLWriter writer = new XMLWriter(new FileWriter JavaDoc(storeFile));
108             writer.write(document);
109             writer.close();
110
111             return true;
112         } catch (Exception JavaDoc e) {
113             log.fatal("cannot store in file " + storeFile + ".", e);
114         }
115
116         return false;
117     }
118 }
119
Popular Tags