Package com.opensymphony.user.provider.file

Source Code of com.opensymphony.user.provider.file.XMLUsersCache

/*
* 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;
    }
}
TOP

Related Classes of com.opensymphony.user.provider.file.XMLUsersCache

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.