1/*
2* Conditions Of Use
3*
4* This software was developed by employees of the National Institute of
5* Standards and Technology (NIST), an agency of the Federal Government.
6* Pursuant to title 15 Untied States Code Section 105, works of NIST
7* employees are not subject to copyright protection in the United States
8* and are considered to be in the public domain.  As a result, a formal
9* license is not needed to use the software.
10*
11* This software is provided by NIST as a service and is expressly
12* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15* AND DATA ACCURACY.  NIST does not warrant or make any representations
16* regarding the use of the software or the results thereof, including but
17* not limited to the correctness, accuracy, reliability or usefulness of
18* the software.
19*
20* Permission to use this software is contingent upon your acceptance
21* of the terms of this agreement
22*
23* .
24*
25*/
26package gov.nist.javax.sip.header;
27import gov.nist.core.*;
28import gov.nist.javax.sip.header.ims.*;
29
30import java.util.Hashtable;
31
32/**
33 * A mapping class that returns the SIPHeader for a given header name.
34 * Add new classes to this map if you are implementing new header types if
35 * you want some of the introspection based methods to work.
36 * @version 1.2 $Revision: 1.11 $ $Date: 2009/07/17 18:57:32 $
37 * @since 1.1
38 */
39public class NameMap implements SIPHeaderNames, PackageNames {
40    static Hashtable nameMap;
41    static {
42        initializeNameMap();
43    }
44
45    protected static void putNameMap(String headerName, String className) {
46        nameMap.put(
47            headerName.toLowerCase(),
48            className);
49    }
50
51    public static Class getClassFromName(String headerName) {
52        String className = (String) nameMap.get(headerName.toLowerCase());
53        if (className == null)
54            return null;
55        else {
56            try {
57                return Class.forName(className);
58            } catch (ClassNotFoundException ex) {
59                return null;
60            }
61        }
62    }
63
64    /** add an extension header to this map.
65    *@param headerName is the extension header name.
66    *@param className is the fully qualified class name that implements
67    * the header (does not have to belong to the nist-sip package).
68    * Use this if you want to use the introspection-based methods.
69    */
70
71    public static void addExtensionHeader(
72        String headerName,
73        String className) {
74        nameMap.put(headerName.toLowerCase(), className);
75    }
76
77    private static void initializeNameMap() {
78        nameMap = new Hashtable();
79        putNameMap(MinExpires.NAME, MinExpires.class.getName()); // 1
80
81        putNameMap(ErrorInfo.NAME, ErrorInfo.class.getName()); // 2
82
83        putNameMap(MimeVersion.NAME, MimeVersion.class.getName()); // 3
84
85        putNameMap(InReplyTo.NAME, InReplyTo.class.getName()); // 4
86
87        putNameMap(Allow.NAME, Allow.class.getName()); // 5
88
89        putNameMap(ContentLanguage.NAME, ContentLanguage.class.getName()); // 6
90
91        putNameMap(CALL_INFO, CallInfo.class.getName()); //7
92
93        putNameMap(CSEQ, CSeq.class.getName()); //8
94
95        putNameMap(ALERT_INFO, AlertInfo.class.getName()); //9
96
97        putNameMap(ACCEPT_ENCODING, AcceptEncoding.class.getName()); //10
98
99        putNameMap(ACCEPT, Accept.class.getName()); //11
100
101        putNameMap(ACCEPT_LANGUAGE, AcceptLanguage.class.getName()); //12
102
103        putNameMap(RECORD_ROUTE, RecordRoute.class.getName()); //13
104
105        putNameMap(TIMESTAMP, TimeStamp.class.getName()); //14
106
107        putNameMap(TO, To.class.getName()); //15
108
109        putNameMap(VIA, Via.class.getName()); //16
110
111        putNameMap(FROM, From.class.getName()); //17
112
113        putNameMap(CALL_ID, CallID.class.getName()); //18
114
115        putNameMap(AUTHORIZATION, Authorization.class.getName()); //19
116
117        putNameMap(PROXY_AUTHENTICATE, ProxyAuthenticate.class.getName()); //20
118
119        putNameMap(SERVER, Server.class.getName()); //21
120
121        putNameMap(UNSUPPORTED, Unsupported.class.getName()); //22
122
123        putNameMap(RETRY_AFTER, RetryAfter.class.getName()); //23
124
125        putNameMap(CONTENT_TYPE, ContentType.class.getName()); //24
126
127        putNameMap(CONTENT_ENCODING, ContentEncoding.class.getName()); //25
128
129        putNameMap(CONTENT_LENGTH, ContentLength.class.getName()); //26
130
131        putNameMap(ROUTE, Route.class.getName()); //27
132
133        putNameMap(CONTACT, Contact.class.getName()); //28
134
135        putNameMap(WWW_AUTHENTICATE, WWWAuthenticate.class.getName()); //29
136
137        putNameMap(MAX_FORWARDS, MaxForwards.class.getName()); //30
138
139        putNameMap(ORGANIZATION, Organization.class.getName()); //31
140
141        putNameMap(PROXY_AUTHORIZATION, ProxyAuthorization.class.getName()); //32
142
143        putNameMap(PROXY_REQUIRE, ProxyRequire.class.getName()); //33
144
145        putNameMap(REQUIRE, Require.class.getName()); //34
146
147        putNameMap(CONTENT_DISPOSITION, ContentDisposition.class.getName()); //35
148
149        putNameMap(SUBJECT, Subject.class.getName()); //36
150
151        putNameMap(USER_AGENT, UserAgent.class.getName()); //37
152
153        putNameMap(WARNING, Warning.class.getName()); //38
154
155        putNameMap(PRIORITY, Priority.class.getName()); //39
156
157        putNameMap(DATE, SIPDateHeader.class.getName()); //40
158
159        putNameMap(EXPIRES, Expires.class.getName()); //41
160
161        putNameMap(SUPPORTED, Supported.class.getName()); //42
162
163        putNameMap(REPLY_TO, ReplyTo.class.getName()); // 43
164
165        putNameMap(SUBSCRIPTION_STATE, SubscriptionState.class.getName()); //44
166
167        putNameMap(EVENT, Event.class.getName()); //45
168
169        putNameMap(ALLOW_EVENTS, AllowEvents.class.getName()); //46
170
171
172        // pmusgrave - extensions
173        putNameMap(REFERRED_BY, "ReferredBy");
174        putNameMap(SESSION_EXPIRES, "SessionExpires");
175        putNameMap(MIN_SE, "MinSE");
176        putNameMap(REPLACES, "Replaces");
177        // jean deruelle
178        putNameMap(JOIN, "Join");
179
180
181        // IMS Specific headers.
182
183        putNameMap(PAccessNetworkInfoHeader.NAME, PAccessNetworkInfo.class.getName());
184
185        putNameMap(PAssertedIdentityHeader.NAME, PAssertedIdentity.class.getName());
186
187        putNameMap(PAssociatedURIHeader.NAME, PAssociatedURI.class.getName());
188
189        putNameMap(PCalledPartyIDHeader.NAME, PCalledPartyID.class.getName());
190
191        putNameMap(PChargingFunctionAddressesHeader.NAME,  PChargingFunctionAddresses.class.getName());
192
193        putNameMap(PChargingVectorHeader.NAME,PChargingVector.class.getName());
194
195        putNameMap(PMediaAuthorizationHeader.NAME,PMediaAuthorization.class.getName());
196
197        putNameMap(Path.NAME, Path.class.getName());
198
199        putNameMap(PPreferredIdentity.NAME, PPreferredIdentity.class.getName());
200
201        putNameMap(Privacy.NAME,Privacy.class.getName());
202
203        putNameMap(ServiceRoute.NAME, ServiceRoute.class.getName());
204
205        putNameMap(PVisitedNetworkID.NAME, PVisitedNetworkID.class.getName());
206
207
208
209    }
210}
211