1
14
15 package com.liferay.portlet;
16
17 import com.liferay.portal.kernel.util.InstanceFactory;
18 import com.liferay.portal.model.PortletApp;
19
20 import java.util.Map;
21 import java.util.concurrent.ConcurrentHashMap;
22
23 import javax.portlet.PortletContext;
24 import javax.portlet.PortletException;
25 import javax.portlet.UnavailableException;
26 import javax.portlet.filter.FilterConfig;
27 import javax.portlet.filter.PortletFilter;
28
29
34 public class PortletFilterFactory {
35
36 public static PortletFilter create(
37 com.liferay.portal.model.PortletFilter portletFilterModel,
38 PortletContext ctx)
39 throws PortletException {
40
41 return _instance._create(portletFilterModel, ctx);
42 }
43
44 public static void destroy(
45 com.liferay.portal.model.PortletFilter portletFilterModel) {
46
47 _instance._destroy(portletFilterModel);
48 }
49
50 private PortletFilterFactory() {
51 _portletFilters =
52 new ConcurrentHashMap<String, Map<String, PortletFilter>>();
53 }
54
55 private PortletFilter _create(
56 com.liferay.portal.model.PortletFilter portletFilterModel,
57 PortletContext portletContext)
58 throws PortletException {
59
60 PortletApp portletApp = portletFilterModel.getPortletApp();
61
62 Map<String, PortletFilter> portletFilters = _portletFilters.get(
63 portletApp.getServletContextName());
64
65 if (portletFilters == null) {
66 portletFilters = new ConcurrentHashMap<String, PortletFilter>();
67
68 _portletFilters.put(
69 portletApp.getServletContextName(), portletFilters);
70 }
71
72 PortletFilter portletFilter = portletFilters.get(
73 portletFilterModel.getFilterName());
74
75 if (portletFilter == null) {
76 FilterConfig filterConfig = FilterConfigFactory.create(
77 portletFilterModel, portletContext);
78
79 if (portletApp.isWARFile()) {
80 PortletContextBag portletContextBag = PortletContextBagPool.get(
81 portletApp.getServletContextName());
82
83 Map<String, PortletFilter> curPortletFilters =
84 portletContextBag.getPortletFilters();
85
86 portletFilter = curPortletFilters.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 = _portletFilters.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 FilterConfigFactory.destroy(portletFilterModel);
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)InstanceFactory.newInstance(
145 portletFilterModel.getFilterClass());
146 }
147
148 portletFilter.init(filterConfig);
149 }
150 catch (PortletException pe) {
151 throw pe;
152 }
153 catch (Exception e) {
154 throw new UnavailableException(e.getMessage());
155 }
156
157 return portletFilter;
158 }
159
160 private static PortletFilterFactory _instance = new PortletFilterFactory();
161
162 private Map<String, Map<String, PortletFilter>> _portletFilters;
163
164 }