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