KickJava   Java API By Example, From Geeks To Geeks.

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


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 XMLGroupsCache extends FileGroupsCache {
25     //~ Static fields/initializers /////////////////////////////////////////////
26

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

31     public XMLGroupsCache(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
groups = new HashMap JavaDoc();
42
43             SAXReader reader = new SAXReader();
44             Document document = null;
45             document = reader.read(getInputStreamFromStoreFile());
46
47             Element root = document.getRootElement();
48
49             if (log.isDebugEnabled()) {
50                 log.debug("loaded " + storeFile);
51             }
52
53             // read each <group>
54
for (Iterator JavaDoc i = root.elementIterator(); i.hasNext();) {
55                 Element groupElement = (Element) i.next();
56
57                 if (groupElement.getName().equals("group")) {
58                     String JavaDoc groupName = groupElement.attribute("id").getValue();
59
60                     FileGroup group = new FileGroup();
61                     group.name = groupName;
62
63                     // read
64
for (Iterator JavaDoc j = groupElement.elementIterator();
65                             j.hasNext();) {
66                         Element userElement = (Element) j.next();
67
68                         if (userElement.getName().equals("user")) {
69                             String JavaDoc userName = userElement.attribute("id").getValue();
70                             group.users.add(userName);
71                             log.debug("added user " + userName + " to group " + groupName);
72                         } else {
73                             log.warn("expected 'user' element, found " + userElement.getName() + " in " + storeFile);
74                         }
75                     }
76
77                     groups.put(groupName, group);
78                     log.debug("added group " + groupName);
79                 } else {
80                     log.warn("expected 'group' element, found " + groupElement.getName() + " in " + storeFile);
81                 }
82             }
83
84             return true;
85         } catch (Exception JavaDoc e) {
86             log.fatal("cannot load from " + storeFile + ".", e);
87         }
88
89         return false;
90     }
91
92     public boolean store() {
93         try {
94             Document document = DocumentHelper.createDocument();
95             Element root = document.addElement("groups");
96
97             // a <group id="foo"> for each group
98
for (Iterator JavaDoc i = groups.keySet().iterator(); i.hasNext();) {
99                 String JavaDoc groupKey = i.next().toString();
100                 FileGroup group = (FileGroup) groups.get(groupKey);
101                 Element groupElement = root.addElement("group").addAttribute("id", group.name);
102
103                 // a <user id="bar"/> for each group's member
104
for (Iterator JavaDoc j = group.users.iterator(); j.hasNext();) {
105                     groupElement.addElement("user").addAttribute("id", j.next().toString());
106                 }
107             }
108
109             // print it nicely
110
OutputFormat format = OutputFormat.createPrettyPrint();
111             XMLWriter writer = new XMLWriter(new FileWriter JavaDoc(storeFile));
112             writer.write(document);
113             writer.close();
114
115             return true;
116         } catch (Exception JavaDoc e) {
117             log.fatal("cannot store in file " + storeFile + ".", e);
118         }
119
120         return false;
121     }
122 }
123
Popular Tags