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