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: */package org.apache.geronimo.connector.deployment.jsr88;
017:
018: import org.apache.geronimo.deployment.plugin.DConfigBeanSupport;
019: import org.apache.geronimo.xbeans.geronimo.GerAdminobjectType;
020: import org.apache.geronimo.xbeans.geronimo.GerAdminobjectInstanceType;
021: import org.apache.xmlbeans.SchemaTypeLoader;
022:
023: import javax.enterprise.deploy.model.DDBean;
024:
025: /**
026: * Represents /connector/adminobject in a Geronimo Connector deployment plan.
027: * Corresponds to /connector/resourceadapter/adminobject in the J2EE deployment plan.
028: * Note that in an arbitrary Geronimo connector plan, there can be multiple
029: * adminobject entries per adminobject from the J2EE plan. When we load such
030: * a plan, we combine all the adminobject-instances from those adminobjects
031: * into a single Geronimo adminobject per J2EE adminobject, so if we write it
032: * out again it'll be a little different, but that way this can be a DConfigBean
033: * instead of a POJO (the loading code is in ConnectorDCB).
034: *
035: * @version $Rev: 476049 $ $Date: 2006-11-16 20:35:17 -0800 (Thu, 16 Nov 2006) $
036: */
037: public class AdminObjectDCB extends DConfigBeanSupport {
038: private AdminObjectInstance[] adminObjectInstance = new AdminObjectInstance[0];
039:
040: public AdminObjectDCB(DDBean adminobjectDDBean,
041: final GerAdminobjectType adminobject) {
042: super (adminobjectDDBean, adminobject);
043: //todo: listen for property changes on the admin object
044: configure(adminobjectDDBean, adminobject);
045: }
046:
047: private void configure(DDBean adminDDBean,
048: GerAdminobjectType adminXml) {
049: adminXml.setAdminobjectClass(adminDDBean
050: .getText("adminobject-class")[0]);
051: adminXml.setAdminobjectInterface(adminDDBean
052: .getText("adminobject-interface")[0]);
053: GerAdminobjectInstanceType[] xmls = adminXml
054: .getAdminobjectInstanceArray();
055: adminObjectInstance = new AdminObjectInstance[xmls.length];
056: for (int i = 0; i < xmls.length; i++) {
057: adminObjectInstance[i] = new AdminObjectInstance(
058: adminDDBean, xmls[i]);
059: }
060: }
061:
062: GerAdminobjectType getAdminObject() {
063: return (GerAdminobjectType) getXmlObject();
064: }
065:
066: void addAdminObjectInstance(GerAdminobjectInstanceType xml) {
067: AdminObjectInstance instance = new AdminObjectInstance(
068: getDDBean(), xml);
069: AdminObjectInstance[] result = new AdminObjectInstance[adminObjectInstance.length + 1];
070: System.arraycopy(adminObjectInstance, 0, result, 0,
071: adminObjectInstance.length);
072: result[adminObjectInstance.length] = instance;
073: setAdminObjectInstance(result);
074: }
075:
076: // ----------------------- JavaBean Properties for /adminobject ----------------------
077:
078: public String getAdminObjectInterface() {
079: return getAdminObject().getAdminobjectInterface();
080: }
081:
082: public String getAdminObjectClass() {
083: return getAdminObject().getAdminobjectClass();
084: }
085:
086: public AdminObjectInstance[] getAdminObjectInstance() {
087: return adminObjectInstance;
088: }
089:
090: public void setAdminObjectInstance(
091: AdminObjectInstance[] adminObjectInstance) {
092: AdminObjectInstance[] old = getAdminObjectInstance();
093: //todo: whack all the old ones
094: for (int i = 0; i < adminObjectInstance.length; i++) {
095: AdminObjectInstance instance = adminObjectInstance[i];
096: if (instance.getAdminInstance() == null) {
097: instance.configure(getDDBean(), getAdminObject()
098: .addNewAdminobjectInstance());
099: }
100: }
101: this .adminObjectInstance = adminObjectInstance;
102: pcs.firePropertyChange("adminObjectInstance", old,
103: adminObjectInstance);
104: }
105:
106: public AdminObjectInstance getAdminObjectInstance(int index) {
107: return adminObjectInstance[index];
108: }
109:
110: public void setAdminObjectInstance(int index,
111: AdminObjectInstance adminObjectInstance) {
112: AdminObjectInstance[] old = getAdminObjectInstance();
113: //todo: whack the old one
114: if (adminObjectInstance.getAdminInstance() == null) {
115: adminObjectInstance.configure(getDDBean(), getAdminObject()
116: .addNewAdminobjectInstance());
117: }
118: this .adminObjectInstance[index] = adminObjectInstance;
119: //todo: deep copy of array for "old"
120: pcs.firePropertyChange("adminObjectInstance", old,
121: adminObjectInstance);
122: }
123:
124: // ----------------------- End of JavaBean Properties ----------------------
125:
126: protected SchemaTypeLoader getSchemaTypeLoader() {
127: return Connector15DCBRoot.SCHEMA_TYPE_LOADER;
128: }
129: }
|