/* * Portions Copyright 2000-2009 Sun Microsystems, Inc. All Rights * Reserved. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ /* */ package gov.nist.siplite.message; import gov.nist.siplite.header.*; import java.util.Hashtable; /** * A map of which of the standard headers may appear as a list */ class ListMap { /** * A table that indicates whether a header has a list representation or * not (to catch adding of the non-list form when a list exists.) * Entries in this table allow you to look up the list form of a header * (provided it has a list form). */ private static Hashtable headerListTable; /** Static initializer */ static { initializeListMap(); } /** * Builds a table mapping between objects that have a list form * and the class of such objects. */ static private void initializeListMap() { headerListTable = new Hashtable(); headerListTable.put(ExtensionHeader.clazz, new HeaderList().getClass()); headerListTable.put(ParameterLessHeader.clazz, new HeaderList().getClass()); headerListTable.put(ContactHeader.clazz, new ContactList().getClass()); headerListTable.put(ViaHeader.clazz, new ViaList().getClass()); headerListTable.put(WWWAuthenticateHeader.clazz, new WWWAuthenticateList().getClass()); headerListTable.put(RouteHeader.clazz, new RouteList().getClass()); headerListTable.put(ProxyAuthenticateHeader.clazz, new ProxyAuthenticateList().getClass()); headerListTable.put(ProxyAuthorizationHeader.clazz, new HeaderList().getClass()); headerListTable.put(RecordRouteHeader.clazz, new RecordRouteList().getClass()); } /** * Returns true if this has an associated list object. * @param sipHeader the requested header to be checked * @return true if list is present */ static protected boolean hasList(Header sipHeader) { if (sipHeader instanceof HeaderList) return false; else { Class headerClass = sipHeader.getClass(); return headerListTable.get(headerClass) != null; } } /** * Returns true if this has an associated list object. * @param sipHdrClass the class to be checked * @return true if listis present */ static protected boolean hasList(Class sipHdrClass) { return headerListTable.get(sipHdrClass) != null; } /** * Gets the associated list class. * @param sipHdrClass the class to be checked * @return the list class */ static protected Class getListClass(Class sipHdrClass) { return (Class) headerListTable.get(sipHdrClass); } /** * Returns a list object for this header if it has an associated * list object. * @param sipHeader the requested header with associated list * @return list object */ static protected HeaderList getList(Header sipHeader) { try { Class headerClass = sipHeader.getClass(); Class listClass = (Class) headerListTable.get(headerClass); HeaderList shl = (HeaderList) listClass.newInstance(); shl.setHeaderName(sipHeader.getHeaderName()); return shl; } catch (InstantiationException ex) { ex.printStackTrace(); } catch (IllegalAccessException ex) { ex.printStackTrace(); } return null; } }