001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.geronimo.console.jmsmanager.server;
018
019 import java.io.IOException;
020 import java.util.Arrays;
021 import java.util.List;
022 import java.util.ArrayList;
023 import java.net.URI;
024
025 import javax.portlet.PortletRequestDispatcher;
026 import javax.portlet.ActionRequest;
027 import javax.portlet.ActionResponse;
028 import javax.portlet.PortletException;
029 import javax.portlet.RenderRequest;
030 import javax.portlet.RenderResponse;
031 import javax.portlet.WindowState;
032 import javax.portlet.PortletConfig;
033 import javax.portlet.PortletContext;
034 import org.apache.geronimo.console.util.PortletManager;
035 import org.apache.geronimo.kernel.proxy.GeronimoManagedBean;
036 import org.apache.geronimo.management.geronimo.JMSConnector;
037 import org.apache.geronimo.management.geronimo.JMSManager;
038 import org.apache.geronimo.management.geronimo.JMSBroker;
039 import org.apache.geronimo.gbean.AbstractName;
040 import org.apache.commons.logging.Log;
041 import org.apache.commons.logging.LogFactory;
042
043 /**
044 * List, edit, add, remove JMS network connectors
045 *
046 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
047 */
048 public class JMSConnectorPortlet extends BaseJMSPortlet {
049 private final static Log log = LogFactory.getLog(JMSConnectorPortlet.class);
050
051 private PortletRequestDispatcher normalView;
052
053 private PortletRequestDispatcher maximizedView;
054
055 private PortletRequestDispatcher helpView;
056
057 protected PortletRequestDispatcher editView;
058
059 public void processAction(ActionRequest actionRequest,
060 ActionResponse actionResponse) throws PortletException, IOException {
061 try {
062 String mode = actionRequest.getParameter("mode");
063 String connectorURI = actionRequest.getParameter("connectorURI");
064 String brokerURI = actionRequest.getParameter("brokerURI");
065 JMSManager manager = PortletManager.getCurrentServer(actionRequest).getJMSManagers()[0]; //todo: handle multiple
066 if(mode.equals("new")) {
067 // User selected to add a new connector, need to show criteria portlet
068 actionResponse.setRenderParameter("mode", "new");
069 String protocol = actionRequest.getParameter("protocol");
070 actionResponse.setRenderParameter("protocol", protocol);
071 actionResponse.setRenderParameter("brokerURI", brokerURI);
072 } else if(mode.equals("add")) { // User just submitted the form to add a new connector
073 // Get submitted values
074 //todo: lots of validation
075 String protocol = actionRequest.getParameter("protocol");
076 String host = actionRequest.getParameter("host");
077 int port = Integer.parseInt(actionRequest.getParameter("port"));
078 String name = actionRequest.getParameter("name");
079 AbstractName brokerAbstractName = new AbstractName(URI.create(brokerURI));
080 // Create and configure the connector
081 JMSConnector connector = PortletManager.createJMSConnector(actionRequest, manager, brokerAbstractName, name, protocol, host, port);
082 // Start the connector
083 try {
084 ((GeronimoManagedBean)connector).startRecursive();
085 } catch (Exception e) {
086 log.error("Unable to start connector", e); //todo: get into rendered page somehow?
087 }
088 actionResponse.setRenderParameter("mode", "list");
089 } else if(mode.equals("save")) { // User just submitted the form to update a connector
090 // Get submitted values
091 //todo: lots of validation
092 String host = actionRequest.getParameter("host");
093 int port = Integer.parseInt(actionRequest.getParameter("port"));
094 // Identify and update the connector
095 AbstractName connectorAbstractName = new AbstractName(URI.create(connectorURI));
096 JMSConnector connector = (JMSConnector)PortletManager.getManagedBean(actionRequest, connectorAbstractName);
097 if(connector != null) {
098 connector.setHost(host);
099 connector.setPort(port);
100 }
101 actionResponse.setRenderParameter("mode", "list");
102 } else if(mode.equals("start")) {
103 AbstractName connectorAbstractName = new AbstractName(URI.create(connectorURI));
104 try {
105 PortletManager.getManagedBean(actionRequest, connectorAbstractName).startRecursive();
106 } catch (Exception e) {
107 throw new PortletException(e);
108 }
109 actionResponse.setRenderParameter("mode", "list");
110 } else if(mode.equals("stop")) {
111 AbstractName connectorAbstractName = new AbstractName(URI.create(connectorURI));
112 try {
113 PortletManager.getManagedBean(actionRequest, connectorAbstractName).stop();
114 } catch (Exception e) {
115 throw new PortletException(e);
116 }
117 actionResponse.setRenderParameter("mode", "list");
118 } else if(mode.equals("edit")) {
119 actionResponse.setRenderParameter("connectorURI", connectorURI);
120 actionResponse.setRenderParameter("brokerURI", brokerURI);
121 actionResponse.setRenderParameter("mode", "edit");
122 } else if(mode.equals("delete")) {
123 AbstractName connectorAbstractName = new AbstractName(URI.create(connectorURI));
124 manager.removeConnector(connectorAbstractName);
125 actionResponse.setRenderParameter("mode", "list");
126 }
127 } catch (Throwable e) {
128 log.error("Unable to process portlet action", e);
129 if(e instanceof PortletException) {
130 throw (PortletException)e;
131 }
132 }
133 }
134
135 protected void doView(RenderRequest renderRequest,
136 RenderResponse renderResponse) throws IOException, PortletException {
137 if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
138 return;
139 }
140
141 try {
142 String mode = renderRequest.getParameter("mode");
143 if(mode == null || mode.equals("")) {
144 mode = "list";
145 }
146 JMSManager manager = PortletManager.getCurrentServer(renderRequest).getJMSManagers()[0]; //todo: handle multiple
147
148 if(mode.equals("new")) {
149 String brokerURI = renderRequest.getParameter("brokerURI");
150 String protocol = renderRequest.getParameter("protocol");
151 renderRequest.setAttribute("protocol", protocol);
152 renderRequest.setAttribute("brokerURI", brokerURI);
153 renderRequest.setAttribute("brokerName", new AbstractName(URI.create(brokerURI)).getName().get("name").toString());
154 renderRequest.setAttribute("mode", "add");
155 editView.include(renderRequest, renderResponse);
156 } else if(mode.equals("edit")) {
157 String brokerURI = renderRequest.getParameter("brokerURI");
158 String connectorURI = renderRequest.getParameter("connectorURI");
159 JMSConnector connector = (JMSConnector)PortletManager.getManagedBean(renderRequest, new AbstractName(URI.create(connectorURI)));
160 if(connector == null) {
161 doList(renderRequest, manager, renderResponse);
162 } else {
163 renderRequest.setAttribute("connectorURI", connectorURI);
164 renderRequest.setAttribute("brokerName", new AbstractName(URI.create(brokerURI)).getName().get("name").toString());
165 renderRequest.setAttribute("connectorName", new AbstractName(URI.create(connectorURI)).getName().get("name").toString());
166 renderRequest.setAttribute("protocol", connector.getProtocol());
167 renderRequest.setAttribute("port", new Integer(connector.getPort()));
168 renderRequest.setAttribute("host", connector.getHost());
169 renderRequest.setAttribute("mode", "save");
170 editView.include(renderRequest, renderResponse);
171 }
172 } else if(mode.equals("list")) {
173 doList(renderRequest, manager, renderResponse);
174 }
175 } catch (Throwable e) {
176 log.error("Unable to render portlet", e);
177 }
178 }
179
180 private void doList(RenderRequest renderRequest, JMSManager manager, RenderResponse renderResponse) throws PortletException, IOException {
181 List beans = new ArrayList();
182 JMSBroker[] brokers = (JMSBroker[]) manager.getContainers();
183 for (int i = 0; i < brokers.length; i++) {
184 JMSBroker broker = brokers[i];
185 AbstractName brokerAbstractName = PortletManager.getNameFor(renderRequest, broker);
186 JMSConnector[] connectors = (JMSConnector[]) manager.getConnectorsForContainer(broker);
187 for (int j = 0; j < connectors.length; j++) {
188 JMSConnector connector = connectors[j];
189 AbstractName connectorAbstractName = PortletManager.getNameFor(renderRequest,connector);
190 String brokerName = brokerAbstractName.getName().get("name").toString();
191 String connectorName = connectorAbstractName.getName().get("name").toString();
192 ConnectorWrapper info = new ConnectorWrapper(brokerName, brokerAbstractName.toString(),
193 connectorName, connectorAbstractName.toString(),
194 connector);
195 beans.add(info);
196 }
197 }
198 renderRequest.setAttribute("brokers", getBrokerList(renderRequest, manager));
199 renderRequest.setAttribute("connectors", beans);
200 ArrayList protocols = new ArrayList(Arrays.asList(manager.getSupportedProtocols()));
201 protocols.remove("peer"); // add operation not supported for peer protocol
202 protocols.remove("failover"); // add operation not supported for failover protocol
203 renderRequest.setAttribute("protocols", protocols);
204
205 if (WindowState.NORMAL.equals(renderRequest.getWindowState())) {
206 normalView.include(renderRequest, renderResponse);
207 } else {
208 maximizedView.include(renderRequest, renderResponse);
209 }
210 }
211
212 protected void doHelp(RenderRequest renderRequest,
213 RenderResponse renderResponse) throws PortletException, IOException {
214 helpView.include(renderRequest, renderResponse);
215 }
216
217 public void init(PortletConfig portletConfig) throws PortletException {
218 super.init(portletConfig);
219 PortletContext pc = portletConfig.getPortletContext();
220 normalView = pc.getRequestDispatcher("/WEB-INF/view/jmsmanager/server/connector/normal.jsp");
221 maximizedView = pc.getRequestDispatcher("/WEB-INF/view/jmsmanager/server/connector/maximized.jsp");
222 helpView = pc.getRequestDispatcher("/WEB-INF/view/jmsmanager/server/connector/help.jsp");
223 editView = pc.getRequestDispatcher("/WEB-INF/view/jmsmanager/server/connector/editGeneric.jsp");
224 }
225
226 public void destroy() {
227 helpView = null;
228 editView = null;
229 normalView = null;
230 maximizedView = null;
231 super.destroy();
232 }
233
234 public static boolean isValid(String s) {
235 return s != null && !s.equals("");
236 }
237
238 public static class ConnectorWrapper {
239 private String brokerName;
240 private String brokerURI;
241 private String connectorName;
242 private String connectorURI;
243 private JMSConnector connector;
244
245 public ConnectorWrapper(String brokerName, String brokerURI, String connectorName, String connectorURI, JMSConnector connector) {
246 this.brokerName = brokerName;
247 this.brokerURI = brokerURI;
248 this.connectorName = connectorName;
249 this.connectorURI = connectorURI;
250 this.connector = connector;
251 }
252
253 public String getBrokerName() {
254 return brokerName;
255 }
256
257 public String getConnectorName() {
258 return connectorName;
259 }
260
261 public JMSConnector getConnector() {
262 return connector;
263 }
264
265 public String getBrokerURI() {
266 return brokerURI;
267 }
268 public String getConnectorURI() {
269 return connectorURI;
270 }
271 }
272 }