1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/*
2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/cookie/CookieSpecRegistry.java $
3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Revision: 652950 $
4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Date: 2008-05-02 16:49:48 -0700 (Fri, 02 May 2008) $
5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one
8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * or more contributor license agreements.  See the NOTICE file
9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed with this work for additional information
10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * regarding copyright ownership.  The ASF licenses this file
11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * to you under the Apache License, Version 2.0 (the
12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "License"); you may not use this file except in compliance
13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * with the License.  You may obtain a copy of the License at
14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *   http://www.apache.org/licenses/LICENSE-2.0
16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing,
18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * software distributed under the License is distributed on an
19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * KIND, either express or implied.  See the License for the
21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * specific language governing permissions and limitations
22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * under the License.
23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This software consists of voluntary contributions made by many
26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * individuals on behalf of the Apache Software Foundation.  For more
27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * information on the Apache Software Foundation, please see
28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <http://www.apache.org/>.
29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpackage org.apache.http.cookie;
33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.ArrayList;
35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.LinkedHashMap;
36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.List;
37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.Locale;
38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.Map;
39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.params.HttpParams;
41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/**
43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Cookie specification registry that can be used to obtain the corresponding
44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * cookie specification implementation for a given type of type or version of
45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * cookie.
46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 4.0
51d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *
52d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * @deprecated Please use {@link java.net.URL#openConnection} instead.
53d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
54d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     for further details.
55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
56d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath@Deprecated
57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic final class CookieSpecRegistry {
58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private final Map<String,CookieSpecFactory> registeredSpecs;
60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public CookieSpecRegistry() {
62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        super();
63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.registeredSpecs = new LinkedHashMap<String,CookieSpecFactory>();
64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Registers a {@link CookieSpecFactory} with the given identifier.
68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * If a specification with the given name already exists it will be overridden.
69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * This nameis the same one used to retrieve the {@link CookieSpecFactory}
70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * from {@link #getCookieSpec(String)}.
71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the identifier for this specification
73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param factory the {@link CookieSpecFactory} class to register
74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see #getCookieSpec(String)
76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public synchronized void register(final String name, final CookieSpecFactory factory) {
78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project         if (name == null) {
79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project             throw new IllegalArgumentException("Name may not be null");
80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project         }
81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (factory == null) {
82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Cookie spec factory may not be null");
83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        registeredSpecs.put(name.toLowerCase(Locale.ENGLISH), factory);
85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Unregisters the {@link CookieSpecFactory} with the given ID.
89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param id the identifier of the {@link CookieSpec cookie specification} to unregister
91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public synchronized void unregister(final String id) {
93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project         if (id == null) {
94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project             throw new IllegalArgumentException("Id may not be null");
95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project         }
96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project         registeredSpecs.remove(id.toLowerCase(Locale.ENGLISH));
97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Gets the {@link CookieSpec cookie specification} with the given ID.
101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the {@link CookieSpec cookie specification} identifier
103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param params the {@link HttpParams HTTP parameters} for the cookie
104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *  specification.
105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return {@link CookieSpec cookie specification}
107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @throws IllegalStateException if a policy with the given name cannot be found
109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public synchronized CookieSpec getCookieSpec(final String name, final HttpParams params)
111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        throws IllegalStateException {
112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (name == null) {
114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Name may not be null");
115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        CookieSpecFactory factory = registeredSpecs.get(name.toLowerCase(Locale.ENGLISH));
117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (factory != null) {
118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return factory.newInstance(params);
119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else {
120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalStateException("Unsupported cookie spec: " + name);
121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Gets the {@link CookieSpec cookie specification} with the given name.
126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name the {@link CookieSpec cookie specification} identifier
128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return {@link CookieSpec cookie specification}
130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @throws IllegalStateException if a policy with the given name cannot be found
132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public synchronized CookieSpec getCookieSpec(final String name)
134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        throws IllegalStateException {
135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return getCookieSpec(name, null);
136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Obtains a list containing names of all registered {@link CookieSpec cookie
140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * specs} in their default order.
141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Note that the DEFAULT policy (if present) is likely to be the same
143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * as one of the other policies, but does not have to be.
144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @return list of registered cookie spec names
146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public synchronized List<String> getSpecNames(){
148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return new ArrayList<String>(registeredSpecs.keySet());
149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Populates the internal collection of registered {@link CookieSpec cookie
153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * specs} with the content of the map passed as a parameter.
154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param map cookie specs
156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
157069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public synchronized void setItems(final Map<String, CookieSpecFactory> map) {
158069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (map == null) {
159069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
160069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
161069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        registeredSpecs.clear();
162069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        registeredSpecs.putAll(map);
163069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
164069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
165069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project}
166