/* * Copyright (c) 2004, Stefan Walter * 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 * Stef Walter * */ 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 stef@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); } } } } } };