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.apache.jk;
018    
019    import java.io.IOException;
020    import javax.portlet.ActionRequest;
021    import javax.portlet.ActionResponse;
022    import javax.portlet.PortletException;
023    import javax.portlet.RenderRequest;
024    import javax.portlet.RenderResponse;
025    import org.apache.commons.logging.Log;
026    import org.apache.commons.logging.LogFactory;
027    import org.apache.geronimo.console.MultiPageModel;
028    import org.apache.geronimo.console.util.PortletManager;
029    import org.apache.geronimo.management.geronimo.NetworkConnector;
030    import org.apache.geronimo.management.geronimo.WebConnector;
031    import org.apache.geronimo.management.geronimo.WebManager;
032    
033    /**
034     * ReplaceMe
035     *
036     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
037     */
038    public class AJPHandler extends BaseApacheHandler {
039        private final static Log log = LogFactory.getLog(AJPHandler.class);
040    
041        public AJPHandler() {
042            super(AJP_MODE, "/WEB-INF/view/apache/jk/ajpPort.jsp");
043        }
044    
045        public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
046            WebManager[] managers = PortletManager.getWebManagers(request);
047            // See if any AJP listeners are defined
048            for (int i = 0; i < managers.length; i++) {
049                WebManager manager = managers[i];
050                NetworkConnector[] connectors = manager.getConnectors(WebManager.PROTOCOL_AJP);
051                if(connectors.length > 0) {
052                    log.warn("Found AJP listener on port "+connectors[0].getPort());
053                    return BASIC_CONFIG_MODE+BEFORE_ACTION;
054                }
055            }
056            // Find an unused port
057            int port = 8009;
058            outer:
059            while(true) {
060                for (int i = 0; i < managers.length; i++) {
061                    WebManager manager = managers[i];
062                    WebConnector[] cons = (WebConnector[]) manager.getConnectors();
063                    for (int j = 0; j < cons.length; j++) {
064                        WebConnector con = cons[j];
065                        if(con.getPort() == port) {
066                            port += 10;
067                            continue outer;
068                        }
069                    }
070                }
071                break;
072            }
073    
074            ((ApacheModel)model).setAddAjpPort(new Integer(port));
075    
076            return getMode();
077        }
078    
079        public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
080        }
081    
082        public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel amodel) throws PortletException, IOException {
083            ApacheModel model = (ApacheModel) amodel;
084            // Make sure port is set and unused
085            if(model.getAddAjpPort() == null) {
086                return getMode()+BEFORE_ACTION; //todo: some sort of error message
087            }
088            WebManager[] managers = PortletManager.getWebManagers(request);
089            for (int i = 0; i < managers.length; i++) {
090                WebManager manager = managers[i];
091                WebConnector[] cons = (WebConnector[]) manager.getConnectors();
092                for (int j = 0; j < cons.length; j++) {
093                    WebConnector con = cons[j];
094                    if(con.getPort() == model.getAddAjpPort().intValue()) {
095                        return getMode()+BEFORE_ACTION; //todo: some sort of error message
096                    }
097                }
098            }
099    
100            return BASIC_CONFIG_MODE+BEFORE_ACTION;
101        }
102    }