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 XMLUsersCache extends FileUsersCache { 25 27 protected static final Log log = LogFactory.getLog(XMLUsersCache.class); 28 29 31 public XMLUsersCache(String storeFile, String storeFileType) { 32 super(storeFile, storeFileType); 33 load(); 34 } 35 36 38 public boolean load() { 39 try { 40 users = new HashMap (); 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 for (Iterator 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 userName = groupElement.attribute("id").getValue(); 63 String 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 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 for (Iterator i = users.keySet().iterator(); i.hasNext();) { 95 String 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 OutputFormat format = OutputFormat.createPrettyPrint(); 102 XMLWriter writer = new XMLWriter(new FileWriter (storeFile)); 103 writer.write(document); 104 writer.close(); 105 106 return true; 107 } catch (Exception e) { 108 log.fatal("cannot store in file " + storeFile + ".", e); 109 } 110 111 return false; 112 } 113 } 114 | Popular Tags |