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.web.deployment;
019
020 import java.util.HashSet;
021 import java.util.Iterator;
022 import java.util.Set;
023
024 import javax.enterprise.deploy.model.DDBean;
025 import javax.enterprise.deploy.spi.DConfigBean;
026 import javax.enterprise.deploy.spi.exceptions.BeanNotFoundException;
027 import javax.enterprise.deploy.spi.exceptions.ConfigurationException;
028
029 import org.apache.geronimo.deployment.plugin.DConfigBeanSupport;
030 import org.apache.geronimo.deployment.service.jsr88.EnvironmentData;
031 import org.apache.geronimo.naming.deployment.ENCHelper;
032 import org.apache.geronimo.naming.deployment.jsr88.EjbLocalRef;
033 import org.apache.geronimo.naming.deployment.jsr88.EjbRef;
034 import org.apache.geronimo.naming.deployment.jsr88.MessageDestination;
035 import org.apache.geronimo.naming.deployment.jsr88.ResourceEnvRef;
036 import org.apache.geronimo.naming.deployment.jsr88.ResourceRef;
037 import org.apache.geronimo.xbeans.geronimo.j2ee.GerAbstractSecurityType;
038 import org.apache.geronimo.xbeans.geronimo.naming.GerEjbLocalRefType;
039 import org.apache.geronimo.xbeans.geronimo.naming.GerEjbRefType;
040 import org.apache.geronimo.xbeans.geronimo.naming.GerMessageDestinationType;
041 import org.apache.geronimo.xbeans.geronimo.naming.GerResourceEnvRefType;
042 import org.apache.geronimo.xbeans.geronimo.naming.GerResourceRefType;
043 import org.apache.geronimo.xbeans.geronimo.naming.GerServiceRefType;
044 import org.apache.geronimo.xbeans.geronimo.web.GerWebAppType;
045 import org.apache.xmlbeans.SchemaTypeLoader;
046
047 /**
048 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
049 */
050 public class WebAppDConfigBean extends DConfigBeanSupport {
051 private final ENCHelper encHelper;
052 private EnvironmentData environment;
053 private EjbRef[] ejbRefs = new EjbRef[0];
054 private EjbLocalRef[] ejbLocalRefs = new EjbLocalRef[0];
055 private ResourceRef[] resourceRefs = new ResourceRef[0];
056 private ResourceEnvRef[] resourceEnvRefs = new ResourceEnvRef[0];
057 private MessageDestination[] messageDestinations = new MessageDestination[0];
058
059 WebAppDConfigBean(DDBean ddBean, GerWebAppType webApp) {
060 super(ddBean, webApp);
061
062 ENCHelper.XmlEnvRefs envRefs = new ENCHelper.XmlEnvRefs(webApp.getEjbRefArray(), webApp.getEjbLocalRefArray(), webApp.getResourceRefArray(), webApp.getResourceEnvRefArray());
063
064 //which version are we dealing with?
065 String version = ddBean.getRoot().getAttributeValue("version");
066 if ("2.4".equals(version)) {
067 encHelper = new ENCHelper(ddBean, envRefs, getXPathsForJ2ee_1_4(ENCHelper.ENC_XPATHS), getXPathsForJ2ee_1_4(ENCHelper.NAME_XPATHS));
068 } else {
069 encHelper = new ENCHelper(ddBean, envRefs, getXPathsWithPrefix(null, ENCHelper.ENC_XPATHS), getXPathsWithPrefix(null, ENCHelper.NAME_XPATHS));
070 }
071
072 }
073
074 GerWebAppType getWebApp() {
075 return (GerWebAppType) getXmlObject();
076 }
077
078 public String getContextRoot() {
079 return getWebApp().getContextRoot();
080 }
081
082 public void setContextRoot(String contextRoot) {
083 pcs.firePropertyChange("contextRoot", getContextRoot(), contextRoot);
084 getWebApp().setContextRoot(contextRoot);
085 }
086
087 public DConfigBean getDConfigBean(DDBean ddBean) throws ConfigurationException {
088 return encHelper.getDConfigBean(ddBean);
089 }
090
091 public void removeDConfigBean(DConfigBean dcBean) throws BeanNotFoundException {
092 encHelper.removeDConfigBean(dcBean);
093 }
094
095 public String[] getXpaths() {
096 return getXPathsForJ2ee_1_4(ENCHelper.ENC_XPATHS);
097 }
098
099 protected SchemaTypeLoader getSchemaTypeLoader() {
100 return WebAppDConfigRoot.SCHEMA_TYPE_LOADER;
101 }
102
103 // ----------------------- JavaBean Properties for web-app ----------------------
104
105 public EnvironmentData getEnvironment() {
106 return environment;
107 }
108
109 public void setEnvironment(EnvironmentData environment) {
110 EnvironmentData old = this.environment;
111 this.environment = environment;
112 if ((old == null && environment == null) || (old != null && old == environment)) {
113 return;
114 }
115 if (old != null) {
116 getWebApp().unsetEnvironment();
117 }
118 if (environment != null) {
119 environment.configure(getWebApp().addNewEnvironment());
120 }
121 pcs.firePropertyChange("environment", old, environment);
122 }
123
124 public EjbRef[] getEjbRefs() {
125 return ejbRefs;
126 }
127
128 public void setEjbRefs(EjbRef[] ejbRefs) {
129 EjbRef[] old = this.ejbRefs;
130 Set before = new HashSet();
131 for (int i = 0; i < old.length; i++) {
132 before.add(old[i]);
133 }
134 this.ejbRefs = ejbRefs;
135 // Handle current or new ejbRefs
136 for (int i = 0; i < ejbRefs.length; i++) {
137 EjbRef ejbRef = ejbRefs[i];
138 //if(ejbRef.getEjbRef() == null) {
139 ejbRef.configure(getWebApp().addNewEjbRef());
140 //} else {
141 // before.remove(ejbRef);
142 //}
143 }
144 // Handle removed or new ejbRefs
145 for (Iterator it = before.iterator(); it.hasNext();) {
146 EjbRef adapter = (EjbRef) it.next();
147 GerEjbRefType all[] = getWebApp().getEjbRefArray();
148 for (int i = 0; i < all.length; i++) {
149 if(all[i] == adapter) {
150 getWebApp().removeEjbRef(i);
151 break;
152 }
153 }
154 }
155 pcs.firePropertyChange("ejb-ref", old, ejbRefs);
156 }
157
158 public EjbLocalRef[] getEjbLocalRefs() {
159 return ejbLocalRefs;
160 }
161
162 public void setEjbLocalRefs(EjbLocalRef[] ejbLocalRefs) {
163 EjbLocalRef[] old = this.ejbLocalRefs;
164 Set before = new HashSet();
165 for (int i = 0; i < old.length; i++) {
166 before.add(old[i]);
167 }
168 this.ejbLocalRefs = ejbLocalRefs;
169 // Handle current or new ejbLocalRefs
170 for (int i = 0; i < ejbLocalRefs.length; i++) {
171 EjbLocalRef ejbLocalRef = ejbLocalRefs[i];
172 //if(ejbLocalRef.getEjbLocalRef() == null) {
173 ejbLocalRef.configure(getWebApp().addNewEjbLocalRef());
174 //} else {
175 // before.remove(ejbLocalRef);
176 //}
177 }
178 // Handle removed or new ejbLocalRefs
179 for (Iterator it = before.iterator(); it.hasNext();) {
180 EjbLocalRef adapter = (EjbLocalRef) it.next();
181 GerEjbLocalRefType all[] = getWebApp().getEjbLocalRefArray();
182 for (int i = 0; i < all.length; i++) {
183 if(all[i] == adapter) {
184 getWebApp().removeEjbLocalRef(i);
185 break;
186 }
187 }
188 }
189 pcs.firePropertyChange("ejb-local-ref", old, ejbLocalRefs);
190 }
191
192 public ResourceRef[] getResourceRefs() {
193 return resourceRefs;
194 }
195
196 public void setResourceRefs(ResourceRef[] resourceRefs) {
197 ResourceRef[] old = this.resourceRefs;
198 Set before = new HashSet();
199 for (int i = 0; i < old.length; i++) {
200 before.add(old[i]);
201 }
202 this.resourceRefs = resourceRefs;
203 // Handle current or new resourceRefs
204 for (int i = 0; i < resourceRefs.length; i++) {
205 ResourceRef resourceRef = resourceRefs[i];
206 //if(resourceRef.getResourceRef() == null) {
207 resourceRef.configure(getWebApp().addNewResourceRef());
208 //} else {
209 // before.remove(resourceRef);
210 //}
211 }
212 // Handle removed or new resourceRefs
213 for (Iterator it = before.iterator(); it.hasNext();) {
214 ResourceRef adapter = (ResourceRef) it.next();
215 GerResourceRefType all[] = getWebApp().getResourceRefArray();
216 for (int i = 0; i < all.length; i++) {
217 if(all[i] == adapter) {
218 getWebApp().removeResourceRef(i);
219 break;
220 }
221 }
222 }
223 pcs.firePropertyChange("resource-ref", old, resourceRefs);
224 }
225
226 public ResourceEnvRef[] getResourceEnvRefs() {
227 return resourceEnvRefs;
228 }
229
230 public void setResourceEnvRefs(ResourceEnvRef[] resourceEnvRefs) {
231 ResourceEnvRef[] old = this.resourceEnvRefs;
232 Set before = new HashSet();
233 for (int i = 0; i < old.length; i++) {
234 before.add(old[i]);
235 }
236 this.resourceEnvRefs = resourceEnvRefs;
237 // Handle current or new resourceEnvRefs
238 for (int i = 0; i < resourceEnvRefs.length; i++) {
239 ResourceEnvRef resourceEnvRef = resourceEnvRefs[i];
240 //if(resourceEnvRef.getResourceEnvRef() == null) {
241 resourceEnvRef.configure(getWebApp().addNewResourceEnvRef());
242 //} else {
243 // before.remove(resourceEnvRef);
244 //}
245 }
246 // Handle removed or new resourceEnvRefs
247 for (Iterator it = before.iterator(); it.hasNext();) {
248 ResourceEnvRef adapter = (ResourceEnvRef) it.next();
249 GerResourceEnvRefType all[] = getWebApp().getResourceEnvRefArray();
250 for (int i = 0; i < all.length; i++) {
251 if(all[i] == adapter) {
252 getWebApp().removeResourceEnvRef(i);
253 break;
254 }
255 }
256 }
257 pcs.firePropertyChange("resource-env-ref", old, resourceEnvRefs);
258 }
259
260 public MessageDestination[] getMessageDestinations() {
261 return messageDestinations;
262 }
263
264 public void setMessageDestinations(MessageDestination[] messageDestinations) {
265 MessageDestination[] old = this.messageDestinations;
266 Set before = new HashSet();
267 for (int i = 0; i < old.length; i++) {
268 before.add(old[i]);
269 }
270 this.messageDestinations = messageDestinations;
271 // Handle current or new messageDestinations
272 for (int i = 0; i < messageDestinations.length; i++) {
273 MessageDestination messageDestination = messageDestinations[i];
274 //if(messageDestination.getMessageDestination() == null) {
275 messageDestination.configure(getWebApp().addNewMessageDestination());
276 //} else {
277 // before.remove(messageDestination);
278 //}
279 }
280 // Handle removed or new messageDestinations
281 for (Iterator it = before.iterator(); it.hasNext();) {
282 MessageDestination adapter = (MessageDestination) it.next();
283 GerMessageDestinationType all[] = getWebApp().getMessageDestinationArray();
284 for (int i = 0; i < all.length; i++) {
285 if(all[i] == adapter) {
286 getWebApp().removeMessageDestination(i);
287 break;
288 }
289 }
290 }
291 pcs.firePropertyChange("message-destination", old, messageDestinations);
292 }
293
294 public String getSecurityRealmName() {
295 return getWebApp().getSecurityRealmName();
296 }
297
298 public void setSecurityRealmName(String securityRealmName) {
299 pcs.firePropertyChange("securityRealmName", getSecurityRealmName(), securityRealmName);
300 getWebApp().setSecurityRealmName(securityRealmName);
301 }
302
303 //TODO Method to be updated once DConfigBean for "security" is available
304 public GerAbstractSecurityType getSecurity() {
305 return getWebApp().getSecurity();
306 }
307
308 //TODO Method to be updated once DConfigBean for "security" is available
309 public void setSecurity(GerAbstractSecurityType security) {
310 pcs.firePropertyChange("security", getSecurity(), security);
311 getWebApp().setSecurity(security);
312 }
313
314 //TODO Method to be updated once DConfigBean for "service-ref" is available
315 public GerServiceRefType[] getServiceRefs() {
316 return getWebApp().getServiceRefArray();
317 }
318
319 //TODO Method to be updated once DConfigBean for "service-ref" is available
320 public void setServiceRefs(GerServiceRefType[] serviceRefArray){
321 pcs.firePropertyChange("service-ref", getServiceRefs(), serviceRefArray);
322 getWebApp().setServiceRefArray(serviceRefArray);
323 }
324 // ----------------------- End of JavaBean Properties ----------------------
325 }