Package org.apache.geronimo.connector.deployment.jsr88

Source Code of org.apache.geronimo.connector.deployment.jsr88.ResourceAdapter

/**
*  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.connector.deployment.jsr88;

import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import javax.enterprise.deploy.model.DDBean;
import org.apache.geronimo.deployment.dconfigbean.XmlBeanSupport;
import org.apache.geronimo.xbeans.connector.GerResourceadapterType;
import org.apache.geronimo.xbeans.connector.GerOutboundResourceadapterType;
import org.apache.geronimo.xbeans.connector.GerConnectionDefinitionType;
import org.apache.xmlbeans.SchemaTypeLoader;

/**
* Represents /connector/resourceadapter in the Geronimo Connector deployment plan.
* Note: is not a DConfigBean, because there may be more than one ResourceAdapter
* in the Geronimo plan per ResourceAdapter in the J2EE deployment descriptor.
*
* @version $Rev: 835025 $ $Date: 2009-11-11 14:25:20 -0500 (Wed, 11 Nov 2009) $
*/
public class ResourceAdapter extends XmlBeanSupport {
    private DDBean resourceAdapter;
    private ConnectionDefinition[] instances = new ConnectionDefinition[0];
    private ResourceAdapterInstance resourceAdapterInstance;

    public ResourceAdapter() {
        super(null);
    }

    public ResourceAdapter(DDBean resourceAdapter, GerResourceadapterType ra) {
        super(null);
        configure(resourceAdapter, ra);
    }

    protected GerResourceadapterType getResourceAdapter() {
        return (GerResourceadapterType)getXmlObject();
    }

    void configure(DDBean resourceAdapter, GerResourceadapterType ra) {
        this.resourceAdapter = resourceAdapter;
        setXmlObject(ra);
        if(ra.isSetResourceadapterInstance()) {
            resourceAdapterInstance = new ResourceAdapterInstance(resourceAdapter, ra.getResourceadapterInstance());
        } else {
            resourceAdapterInstance = null;
        }
        if(ra.isSetOutboundResourceadapter()) {
            DDBean[] test = resourceAdapter.getChildBean("outbound-resourceadapter");
            if(test != null && test.length > 0) {
                GerOutboundResourceadapterType outbound = ra.getOutboundResourceadapter();
                GerConnectionDefinitionType[] defs = outbound.getConnectionDefinitionArray();
                if(defs != null) {
                    instances = new ConnectionDefinition[defs.length];
                    for (int i = 0; i < defs.length; i++) {
                        GerConnectionDefinitionType def = defs[i];
                        instances[i] = new ConnectionDefinition(resourceAdapter, def);
                    }
                }
            } else {
                //todo: clean up the Geronimo deployment info since there's no J2EE outbound RA
            }
        }
    }

    // ----------------------- JavaBean Properties for /connector/resourceadapter ----------------------

    public ConnectionDefinition[] getConnectionDefinition() {
        return instances;
    }

    public ConnectionDefinition getConnectionDefinition(int index) {
        return instances[index];
    }

    public void setConnectionDefinition(ConnectionDefinition[] definitions) {
        ConnectionDefinition[] old = getConnectionDefinition();

        if(definitions != null && definitions.length > 0) {
            if(!getResourceAdapter().isSetOutboundResourceadapter()) {
                getResourceAdapter().addNewOutboundResourceadapter();
            }
        } else {
            if(getResourceAdapter().isSetOutboundResourceadapter()) {
                getResourceAdapter().unsetOutboundResourceadapter();
            }
        }
        Set before = new HashSet();
        for (int i = 0; i < old.length; i++) {
            before.add(old[i]);
        }
        instances = definitions;
        // Handle current or new definitions
        for (int i = 0; i < definitions.length; i++) {
            ConnectionDefinition definition = definitions[i];
            if(definition.getConnectionDefinition() == null) {
                definition.configure(resourceAdapter, getResourceAdapter().getOutboundResourceadapter().addNewConnectionDefinition());
            } else {
                before.remove(definition);
            }
        }
        // Handle removed definitions
        for (Iterator it = before.iterator(); it.hasNext();) {
            ConnectionDefinition definition = (ConnectionDefinition) it.next();
            GerConnectionDefinitionType all[] = getResourceAdapter().isSetOutboundResourceadapter() ? getResourceAdapter().getOutboundResourceadapter().getConnectionDefinitionArray() : new GerConnectionDefinitionType[0];
            for (int i = 0; i < all.length; i++) {
                if(all[i] == definition) {
                    getResourceAdapter().getOutboundResourceadapter().removeConnectionDefinition(i);
                    break;
                }
            }
        }
        pcs.firePropertyChange("connectionDefinition", old, instances);
    }

    public void setConnectionDefinition(int index, ConnectionDefinition definition) {
        ConnectionDefinition[] old = instances;
        instances[index] = definition;
        if(definition.getConnectionDefinition() == null) {
            definition.configure(resourceAdapter, getResourceAdapter().getOutboundResourceadapter().addNewConnectionDefinition());
        }
        pcs.firePropertyChange("connectionDefinition", old, instances);
    }

    public ResourceAdapterInstance getResourceAdapterInstance() {
        return resourceAdapterInstance;
    }

    public void setResourceAdapterInstance(ResourceAdapterInstance resourceAdapterInstance) {
        ResourceAdapterInstance old = this.resourceAdapterInstance;
        this.resourceAdapterInstance = resourceAdapterInstance;
        if(resourceAdapterInstance.getResourceAdapterInstance() == null) {
            if(getResourceAdapter().isSetResourceadapterInstance()) {
                resourceAdapterInstance.configure(resourceAdapter, getResourceAdapter().getResourceadapterInstance());
            } else {
                resourceAdapterInstance.configure(resourceAdapter, getResourceAdapter().addNewResourceadapterInstance());
            }
        }
        pcs.firePropertyChange("resourceAdapterInstance", old, instances);
    }

    // ----------------------- End of JavaBean Properties ----------------------

    protected SchemaTypeLoader getSchemaTypeLoader() {
        return Connector15DCBRoot.SCHEMA_TYPE_LOADER;
    }
}
TOP

Related Classes of org.apache.geronimo.connector.deployment.jsr88.ResourceAdapter

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.