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