KickJava   Java API By Example, From Geeks To Geeks.

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


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.dom4j.Document;
11 import org.dom4j.DocumentHelper;
12 import org.dom4j.Element;
13
14 import org.dom4j.io.OutputFormat;
15 import org.dom4j.io.SAXReader;
16 import org.dom4j.io.XMLWriter;
17
18 import java.io.FileWriter JavaDoc;
19
20 import java.util.HashMap JavaDoc;
21 import java.util.Iterator JavaDoc;
22
23
24 class XMLUsersCache extends FileUsersCache {
25     //~ Static fields/initializers /////////////////////////////////////////////
26

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

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

38     public boolean load() {
39         try {
40             // clear the groups first
41
users = new HashMap JavaDoc();
42
43             SAXReader reader = new SAXReader();
44             Document document = reader.read(getInputStreamFromStoreFile());
45             Element root = document.getRootElement();
46
47             if (log.isDebugEnabled()) {
48                 log.debug("loaded " + storeFile);
49             }
50
51             // read each <user>
52
for (Iterator JavaDoc i = root.elementIterator(); i.hasNext();) {
53                 Element groupElement = (Element) i.next();
54
55                 if (groupElement.getName().equals("user")) {
56                     if (groupElement.attribute("id") == null) {
57                         log.warn("attribute 'id' required for <user/> in " + storeFile);
58
59                         continue;
60                     }
61
62                     String JavaDoc userName = groupElement.attribute("id").getValue();
63                     String JavaDoc userPassword = null;
64
65                     if (groupElement.attribute("password") != null) {
66                         userPassword = groupElement.attribute("password").getValue();
67                     }
68
69                     FileUser user = new FileUser();
70                     user.name = userName;
71                     user.password = userPassword;
72
73                     users.put(userName, user);
74                     log.debug("added user credentials " + userName);
75                 } else {
76                     log.warn("expected 'user' element, found " + groupElement.getName() + " 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             Document document = DocumentHelper.createDocument();
91             Element root = document.addElement("users");
92
93             // a <user id="foo" password="bar"> for each group
94
for (Iterator JavaDoc i = users.keySet().iterator(); i.hasNext();) {
95                 String JavaDoc userKey = i.next().toString();
96                 FileUser user = (FileUser) users.get(userKey);
97                 Element userElement = root.addElement("user").addAttribute("id", user.name).addAttribute("password", user.password);
98             }
99
100             // print it nicely
101
OutputFormat format = OutputFormat.createPrettyPrint();
102             XMLWriter writer = new XMLWriter(new FileWriter JavaDoc(storeFile));
103             writer.write(document);
104             writer.close();
105
106             return true;
107         } catch (Exception JavaDoc e) {
108             log.fatal("cannot store in file " + storeFile + ".", e);
109         }
110
111         return false;
112     }
113 }
114
Popular Tags