1
14
15 package com.liferay.portlet;
16
17 import com.liferay.portal.model.PortletApp;
18
19 import java.util.Map;
20 import java.util.concurrent.ConcurrentHashMap;
21
22 import javax.portlet.PortletContext;
23 import javax.portlet.PortletException;
24 import javax.portlet.UnavailableException;
25 import javax.portlet.filter.FilterConfig;
26 import javax.portlet.filter.PortletFilter;
27
28
33 public class PortletFilterFactory {
34
35 public static PortletFilter create(
36 com.liferay.portal.model.PortletFilter portletFilterModel,
37 PortletContext ctx)
38 throws PortletException {
39
40 return _instance._create(portletFilterModel, ctx);
41 }
42
43 public static void destroy(
44 com.liferay.portal.model.PortletFilter portletFilterModel) {
45
46 _instance._destroy(portletFilterModel);
47 }
48
49 private PortletFilterFactory() {
50 _pool = new ConcurrentHashMap<String, Map<String, PortletFilter>>();
51 }
52
53 private PortletFilter _create(
54 com.liferay.portal.model.PortletFilter portletFilterModel,
55 PortletContext ctx)
56 throws PortletException {
57
58 PortletApp portletApp = portletFilterModel.getPortletApp();
59
60 Map<String, PortletFilter> portletFilters = _pool.get(
61 portletApp.getServletContextName());
62
63 if (portletFilters == null) {
64 portletFilters = new ConcurrentHashMap<String, PortletFilter>();
65
66 _pool.put(portletApp.getServletContextName(), portletFilters);
67 }
68
69 PortletFilter portletFilter = portletFilters.get(
70 portletFilterModel.getFilterName());
71
72 if (portletFilter == null) {
73 FilterConfig filterConfig =
74 FilterConfigFactory.create(portletFilterModel, ctx);
75
76 if (portletApp.isWARFile()) {
77 PortletContextBag portletContextBag = PortletContextBagPool.get(
78 portletApp.getServletContextName());
79
80 portletFilter = portletContextBag.getPortletFilters().get(
81 portletFilterModel.getFilterName());
82
83 portletFilter = _init(
84 portletFilterModel, filterConfig, portletFilter);
85 }
86 else {
87 portletFilter = _init(portletFilterModel, filterConfig);
88 }
89
90 portletFilters.put(
91 portletFilterModel.getFilterName(), portletFilter);
92 }
93
94 return portletFilter;
95 }
96
97 private void _destroy(
98 com.liferay.portal.model.PortletFilter portletFilterModel) {
99
100 PortletApp portletApp = portletFilterModel.getPortletApp();
101
102 Map<String, PortletFilter> portletFilters = _pool.get(
103 portletApp.getServletContextName());
104
105 if (portletFilters == null) {
106 return;
107 }
108
109 PortletFilter portletFilter = portletFilters.get(
110 portletFilterModel.getFilterName());
111
112 if (portletFilter == null) {
113 return;
114 }
115
116 portletFilter.destroy();
117
118 portletFilters.remove(portletFilterModel.getFilterName());
119 }
120
121 private PortletFilter _init(
122 com.liferay.portal.model.PortletFilter portletFilterModel,
123 FilterConfig filterConfig)
124 throws PortletException {
125
126 return _init(portletFilterModel, filterConfig, null);
127 }
128
129 private PortletFilter _init(
130 com.liferay.portal.model.PortletFilter portletFilterModel,
131 FilterConfig filterConfig, PortletFilter portletFilter)
132 throws PortletException {
133
134 try {
135 if (portletFilter == null) {
136 portletFilter = (PortletFilter)Class.forName(
137 portletFilterModel.getFilterClass()).newInstance();
138 }
139
140 portletFilter.init(filterConfig);
141 }
142 catch (ClassNotFoundException cnofe) {
143 throw new UnavailableException(cnofe.getMessage());
144 }
145 catch (InstantiationException ie) {
146 throw new UnavailableException(ie.getMessage());
147 }
148 catch (IllegalAccessException iae) {
149 throw new UnavailableException(iae.getMessage());
150 }
151
152 return portletFilter;
153 }
154
155 private static PortletFilterFactory _instance = new PortletFilterFactory();
156
157 private Map<String, Map<String, PortletFilter>> _pool;
158
159 }