/* * Copyright (c) 2004, Nate Nielsen * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * Redistributions in binary form must reproduce the * above copyright notice, this list of conditions and * the following disclaimer in the documentation and/or * other materials provided with the distribution. * * The names of contributors to this software may not be * used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * * CONTRIBUTORS * Nate Nielsen * */ package com.memberwebs.ldapxml; import java.io.IOException; import java.util.Map; import java.util.Set; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; import com.memberwebs.ldapxml.helpers.LXRoot; import com.memberwebs.ldapxml.helpers.LXSAXHandler; /** * The in memory representation of an LX map. * * @author nielsen@memberwebs.com * @version 0.5 */ public class LXMap { /** * Constructs a new LXMap object. */ public LXMap() { m_root = null; m_nameMap = null; m_nameSet = null; } /** * Get the root node of the LX map. * * @return The root. */ protected final LXRoot getRoot() { return m_root; } /** * Load an LX map from an XML data stream * * @param source The source of the XML data. */ public void loadMap(InputSource source) throws LXMapException, IOException { try { XMLReader xr = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); // We require some form of validation on the document // as our internal checks are lax xr.setFeature("http://xml.org/sax/features/validation", true); // Parse and load the map. LXSAXHandler handler = new LXSAXHandler(); xr.setContentHandler(handler); xr.setErrorHandler(handler); xr.parse(source); m_root = handler.getRoot(); m_nameMap = handler.getNameMap(); m_nameSet = handler.getNameSet(); } catch(SAXException e) { Exception inside = e.getException(); if(inside != null) { inside.printStackTrace(); if(inside instanceof LXMapException) throw (LXMapException)inside; else if(inside.getMessage() != null) throw new LXMapException(inside.getMessage()); else throw new LXMapException(inside.getClass().getName()); } throw new LXMapException(e.getMessage()); } } /** * Load an LX map from a uri. * * @param uri The fully qualified uri of the file. */ public void loadMap(String uri) throws LXMapException, IOException { loadMap(new InputSource(uri)); } /** * Get public (XML) to private (LDAP) name mappings * for the first entry. * * @return The name map. */ public final Map getNameMap() { return m_nameMap; } /** * Get the minimum set of LDAP attributes required * to retrieve items via this map. */ protected final Set getNameSet() { return m_nameSet; } public final boolean isLoaded() { return m_root != null; } // The root of the LX map private LXRoot m_root; // Cache of the name map private Map m_nameMap; // Cache of the name set private Set m_nameSet; }