1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    *
5    *
6    *
7    * The contents of this file are subject to the terms of the Liferay Enterprise
8    * Subscription License ("License"). You may not use this file except in
9    * compliance with the License. You can obtain a copy of the License by
10   * contacting Liferay, Inc. See the License for the specific language governing
11   * permissions and limitations under the License, including but not limited to
12   * distribution rights of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portlet;
24  
25  import com.liferay.portal.model.Portlet;
26  
27  import java.util.Map;
28  import java.util.concurrent.ConcurrentHashMap;
29  
30  import javax.portlet.PortletConfig;
31  import javax.portlet.PortletContext;
32  
33  import javax.servlet.ServletContext;
34  
35  /**
36   * <a href="PortletConfigFactory.java.html"><b><i>View Source</i></b></a>
37   *
38   * @author Brian Wing Shun Chan
39   */
40  public class PortletConfigFactory {
41  
42      public static PortletConfig create(
43          Portlet portlet, ServletContext servletContext) {
44  
45          return _instance._create(portlet, servletContext);
46      }
47  
48      public static void destroy(Portlet portlet) {
49          _instance._destroy(portlet);
50      }
51  
52      private PortletConfigFactory() {
53          _pool = new ConcurrentHashMap<String, Map<String, PortletConfig>>();
54      }
55  
56      private PortletConfig _create(
57          Portlet portlet, ServletContext servletContext) {
58  
59          Map<String, PortletConfig> portletConfigs =
60              _pool.get(portlet.getRootPortletId());
61  
62          if (portletConfigs == null) {
63              portletConfigs = new ConcurrentHashMap<String, PortletConfig>();
64  
65              _pool.put(portlet.getRootPortletId(), portletConfigs);
66          }
67  
68          PortletConfig portletConfig = portletConfigs.get(
69              portlet.getPortletId());
70  
71          if (portletConfig == null) {
72              PortletContext portletContext =
73                  PortletContextFactory.create(portlet, servletContext);
74  
75              portletConfig = new PortletConfigImpl(portlet, portletContext);
76  
77              portletConfigs.put(portlet.getPortletId(), portletConfig);
78          }
79  
80          return portletConfig;
81      }
82  
83      private void _destroy(Portlet portlet) {
84          _pool.remove(portlet.getRootPortletId());
85      }
86  
87      private static PortletConfigFactory _instance = new PortletConfigFactory();
88  
89      private Map<String, Map<String, PortletConfig>> _pool;
90  
91  }