diff options
Diffstat (limited to 'src/com/memberwebs/ldapxml/map/LXEntry.java')
-rw-r--r-- | src/com/memberwebs/ldapxml/map/LXEntry.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/com/memberwebs/ldapxml/map/LXEntry.java b/src/com/memberwebs/ldapxml/map/LXEntry.java new file mode 100644 index 0000000..cf1760b --- /dev/null +++ b/src/com/memberwebs/ldapxml/map/LXEntry.java @@ -0,0 +1,130 @@ +/* + * 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 <nielsen@memberwebs.com> + * + */ + +package com.memberwebs.ldapxml.map; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Map; + + + +/** + * Represents an <entry> object in an LX map. + * + * @author nielsen@memberwebs.com + * @version 0.5 + */ +public class LXEntry + extends LXBase +{ + private Map m_xmlMap; + private Map m_nameMap; + + /** + * Constructs a new LXEntry object. + * + * @param parent The parent of this entry in the LX map tree. + */ + LXEntry(LXBase parent) + { + super(parent); + } + + /** + * Gets a class in this entry. + * + * @param name The name of the class. + * @return The class, or null if no such class is present. + */ + public LXClass getClass(String name) + { + LXClass cls = (LXClass)getChild(name); + + if(cls != null && !cls.isUseable()) + cls = null; + + return cls; + } + + /** + * Resolve an XML name to an attribute. + */ + public LXAttribute resolveXMLName(String name) + { + loadNameMaps(); + return (LXAttribute)m_xmlMap.get(name); + } + + public LXAttribute resolveName(String name) + { + loadNameMaps(); + return (LXAttribute)m_nameMap.get(name); + } + + private void loadNameMaps() + { + // Note: This should never be called internally until the map + // is completely built. It relies on the map remaining static + // after this point, as there is no method for syncinc the + // cached map created below. + + if(m_xmlMap == null || m_nameMap == null) + { + m_xmlMap = new Hashtable(); + m_nameMap = new Hashtable(); + + Enumeration e = getChildNames(); + while(e != null && e.hasMoreElements()) + { + LXClass cls = getClass((String)e.nextElement()); + + Enumeration e2 = cls.getChildNames(); + while(e2 != null && e2.hasMoreElements()) + { + LXAttribute attr = cls.getAttribute((String)e2.nextElement()); + if(attr != null) + { + m_xmlMap.put(attr.getXmlName(), attr); + m_nameMap.put(attr.getName(), attr); + } + } + } + } + } +}; |