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.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 ; 17 import java.io.StringReader ; 18 19 import java.util.HashMap ; 20 import java.util.Iterator ; 21 22 import javax.xml.parsers.DocumentBuilderFactory ; 23 24 25 class XMLPropertySetCache extends FilePropertySetCache { 26 28 protected static final Log log = LogFactory.getLog(XMLPropertySetCache.class); 29 30 32 public XMLPropertySetCache(String storeFile, String storeFileType) { 33 super(storeFile, storeFileType); 34 load(); 35 } 36 37 39 public boolean load() { 40 try { 41 propertySets = new HashMap (); 43 44 DocumentBuilderFactory 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 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 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 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 factory = DocumentBuilderFactory.newInstance(); 91 Document document = factory.newDocumentBuilder().newDocument(); 92 Node root = document.createElement("users"); 93 94 for (Iterator i = propertySets.keySet().iterator(); i.hasNext();) { 96 String userKey = i.next().toString(); 97 XMLPropertySet ps = (XMLPropertySet) propertySets.get(userKey); 98 Node userNode = new Node(); 100 root.appendChild(userNode); 101 log.debug(ps.saveToDocument().toString()); 102 } 104 105 OutputFormat format = OutputFormat.createPrettyPrint(); 107 XMLWriter writer = new XMLWriter(new FileWriter (storeFile)); 108 writer.write(document); 109 writer.close(); 110 111 return true; 112 } catch (Exception e) { 113 log.fatal("cannot store in file " + storeFile + ".", e); 114 } 115 116 return false; 117 } 118 } 119 | Popular Tags |