Package com.opensymphony.user.provider.file

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

/*
* 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 XMLGroupsCache extends FileGroupsCache {
    //~ Static fields/initializers /////////////////////////////////////////////

    protected static final Log log = LogFactory.getLog(XMLGroupsCache.class);

    //~ Constructors ///////////////////////////////////////////////////////////

    public XMLGroupsCache(String storeFile, String storeFileType) {
        super(storeFile, storeFileType);
        load();
    }

    //~ Methods ////////////////////////////////////////////////////////////////

    public boolean load() {
        try {
            // clear the groups first
            groups = new HashMap();

            SAXReader reader = new SAXReader();
            Document document = null;
            document = reader.read(getInputStreamFromStoreFile());

            Element root = document.getRootElement();

            if (log.isDebugEnabled()) {
                log.debug("loaded " + storeFile);
            }

            // read each <group>
            for (Iterator i = root.elementIterator(); i.hasNext();) {
                Element groupElement = (Element) i.next();

                if (groupElement.getName().equals("group")) {
                    String groupName = groupElement.attribute("id").getValue();

                    FileGroup group = new FileGroup();
                    group.name = groupName;

                    // read
                    for (Iterator j = groupElement.elementIterator();
                            j.hasNext();) {
                        Element userElement = (Element) j.next();

                        if (userElement.getName().equals("user")) {
                            String userName = userElement.attribute("id").getValue();
                            group.users.add(userName);
                            log.debug("added user " + userName + " to group " + groupName);
                        } else {
                            log.warn("expected 'user' element, found " + userElement.getName() + " in " + storeFile);
                        }
                    }

                    groups.put(groupName, group);
                    log.debug("added group " + groupName);
                } else {
                    log.warn("expected 'group' element, found " + groupElement.getName() + " in " + storeFile);
                }
            }

            return true;
        } catch (Exception e) {
            log.fatal("cannot load from " + storeFile + ".", e);
        }

        return false;
    }

    public boolean store() {
        try {
            Document document = DocumentHelper.createDocument();
            Element root = document.addElement("groups");

            // a <group id="foo"> for each group
            for (Iterator i = groups.keySet().iterator(); i.hasNext();) {
                String groupKey = i.next().toString();
                FileGroup group = (FileGroup) groups.get(groupKey);
                Element groupElement = root.addElement("group").addAttribute("id", group.name);

                // a <user id="bar"/> for each group's member
                for (Iterator j = group.users.iterator(); j.hasNext();) {
                    groupElement.addElement("user").addAttribute("id", j.next().toString());
                }
            }

            // 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.XMLGroupsCache

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.