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    
018    package org.apache.geronimo.connector.deployment.dconfigbean;
019    
020    import javax.enterprise.deploy.model.DDBean;
021    import javax.enterprise.deploy.model.XpathEvent;
022    import javax.enterprise.deploy.model.XpathListener;
023    
024    import org.apache.geronimo.deployment.plugin.XmlBeanSupport;
025    import org.apache.geronimo.xbeans.geronimo.GerConfigPropertySettingType;
026    import org.apache.xmlbeans.SchemaTypeLoader;
027    import org.apache.xmlbeans.XmlBeans;
028    
029    /**
030     * @version $Revision 1.0$  $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
031     */
032    public class ConfigPropertySettings extends XmlBeanSupport {
033        private final static SchemaTypeLoader SCHEMA_TYPE_LOADER = XmlBeans.getContextTypeLoader();
034        private String type;
035        private DDBean ddBean;
036        private XpathListener typeListener;
037        private XpathListener nameListener;
038    
039        public ConfigPropertySettings() {
040            super(null);
041        }
042    
043        void initialize(GerConfigPropertySettingType xmlObject, DDBean configPropertyBean) {
044            setXmlObject(xmlObject);
045            ddBean = configPropertyBean;
046            DDBean[] child = configPropertyBean.getChildBean("config-property-type");
047            if (child.length == 1) {
048                setConfigPropertyType(child[0]);
049            }
050            child = configPropertyBean.getChildBean("config-property-name");
051            if (child.length == 1) {
052                setConfigPropertyName(child[0]);
053            }
054            configPropertyBean.addXpathListener("config-property-type", typeListener = new XpathListener() {
055                public void fireXpathEvent(XpathEvent xpe) {
056                    if (xpe.isChangeEvent() || xpe.isAddEvent()) {
057                        setConfigPropertyType(xpe.getBean());
058                    } else if (xpe.isRemoveEvent()) {
059                        setConfigPropertyType((String) null);
060                    }
061                }
062            });
063            configPropertyBean.addXpathListener("config-property-name", nameListener = new XpathListener() {
064                public void fireXpathEvent(XpathEvent xpe) {
065                    if (xpe.isChangeEvent() || xpe.isAddEvent()) {
066                        setConfigPropertyName(xpe.getBean());
067                    } else if (xpe.isRemoveEvent()) {
068                        setConfigPropertyName((String) null);
069                    }
070                }
071            });
072        }
073    
074        boolean matches(DDBean target) {
075            return target.equals(ddBean);
076        }
077    
078        void dispose() {
079            if (ddBean != null) {
080                ddBean.removeXpathListener("config-property-type", typeListener);
081                ddBean.removeXpathListener("config-property-name", nameListener);
082            }
083            nameListener = null;
084            typeListener = null;
085            ddBean = null;
086        }
087    
088        GerConfigPropertySettingType getConfigPropertySetting() {
089            return (GerConfigPropertySettingType) getXmlObject();
090        }
091    
092        public String getConfigPropertyName() {
093            return getConfigPropertySetting().getName();
094        }
095    
096        private void setConfigPropertyName(DDBean configPropertyBean) {
097            if (configPropertyBean == null) {
098                setConfigPropertyName((String) null);
099            } else {
100                setConfigPropertyName(configPropertyBean.getText());
101            }
102        }
103    
104        private void setConfigPropertyName(String name) {
105            String old = getConfigPropertyName();
106            getConfigPropertySetting().setName(name);
107            pcs.firePropertyChange("configPropertyName", old, name);
108        }
109    
110        public String getConfigPropertyType() {
111            return type;
112        }
113    
114        private void setConfigPropertyType(DDBean configPropertyBean) {
115            if (configPropertyBean == null) {
116                setConfigPropertyType((String) null);
117            } else {
118                setConfigPropertyType(configPropertyBean.getText());
119            }
120        }
121    
122        private void setConfigPropertyType(String type) {
123            String old = getConfigPropertyType();
124            this.type = type;
125            pcs.firePropertyChange("configPropertyType", old, type);
126        }
127    
128        public String getConfigPropertyValue() {
129            return getConfigPropertySetting().getStringValue();
130        }
131    
132        public void setConfigPropertyValue(String configPropertyValue) {
133            String old = getConfigPropertyValue();
134            getConfigPropertySetting().setStringValue(configPropertyValue);
135            pcs.firePropertyChange("configPropertyValue", old, configPropertyValue);
136        }
137    
138        public String toString() {
139            return "Property "+getConfigPropertyName();
140        }
141    }