diff options
Diffstat (limited to 'src/com/memberwebs/ldapxml/LXMap.java')
-rw-r--r-- | src/com/memberwebs/ldapxml/LXMap.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/com/memberwebs/ldapxml/LXMap.java b/src/com/memberwebs/ldapxml/LXMap.java new file mode 100644 index 0000000..332ce07 --- /dev/null +++ b/src/com/memberwebs/ldapxml/LXMap.java @@ -0,0 +1,130 @@ +package com.memberwebs.ldapxml; + +import java.io.*; +import java.util.*; + +import org.xml.sax.*; +import org.xml.sax.helpers.*; + +import com.memberwebs.ldapxml.helpers.*; + +/** + * 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; +} + |