001
014
015 package com.liferay.util.bridges.alloy;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.messaging.MessageBusUtil;
020 import com.liferay.portal.kernel.messaging.MessageListener;
021 import com.liferay.portal.kernel.portlet.FriendlyURLMapper;
022 import com.liferay.portal.kernel.portlet.LiferayPortletConfig;
023 import com.liferay.portal.kernel.portlet.Router;
024 import com.liferay.portal.kernel.scheduler.SchedulerEngineHelperUtil;
025 import com.liferay.portal.kernel.scheduler.StorageType;
026 import com.liferay.portal.kernel.search.Indexer;
027 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
028 import com.liferay.portal.kernel.servlet.HttpMethods;
029 import com.liferay.portal.kernel.util.JavaConstants;
030 import com.liferay.portal.kernel.util.ParamUtil;
031 import com.liferay.portal.kernel.util.StringBundler;
032 import com.liferay.portal.kernel.util.Validator;
033 import com.liferay.portal.model.Portlet;
034
035 import java.io.IOException;
036
037 import java.util.HashMap;
038 import java.util.HashSet;
039 import java.util.Map;
040 import java.util.Set;
041
042 import javax.portlet.ActionRequest;
043 import javax.portlet.ActionResponse;
044 import javax.portlet.GenericPortlet;
045 import javax.portlet.PortletConfig;
046 import javax.portlet.PortletContext;
047 import javax.portlet.PortletException;
048 import javax.portlet.PortletRequest;
049 import javax.portlet.PortletRequestDispatcher;
050 import javax.portlet.PortletResponse;
051 import javax.portlet.RenderRequest;
052 import javax.portlet.RenderResponse;
053 import javax.portlet.ResourceRequest;
054 import javax.portlet.ResourceResponse;
055
056
059 public class AlloyPortlet extends GenericPortlet {
060
061 @Override
062 public void destroy() {
063 for (AlloyController alloyController : _alloyControllers) {
064 BaseAlloyControllerImpl baseAlloyControllerImpl =
065 (BaseAlloyControllerImpl)alloyController;
066
067 Indexer indexer = baseAlloyControllerImpl.indexer;
068
069 if (indexer != null) {
070 IndexerRegistryUtil.unregister(indexer);
071 }
072
073 MessageListener schedulerMessageListener =
074 baseAlloyControllerImpl.schedulerMessageListener;
075
076 if (schedulerMessageListener == null) {
077 continue;
078 }
079
080 try {
081 SchedulerEngineHelperUtil.unschedule(
082 baseAlloyControllerImpl.getSchedulerJobName(),
083 baseAlloyControllerImpl.getSchedulerGroupName(),
084 StorageType.MEMORY_CLUSTERED);
085
086 MessageBusUtil.removeDestination(
087 baseAlloyControllerImpl.getSchedulerDestinationName());
088 }
089 catch (Exception e) {
090 _log.error(e, e);
091 }
092 }
093 }
094
095 @Override
096 public void init(PortletConfig portletConfig) throws PortletException {
097 super.init(portletConfig);
098
099 LiferayPortletConfig liferayPortletConfig =
100 (LiferayPortletConfig)portletConfig;
101
102 Portlet portlet = liferayPortletConfig.getPortlet();
103
104 FriendlyURLMapper friendlyURLMapper =
105 portlet.getFriendlyURLMapperInstance();
106
107 Router router = friendlyURLMapper.getRouter();
108
109 router.urlToParameters(HttpMethods.GET, _defaultRouteParameters);
110 }
111
112 @Override
113 public void processAction(
114 ActionRequest actionRequest, ActionResponse actionResponse)
115 throws IOException, PortletException {
116
117 String path = getPath(actionRequest);
118
119 include(path, actionRequest, actionResponse);
120 }
121
122 @Override
123 public void render(
124 RenderRequest renderRequest, RenderResponse renderResponse)
125 throws IOException, PortletException {
126
127 String path = getPath(renderRequest);
128
129 include(path, renderRequest, renderResponse);
130 }
131
132 @Override
133 public void serveResource(
134 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
135 throws IOException, PortletException {
136
137 String path = getPath(resourceRequest);
138
139 include(path, resourceRequest, resourceResponse);
140 }
141
142 protected Map<String, String> getDefaultRouteParameters() {
143
150
151 return _defaultRouteParameters;
152 }
153
154 protected String getPath(PortletRequest portletRequest) {
155 LiferayPortletConfig liferayPortletConfig =
156 (LiferayPortletConfig)portletRequest.getAttribute(
157 JavaConstants.JAVAX_PORTLET_CONFIG);
158
159 Portlet portlet = liferayPortletConfig.getPortlet();
160
161 String controllerPath = ParamUtil.getString(
162 portletRequest, "controller");
163
164 if (Validator.isNull(controllerPath)) {
165 Map<String, String> defaultRouteParameters =
166 getDefaultRouteParameters();
167
168 controllerPath = defaultRouteParameters.get("controller");
169 }
170
171 StringBundler sb = new StringBundler(5);
172
173 sb.append("/WEB-INF/jsp/");
174 sb.append(portlet.getFriendlyURLMapping());
175 sb.append("/controllers/");
176 sb.append(controllerPath);
177 sb.append("_controller.jsp");
178
179 return sb.toString();
180 }
181
182 protected void include(
183 String path, PortletRequest portletRequest,
184 PortletResponse portletResponse)
185 throws IOException, PortletException {
186
187 PortletContext portletContext = getPortletContext();
188
189 PortletRequestDispatcher portletRequestDispatcher =
190 portletContext.getRequestDispatcher(path);
191
192 if (portletRequestDispatcher == null) {
193 _log.error(path + " is not a valid include");
194 }
195 else {
196 portletRequestDispatcher.include(portletRequest, portletResponse);
197 }
198 }
199
200 protected void registerAlloyController(AlloyController alloyController) {
201 if (!_alloyControllers.contains(alloyController)) {
202 _alloyControllers.add(alloyController);
203 }
204 }
205
206 private static Log _log = LogFactoryUtil.getLog(AlloyPortlet.class);
207
208 private Set<AlloyController> _alloyControllers =
209 new HashSet<AlloyController>();
210 private Map<String, String> _defaultRouteParameters =
211 new HashMap<String, String>();
212
213 }