View Javadoc

1   /**
2    *  Licensed to the Apache Software Foundation (ASF) under one or more
3    *  contributor license agreements.  See the NOTICE file distributed with
4    *  this work for additional information regarding copyright ownership.
5    *  The ASF licenses this file to You under the Apache License, Version 2.0
6    *  (the "License"); you may not use this file except in compliance with
7    *  the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.deployment.service.jsr88;
18  
19  import java.util.Set;
20  import java.util.HashSet;
21  import java.util.Iterator;
22  import org.apache.geronimo.deployment.plugin.XmlBeanSupport;
23  import org.apache.geronimo.deployment.xbeans.DependenciesType;
24  import org.apache.geronimo.deployment.xbeans.EnvironmentType;
25  import org.apache.geronimo.deployment.xbeans.ArtifactType;
26  import org.apache.xmlbeans.SchemaTypeLoader;
27  import org.apache.xmlbeans.XmlBeans;
28  
29  /**
30   * Represents an environmentType (e.g. an environment element) in a Geronimo
31   * deployment plan.
32   *
33   * @version $Rev: 470597 $ $Date: 2006-11-02 15:30:55 -0800 (Thu, 02 Nov 2006) $
34   */
35  public class EnvironmentData extends XmlBeanSupport {
36      static final SchemaTypeLoader SCHEMA_TYPE_LOADER = XmlBeans.typeLoaderForClassLoader(EnvironmentType.class.getClassLoader());
37  
38      private Artifact configId;
39      private Artifact[] dependencies = new Artifact[0];
40  
41      public EnvironmentData() {
42          super(null);
43      }
44  
45      public EnvironmentData(EnvironmentType dependency) {
46          super(null);
47          configure(dependency);
48      }
49  
50      protected EnvironmentType getEnvironmentType() {
51          return (EnvironmentType) getXmlObject();
52      }
53  
54      public void configure(EnvironmentType env) {
55          setXmlObject(env);
56          if(env.isSetModuleId()) {
57              configId = new Artifact(env.getModuleId());
58          }
59          if(env.isSetDependencies()) {
60              DependenciesType deps = env.getDependencies();
61              dependencies = new Artifact[deps.getDependencyArray().length];
62              for (int i = 0; i < dependencies.length; i++) {
63                  dependencies[i] = new Artifact(deps.getDependencyArray(i));
64              }
65          }
66      }
67  
68      // ----------------------- JavaBean Properties for environmentType ----------------------
69  
70      public Artifact getConfigId() {
71          return configId;
72      }
73  
74      public void setConfigId(Artifact configId) {
75          Artifact old = this.configId;
76          this.configId = configId;
77          if((old == null && configId == null) || (old != null&& old == configId)) {
78              return;
79          }
80          if(old != null) {
81              getEnvironmentType().unsetModuleId();
82          }
83          if(configId != null) {
84              configId.configure(getEnvironmentType().addNewModuleId());
85          }
86          pcs.firePropertyChange("moduleId", old, configId);
87      }
88  
89      public Artifact[] getDependencies() {
90          return dependencies;
91      }
92  
93      public void setDependencies(Artifact[] dependencies) {
94          Artifact[] old = this.dependencies;
95          Set before = new HashSet();
96          for (int i = 0; i < old.length; i++) {
97              before.add(old[i]);
98          }
99          this.dependencies = dependencies;
100         // Handle current or new dependencies
101         for (int i = 0; i < dependencies.length; i++) {
102             Artifact dep = dependencies[i];
103             if(dep.getArtifactType() == null) {
104                 if(!getEnvironmentType().isSetDependencies()) {
105                     getEnvironmentType().addNewDependencies();
106                 }
107                 dep.configure(getEnvironmentType().getDependencies().addNewDependency());
108             } else {
109                 before.remove(dep);
110             }
111         }
112         // Handle removed or new dependencies
113         for (Iterator it = before.iterator(); it.hasNext();) {
114             Artifact adapter = (Artifact) it.next();
115             ArtifactType all[] = getEnvironmentType().getDependencies().getDependencyArray();
116             for (int i = 0; i < all.length; i++) {
117                 if(all[i] == adapter) {
118                     getEnvironmentType().getDependencies().removeDependency(i);
119                     break;
120                 }
121             }
122         }
123         if(getEnvironmentType().isSetDependencies() && getEnvironmentType().getDependencies().getDependencyArray().length == 0) {
124             getEnvironmentType().unsetDependencies();
125         }
126         pcs.firePropertyChange("dependencies", old, dependencies);
127     }
128 
129     public String[] getHiddenClasses() {
130         return getEnvironmentType().getHiddenClasses().getFilterArray();
131     }
132 
133     public void setHiddenClasses(String[] hidden) {
134         String[] old = getEnvironmentType().isSetHiddenClasses() ? getEnvironmentType().getHiddenClasses().getFilterArray() : null;
135         if(!getEnvironmentType().isSetHiddenClasses()) {
136             getEnvironmentType().addNewHiddenClasses();
137         }
138         getEnvironmentType().getHiddenClasses().setFilterArray(hidden);
139         pcs.firePropertyChange("hiddenClasses", old, hidden);
140     }
141 
142     public String[] getNonOverridableClasses() {
143         return getEnvironmentType().getNonOverridableClasses().getFilterArray();
144     }
145 
146     public void setNonOverridableClasses(String[] fixed) {
147         String[] old = getEnvironmentType().isSetNonOverridableClasses() ? getEnvironmentType().getNonOverridableClasses().getFilterArray() : null;
148         if(!getEnvironmentType().isSetNonOverridableClasses()) {
149             getEnvironmentType().addNewNonOverridableClasses();
150         }
151         getEnvironmentType().getNonOverridableClasses().setFilterArray(fixed);
152         pcs.firePropertyChange("nonOverridableClasses", old, fixed);
153     }
154 
155     public boolean isInverseClassLoading() {
156         return getEnvironmentType().isSetInverseClassloading();
157     }
158 
159     public void setInverseClassLoading(boolean inverse) {
160         boolean old = isInverseClassLoading();
161         if(!inverse) {
162             if(old) {
163                 getEnvironmentType().unsetInverseClassloading();
164             }
165         } else {
166             if(!old) {
167                 getEnvironmentType().addNewInverseClassloading();
168             }
169         }
170         pcs.firePropertyChange("inverseClassLoading", old, inverse);
171     }
172 
173     public boolean isSuppressDefaultEnvironment() {
174         return getEnvironmentType().isSetSuppressDefaultEnvironment();
175     }
176 
177     public void setSuppressDefaultEnvironment(boolean suppress) {
178         boolean old = isSuppressDefaultEnvironment();
179         if(!suppress) {
180             if(old) {
181                 getEnvironmentType().unsetSuppressDefaultEnvironment();
182             }
183         } else {
184             if(!old) {
185                 getEnvironmentType().addNewSuppressDefaultEnvironment();
186             }
187         }
188         pcs.firePropertyChange("suppressDefaultEnvironment", old, suppress);
189     }
190 
191     // ----------------------- End of JavaBean Properties ----------------------
192 
193     protected SchemaTypeLoader getSchemaTypeLoader() {
194         return SCHEMA_TYPE_LOADER;
195     }
196 }