Package org.apache.geronimo.console.configcreator.configData

Source Code of org.apache.geronimo.console.configcreator.configData.JndiRefsConfigData$ReferenceData

/**
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
package org.apache.geronimo.console.configcreator.configData;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

import javax.portlet.PortletRequest;

import org.apache.geronimo.j2ee.deployment.annotation.AnnotatedApp;
import org.apache.geronimo.xbeans.geronimo.naming.GerPatternType;
import org.apache.geronimo.xbeans.geronimo.naming.GerPortType;
import org.apache.geronimo.xbeans.geronimo.naming.GerResourceEnvRefType;
import org.apache.geronimo.xbeans.geronimo.naming.GerResourceRefType;
import org.apache.geronimo.xbeans.geronimo.naming.GerServiceRefType;
import org.apache.geronimo.xbeans.geronimo.web.GerWebAppType;
import org.apache.geronimo.xbeans.javaee.EjbLocalRefType;
import org.apache.geronimo.xbeans.javaee.EjbRefType;
import org.apache.geronimo.xbeans.javaee.ResourceEnvRefType;
import org.apache.geronimo.xbeans.javaee.ResourceRefType;
import org.apache.geronimo.xbeans.javaee.ServiceRefType;

/**
*
* @version $Rev: 654201 $ $Date: 2008-05-08 02:20:50 +0800 (Thu, 08 May 2008) $
*/
public class JndiRefsConfigData {
    private List<ReferenceData> jdbcPoolRefs = new ArrayList<ReferenceData>();

    private List<ReferenceData> jmsConnectionFactoryRefs = new ArrayList<ReferenceData>();

    private List<ReferenceData> javaMailSessionRefs = new ArrayList<ReferenceData>();

    private HashSet<String> dependenciesSet = new HashSet<String>();

    private boolean referenceNotResolved = false;

    public final static String REF_NAME = "refName";

    public final static String REF_LINK = "refLink";

    public void parseWebDD(AnnotatedApp annotatedWebAppDD, GerWebAppType webApp) {
        EjbRefType[] ejbRefs = annotatedWebAppDD.getEjbRefArray();
        for (int i = 0; i < ejbRefs.length; i++) {
            String refName = ejbRefs[i].getEjbRefName().getStringValue();
            webApp.addNewEjbRef().setRefName(refName);
        }

        EjbLocalRefType[] ejbLocalRefs = annotatedWebAppDD.getEjbLocalRefArray();
        for (int i = 0; i < ejbLocalRefs.length; i++) {
            String refName = ejbLocalRefs[i].getEjbRefName().getStringValue();
            webApp.addNewEjbLocalRef().setRefName(refName);
        }

        ServiceRefType[] serviceRefs = annotatedWebAppDD.getServiceRefArray();
        for (int i = 0; i < serviceRefs.length; i++) {
            String refName = serviceRefs[i].getServiceRefName().getStringValue();
            webApp.addNewServiceRef().setServiceRefName(refName);
        }

        ResourceRefType[] resourceRefs = annotatedWebAppDD.getResourceRefArray();
        for (int i = 0; i < resourceRefs.length; i++) {
            String refName = resourceRefs[i].getResRefName().getStringValue();
            String refType = resourceRefs[i].getResType().getStringValue();
            if ("javax.sql.DataSource".equalsIgnoreCase(refType)) {
                jdbcPoolRefs.add(new ReferenceData(refName));
            } else if ("javax.jms.ConnectionFactory".equalsIgnoreCase(refType)
                    || "javax.jms.QueueConnectionFactory".equalsIgnoreCase(refType)
                    || "javax.jms.TopicConnectionFactory".equalsIgnoreCase(refType)) {
                jmsConnectionFactoryRefs.add(new ReferenceData(refName));
            } else if ("javax.mail.Session".equalsIgnoreCase(refType)) {
                javaMailSessionRefs.add(new ReferenceData(refName));
            }
        }

        ResourceEnvRefType[] resourceEnvRefs = annotatedWebAppDD.getResourceEnvRefArray();
        for (int i = 0; i < resourceEnvRefs.length; i++) {
            String refName = resourceEnvRefs[i].getResourceEnvRefName().getStringValue();
            GerResourceEnvRefType resourceEnvRef = webApp.addNewResourceEnvRef();
            resourceEnvRef.setRefName(refName);
            // resourceEnvRef.setMessageDestinationLink(refName);
        }
    }

    public void readReferencesData(PortletRequest request, GerWebAppType webApp) {
        dependenciesSet.clear();
        Map map = request.getParameterMap();
        int index = 0;
        while (true) {
            String prefix = "ejbRef" + "." + (index) + ".";
            if (!map.containsKey(prefix + REF_NAME)) {
                break;
            }
            String referenceLink = request.getParameter(prefix + REF_LINK);
            if (isEmpty(referenceLink)) {
                referenceNotResolved = true;
            }
            dependenciesSet.add(getDependencyString(referenceLink));
            webApp.getEjbRefArray(index).setPattern(createPattern(referenceLink));
            index++;
        }
        index = 0;
        while (true) {
            String prefix = "ejbLocalRef" + "." + (index) + ".";
            if (!map.containsKey(prefix + REF_NAME)) {
                break;
            }
            String referenceLink = request.getParameter(prefix + REF_LINK);
            if (isEmpty(referenceLink)) {
                referenceNotResolved = true;
            }
            dependenciesSet.add(getDependencyString(referenceLink));
            webApp.getEjbLocalRefArray(index).setPattern(createPattern(referenceLink));
            index++;
        }
        index = 0;
        while (true) {
            String prefix = "jmsDestinationRef" + "." + (index) + ".";
            if (!map.containsKey(prefix + REF_NAME)) {
                break;
            }
            String referenceLink = request.getParameter(prefix + REF_LINK);
            if (isEmpty(referenceLink)) {
                referenceNotResolved = true;
            }
            dependenciesSet.add(getDependencyString(referenceLink));
            webApp.getResourceEnvRefArray(index).setPattern(createPattern(referenceLink));
            index++;
        }
        readWebServiceRefsData(request, webApp);
        readParameters("jdbcPoolRef", jdbcPoolRefs, request);
        readParameters("jmsConnectionFactoryRef", jmsConnectionFactoryRefs, request);
        readParameters("javaMailSessionRef", javaMailSessionRefs, request);
    }

    public static String getDependencyString(String patternString) {
        String[] elements = patternString.split("/", 6);
        return elements[0] + "/" + elements[1] + "/" + elements[2] + "/" + elements[3];
    }

    public static GerPatternType createPattern(String patternString) {
        GerPatternType pattern = GerPatternType.Factory.newInstance();
        String[] elements = patternString.split("/", 6);
        if (!isEmpty(elements[0])) {
            pattern.setGroupId(elements[0]);
        }
        if (!isEmpty(elements[1])) {
            pattern.setArtifactId(elements[1]);
        }
        if (!isEmpty(elements[2])) {
            pattern.setVersion(elements[2]);
        }
        if (!isEmpty(elements[3])) {
            // pattern.setType(elements[3]);
        }
        if (!isEmpty(elements[4])) {
            pattern.setModule(elements[4]);
        }
        if (!isEmpty(elements[5])) {
            pattern.setName(elements[5]);
        }
        return pattern;
    }

    private void readParameters(String prefix1, List<ReferenceData> list, PortletRequest request) {
        Map map = request.getParameterMap();
        list.clear();
        int index = 0;
        while (true) {
            String prefix2 = prefix1 + "." + (index++) + ".";
            if (!map.containsKey(prefix2 + REF_NAME)) {
                break;
            }
            ReferenceData referenceData = new ReferenceData();
            referenceData.load(request, prefix2);
            String referenceLink = referenceData.getRefLink();
            if (isEmpty(referenceLink)) {
                referenceNotResolved = true;
            }
            dependenciesSet.add(getDependencyString(referenceLink));
            list.add(referenceData);
        }
    }

    public void readWebServiceRefsData(PortletRequest request, GerWebAppType webApp) {
        Map map = request.getParameterMap();
        for (int i = 0; i < webApp.getServiceRefArray().length; i++) {
            GerServiceRefType serviceRef = webApp.getServiceRefArray(i);
            for (int j = serviceRef.getPortArray().length - 1; j >= 0; j--) {
                serviceRef.removePort(j);
            }
            String prefix1 = "serviceRef" + "." + i + "." + "port" + ".";
            int lastIndex = Integer.parseInt(request.getParameter(prefix1 + "lastIndex"));
            for (int j = 0; j < lastIndex; j++) {
                String prefix2 = prefix1 + j + ".";
                if (!map.containsKey(prefix2 + "portName")) {
                    continue;
                }
                GerPortType port = serviceRef.addNewPort();
                String value = request.getParameter(prefix2 + "portName");
                if (!isEmpty(value)) {
                    port.setPortName(value);
                }
                value = request.getParameter(prefix2 + "protocol");
                if (!isEmpty(value)) {
                    port.setProtocol(value);
                }
                value = request.getParameter(prefix2 + "host");
                if (!isEmpty(value)) {
                    port.setHost(value);
                }
                value = request.getParameter(prefix2 + "port");
                if (!isEmpty(value)) {
                    int portValue = Integer.parseInt(value);
                    port.setPort(portValue);
                }
                value = request.getParameter(prefix2 + "uri");
                if (!isEmpty(value)) {
                    port.setUri(value);
                }
                value = request.getParameter(prefix2 + "credentialsName");
                if (!isEmpty(value)) {
                    port.setCredentialsName(value);
                }
            }
        }
    }

    public void storeResourceRefs(GerWebAppType webApp) {
        for (int i = webApp.getResourceRefArray().length - 1; i >= 0; i--) {
            webApp.removeResourceRef(i);
        }
        for (int i = 0; i < jdbcPoolRefs.size(); i++) {
            ReferenceData referenceData = (ReferenceData) jdbcPoolRefs.get(i);
            GerResourceRefType resourceRef = webApp.addNewResourceRef();
            resourceRef.setRefName(referenceData.getRefName());
            resourceRef.setPattern(createPattern(referenceData.getRefLink()));
        }
        for (int i = 0; i < jmsConnectionFactoryRefs.size(); i++) {
            ReferenceData referenceData = (ReferenceData) jmsConnectionFactoryRefs.get(i);
            GerResourceRefType resourceRef = webApp.addNewResourceRef();
            resourceRef.setRefName(referenceData.getRefName());
            resourceRef.setPattern(createPattern(referenceData.getRefLink()));
        }
        for (int i = 0; i < javaMailSessionRefs.size(); i++) {
            ReferenceData referenceData = (ReferenceData) javaMailSessionRefs.get(i);
            GerResourceRefType resourceRef = webApp.addNewResourceRef();
            resourceRef.setRefName(referenceData.getRefName());
            resourceRef.setPattern(createPattern(referenceData.getRefLink()));
        }
    }

    public List<ReferenceData> getJdbcPoolRefs() {
        return jdbcPoolRefs;
    }

    public List<ReferenceData> getJmsConnectionFactoryRefs() {
        return jmsConnectionFactoryRefs;
    }

    public List<ReferenceData> getJavaMailSessionRefs() {
        return javaMailSessionRefs;
    }

    public HashSet<String> getDependenciesSet() {
        return dependenciesSet;
    }

    public boolean isReferenceNotResolved() {
        return referenceNotResolved;
    }

    private static boolean isEmpty(String s) {
        return s == null || s.trim().equals("");
    }

    public static class ReferenceData {
        private String refName;

        private String refLink;

        public ReferenceData() {
        }

        public ReferenceData(String refName) {
            this.refName = refName;
        }

        public void load(PortletRequest request, String prefix) {
            refName = request.getParameter(prefix + REF_NAME);
            refLink = request.getParameter(prefix + REF_LINK);
        }

        public String getRefName() {
            return refName;
        }

        public void setRefName(String refName) {
            this.refName = refName;
        }

        public String getRefLink() {
            return refLink;
        }

        public void setRefLink(String refLink) {
            this.refLink = refLink;
        }
    }
}
TOP

Related Classes of org.apache.geronimo.console.configcreator.configData.JndiRefsConfigData$ReferenceData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.