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.configcreator;
018    
019    import java.io.IOException;
020    import java.util.HashSet;
021    import java.util.List;
022    
023    import javax.portlet.ActionRequest;
024    import javax.portlet.ActionResponse;
025    import javax.portlet.PortletException;
026    import javax.portlet.RenderRequest;
027    import javax.portlet.RenderResponse;
028    
029    import org.apache.commons.logging.Log;
030    import org.apache.commons.logging.LogFactory;
031    import org.apache.geronimo.console.MultiPageModel;
032    
033    /**
034     * A handler for ...
035     * 
036     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
037     */
038    public class ReferencesHandler extends AbstractHandler {
039        private static final Log log = LogFactory.getLog(ReferencesHandler.class);
040    
041        public ReferencesHandler() {
042            super(REFERENCES_MODE, "/WEB-INF/view/configcreator/references.jsp");
043        }
044    
045        public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model)
046                throws PortletException, IOException {
047            return getMode();
048        }
049    
050        public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model)
051                throws PortletException, IOException {
052            WARConfigData data = getSessionData(request);
053            request.setAttribute(DATA_PARAMETER, data);
054            request.setAttribute(DEPLOYED_EJBS_PARAMETER, JSR77_Util.getDeployedEJBs(request));
055            request.setAttribute(DEPLOYED_JDBC_CONNECTION_POOLS_PARAMETER, JSR77_Util.getJDBCConnectionPools(request));
056            request.setAttribute(DEPLOYED_JMS_CONNECTION_FACTORIES_PARAMETER, JSR77_Util.getJMSConnectionFactories(request));
057            request.setAttribute(DEPLOYED_JMS_DESTINATIONS_PARAMETER, JSR77_Util.getJMSDestinations(request));
058            request.setAttribute(DEPLOYED_JAVAMAIL_SESSIONS_PARAMETER, JSR77_Util.getJavaMailSessions(request));
059        }
060    
061        public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model)
062                throws PortletException, IOException {
063            WARConfigData data = getSessionData(request);
064            data.readReferencesData(request);
065            HashSet dependenciesSet = new HashSet();
066            if (processRefs(data.getEjbRefs(), dependenciesSet)
067                    && processRefs(data.getEjbLocalRefs(), dependenciesSet)
068                    && processRefs(data.getJdbcPoolRefs(), dependenciesSet)
069                    && processRefs(data.getJavaMailSessionRefs(), dependenciesSet)
070                    && processRefs(data.getJmsConnectionFactoryRefs(), dependenciesSet)
071                    && processRefs(data.getJmsDestinationRefs(), dependenciesSet)) {
072                data.getDependencies().clear();
073                data.getDependencies().addAll(dependenciesSet);
074                if (data.getSecurity() != null) {
075                    return SECURITY_MODE + "-before";
076                }
077                return DEPENDENCIES_MODE + "-before";
078            }
079            data.setReferenceNotResolved(true);
080            return getMode() + "-before";
081        }
082    
083        private boolean processRefs(List refList, HashSet dependenciesSet) {
084            for (int i = 0; i < refList.size(); i++) {
085                ReferenceData referenceData = (ReferenceData) refList.get(i);
086                String referenceLink = referenceData.getRefLink();
087                if (referenceLink == null || referenceLink.length() <= 0) {
088                    return false;
089                }
090                dependenciesSet.add(JSR88_Util.getDependencyString(referenceLink));
091            }
092            return true;
093        }
094    }