001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.util.InstanceFactory;
018 import com.liferay.portal.model.PortletApp;
019
020 import java.util.Map;
021 import java.util.concurrent.ConcurrentHashMap;
022
023 import javax.portlet.PortletContext;
024 import javax.portlet.PortletException;
025 import javax.portlet.UnavailableException;
026 import javax.portlet.filter.FilterConfig;
027 import javax.portlet.filter.PortletFilter;
028
029
032 public class PortletFilterFactory {
033
034 public static PortletFilter create(
035 com.liferay.portal.model.PortletFilter portletFilterModel,
036 PortletContext ctx)
037 throws PortletException {
038
039 return _instance._create(portletFilterModel, ctx);
040 }
041
042 public static void destroy(
043 com.liferay.portal.model.PortletFilter portletFilterModel) {
044
045 _instance._destroy(portletFilterModel);
046 }
047
048 private PortletFilterFactory() {
049 _portletFilters =
050 new ConcurrentHashMap<String, Map<String, PortletFilter>>();
051 }
052
053 private PortletFilter _create(
054 com.liferay.portal.model.PortletFilter portletFilterModel,
055 PortletContext portletContext)
056 throws PortletException {
057
058 PortletApp portletApp = portletFilterModel.getPortletApp();
059
060 Map<String, PortletFilter> portletFilters = _portletFilters.get(
061 portletApp.getServletContextName());
062
063 if (portletFilters == null) {
064 portletFilters = new ConcurrentHashMap<String, PortletFilter>();
065
066 _portletFilters.put(
067 portletApp.getServletContextName(), portletFilters);
068 }
069
070 PortletFilter portletFilter = portletFilters.get(
071 portletFilterModel.getFilterName());
072
073 if (portletFilter != null) {
074 return portletFilter;
075 }
076
077 FilterConfig filterConfig = FilterConfigFactory.create(
078 portletFilterModel, portletContext);
079
080 if (portletApp.isWARFile()) {
081 PortletContextBag portletContextBag = PortletContextBagPool.get(
082 portletApp.getServletContextName());
083
084 Map<String, PortletFilter> curPortletFilters =
085 portletContextBag.getPortletFilters();
086
087 portletFilter = curPortletFilters.get(
088 portletFilterModel.getFilterName());
089
090 portletFilter = _init(
091 portletFilterModel, filterConfig, portletFilter);
092 }
093 else {
094 portletFilter = _init(portletFilterModel, filterConfig);
095 }
096
097 portletFilters.put(portletFilterModel.getFilterName(), portletFilter);
098
099 return portletFilter;
100 }
101
102 private void _destroy(
103 com.liferay.portal.model.PortletFilter portletFilterModel) {
104
105 PortletApp portletApp = portletFilterModel.getPortletApp();
106
107 Map<String, PortletFilter> portletFilters = _portletFilters.get(
108 portletApp.getServletContextName());
109
110 if (portletFilters == null) {
111 return;
112 }
113
114 PortletFilter portletFilter = portletFilters.get(
115 portletFilterModel.getFilterName());
116
117 if (portletFilter == null) {
118 return;
119 }
120
121 portletFilter.destroy();
122
123 portletFilters.remove(portletFilterModel.getFilterName());
124
125 FilterConfigFactory.destroy(portletFilterModel);
126 }
127
128 private PortletFilter _init(
129 com.liferay.portal.model.PortletFilter portletFilterModel,
130 FilterConfig filterConfig)
131 throws PortletException {
132
133 return _init(portletFilterModel, filterConfig, null);
134 }
135
136 private PortletFilter _init(
137 com.liferay.portal.model.PortletFilter portletFilterModel,
138 FilterConfig filterConfig, PortletFilter portletFilter)
139 throws PortletException {
140
141 try {
142 if (portletFilter == null) {
143 portletFilter = (PortletFilter)InstanceFactory.newInstance(
144 portletFilterModel.getFilterClass());
145 }
146
147 portletFilter.init(filterConfig);
148 }
149 catch (PortletException pe) {
150 throw pe;
151 }
152 catch (Exception e) {
153 throw new UnavailableException(e.getMessage());
154 }
155
156 return portletFilter;
157 }
158
159 private static PortletFilterFactory _instance = new PortletFilterFactory();
160
161 private Map<String, Map<String, PortletFilter>> _portletFilters;
162
163 }