1 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 ; 19 20 import java.util.HashMap ; 21 import java.util.Iterator ; 22 23 24 class XMLGroupsCache extends FileGroupsCache { 25 27 protected static final Log log = LogFactory.getLog(XMLGroupsCache.class); 28 29 31 public XMLGroupsCache(String storeFile, String storeFileType) { 32 super(storeFile, storeFileType); 33 load(); 34 } 35 36 38 public boolean load() { 39 try { 40 groups = new HashMap (); 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 for (Iterator i = root.elementIterator(); i.hasNext();) { 55 Element groupElement = (Element) i.next(); 56 57 if (groupElement.getName().equals("group")) { 58 String groupName = groupElement.attribute("id").getValue(); 59 60 FileGroup group = new FileGroup(); 61 group.name = groupName; 62 63 for (Iterator j = groupElement.elementIterator(); 65 j.hasNext();) { 66 Element userElement = (Element) j.next(); 67 68 if (userElement.getName().equals("user")) { 69 String 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 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 for (Iterator i = groups.keySet().iterator(); i.hasNext();) { 99 String groupKey = i.next().toString(); 100 FileGroup group = (FileGroup) groups.get(groupKey); 101 Element groupElement = root.addElement("group").addAttribute("id", group.name); 102 103 for (Iterator j = group.users.iterator(); j.hasNext();) { 105 groupElement.addElement("user").addAttribute("id", j.next().toString()); 106 } 107 } 108 109 OutputFormat format = OutputFormat.createPrettyPrint(); 111 XMLWriter writer = new XMLWriter(new FileWriter (storeFile)); 112 writer.write(document); 113 writer.close(); 114 115 return true; 116 } catch (Exception e) { 117 log.fatal("cannot store in file " + storeFile + ".", e); 118 } 119 120 return false; 121 } 122 } 123 | Popular Tags |