/*
* Copyright (c) 2002-2003 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.user.provider.file;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileWriter;
import java.util.HashMap;
import java.util.Iterator;
class XMLUsersCache extends FileUsersCache {
//~ Static fields/initializers /////////////////////////////////////////////
protected static final Log log = LogFactory.getLog(XMLUsersCache.class);
//~ Constructors ///////////////////////////////////////////////////////////
public XMLUsersCache(String storeFile, String storeFileType) {
super(storeFile, storeFileType);
load();
}
//~ Methods ////////////////////////////////////////////////////////////////
public boolean load() {
try {
// clear the groups first
users = new HashMap();
SAXReader reader = new SAXReader();
Document document = reader.read(getInputStreamFromStoreFile());
Element root = document.getRootElement();
if (log.isDebugEnabled()) {
log.debug("loaded " + storeFile);
}
// read each <user>
for (Iterator i = root.elementIterator(); i.hasNext();) {
Element groupElement = (Element) i.next();
if (groupElement.getName().equals("user")) {
if (groupElement.attribute("id") == null) {
log.warn("attribute 'id' required for <user/> in " + storeFile);
continue;
}
String userName = groupElement.attribute("id").getValue();
String userPassword = null;
if (groupElement.attribute("password") != null) {
userPassword = groupElement.attribute("password").getValue();
}
FileUser user = new FileUser();
user.name = userName;
user.password = userPassword;
users.put(userName, user);
log.debug("added user credentials " + userName);
} else {
log.warn("expected 'user' element, found " + groupElement.getName() + " in " + storeFile);
}
}
return true;
} catch (Exception e) {
log.fatal("cannot load from file " + storeFile + ".", e);
}
return false;
}
public boolean store() {
try {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("users");
// a <user id="foo" password="bar"> for each group
for (Iterator i = users.keySet().iterator(); i.hasNext();) {
String userKey = i.next().toString();
FileUser user = (FileUser) users.get(userKey);
Element userElement = root.addElement("user").addAttribute("id", user.name).addAttribute("password", user.password);
}
// print it nicely
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(storeFile));
writer.write(document);
writer.close();
return true;
} catch (Exception e) {
log.fatal("cannot store in file " + storeFile + ".", e);
}
return false;
}
}