/* * JBoss, Home of Professional Open Source. * Copyright 2009, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.switchboard.jbmeta.javaee.environment; import java.util.ArrayList; import java.util.Collection; import org.jboss.metadata.javaee.jboss.JBossServiceReferenceMetaData; import org.jboss.metadata.javaee.spec.AnnotatedEJBReferenceMetaData; import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData; import org.jboss.metadata.javaee.spec.DataSourceMetaData; import org.jboss.metadata.javaee.spec.DataSourcesMetaData; import org.jboss.metadata.javaee.spec.EJBLocalReferenceMetaData; import org.jboss.metadata.javaee.spec.EJBLocalReferencesMetaData; import org.jboss.metadata.javaee.spec.EJBReferenceMetaData; import org.jboss.metadata.javaee.spec.EJBReferencesMetaData; import org.jboss.metadata.javaee.spec.Environment; import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData; import org.jboss.metadata.javaee.spec.EnvironmentEntryMetaData; import org.jboss.metadata.javaee.spec.MessageDestinationReferenceMetaData; import org.jboss.metadata.javaee.spec.MessageDestinationReferencesMetaData; import org.jboss.metadata.javaee.spec.PersistenceContextReferenceMetaData; import org.jboss.metadata.javaee.spec.PersistenceContextReferencesMetaData; import org.jboss.metadata.javaee.spec.PersistenceUnitReferenceMetaData; import org.jboss.metadata.javaee.spec.PersistenceUnitReferencesMetaData; import org.jboss.metadata.javaee.spec.ResourceEnvironmentReferenceMetaData; import org.jboss.metadata.javaee.spec.ResourceEnvironmentReferencesMetaData; import org.jboss.metadata.javaee.spec.ResourceReferenceMetaData; import org.jboss.metadata.javaee.spec.ResourceReferencesMetaData; import org.jboss.metadata.javaee.spec.ServiceReferenceMetaData; import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData; import org.jboss.switchboard.jbmeta.javaee.jboss.environment.JBossResourceEnvReference; import org.jboss.switchboard.jbmeta.javaee.jboss.environment.JBossResourceReference; import org.jboss.switchboard.jbmeta.javaee.jboss.environment.JBossServiceReference; import org.jboss.switchboard.spi.EnvironmentEntryType; import org.jboss.switchboard.spi.JndiEnvironment; /** * JndiEnvironmentMetadata * * @author Jaikiran Pai * @version $Revision: $ */ public class JndiEnvironmentMetadata implements JndiEnvironment { private Environment delegate; private Collection<EnvironmentEntryType> environmentEntries; public JndiEnvironmentMetadata(Environment environment) { if (environment == null) { throw new IllegalArgumentException("Cannot create " + this.getClass().getName() + " from a null " + Environment.class); } this.delegate = environment; this.initEnvironmentReferences(); } @Override public Collection<EnvironmentEntryType> getEntries() { return this.environmentEntries; } @Override public void addEntry(EnvironmentEntryType entry) { if (entry == null) { throw new IllegalArgumentException("Cannot add null environment entry"); } if (this.environmentEntries == null) { this.environmentEntries = new ArrayList<EnvironmentEntryType>(); } this.environmentEntries.add(entry); } private void initEnvironmentReferences() { this.environmentEntries = new ArrayList<EnvironmentEntryType>(); // simple env entry references EnvironmentEntriesMetaData envEntries = this.delegate.getEnvironmentEntries(); if (envEntries != null) { for (EnvironmentEntryMetaData envEntry : envEntries) { // According to Java EE6 Spec, section EE.5.4.1.3, // The container must only inject a value for this resource if the deployer has specified a // value to override the default value. The env-entry-value element in the deployment descriptor // is optional when an injection target is specified. If the element is *not* specified, no value // will be injected. In addition, if the element is not specified, the named resource is not // initialized in the naming context; explicit lookups of the named resource will fail. // so create a EnvEntry only if a env-entry-value is specified or a lookup-name is specified if (envEntry.getValue() != null || envEntry.getLookupName() != null) { this.environmentEntries.add(new EnvEntry(envEntry)); } } } // annotated ejb references AnnotatedEJBReferencesMetaData annotatedEjbRefs = this.delegate.getAnnotatedEjbReferences(); if (annotatedEjbRefs != null) { for (AnnotatedEJBReferenceMetaData annotatedEjbRef : annotatedEjbRefs) { this.environmentEntries.add(new AnnotatedEJBReference(annotatedEjbRef)); } } // ejb local references EJBLocalReferencesMetaData ejbLocalRefs = this.delegate.getEjbLocalReferences(); if (ejbLocalRefs != null) { for (EJBLocalReferenceMetaData ejbLocalRef : ejbLocalRefs) { this.environmentEntries.add(new EJBLocalReference(ejbLocalRef)); } } // ejb reference EJBReferencesMetaData ejbRefs = this.delegate.getEjbReferences(); if (ejbRefs != null) { for (EJBReferenceMetaData ejbRef : ejbRefs) { this.environmentEntries.add(new EJBReference(ejbRef)); } } // persistence unit reference PersistenceUnitReferencesMetaData persistenceUnitRefs = this.delegate.getPersistenceUnitRefs(); if (persistenceUnitRefs != null) { for (PersistenceUnitReferenceMetaData persistenceUnitRef : persistenceUnitRefs) { this.environmentEntries.add(new PersistenceUnitReference(persistenceUnitRef)); } } // persistence context reference PersistenceContextReferencesMetaData persistenceCtxRefs = this.delegate.getPersistenceContextRefs(); if (persistenceCtxRefs != null) { for (PersistenceContextReferenceMetaData persistenceCtxRef : persistenceCtxRefs) { this.environmentEntries.add(new PersistenceContextReference(persistenceCtxRef)); } } // resource env reference ResourceEnvironmentReferencesMetaData resourceEnvRefs = this.delegate.getResourceEnvironmentReferences(); if (resourceEnvRefs != null) { for (ResourceEnvironmentReferenceMetaData resourceEnvRef : resourceEnvRefs) { this.environmentEntries.add(new JBossResourceEnvReference(resourceEnvRef)); } } // resource reference ResourceReferencesMetaData resourceRefs = this.delegate.getResourceReferences(); if (resourceRefs != null) { for (ResourceReferenceMetaData resourceRef : resourceRefs) { this.environmentEntries.add(new JBossResourceReference(resourceRef)); } } // message destination references MessageDestinationReferencesMetaData messageDestRefs = this.delegate.getMessageDestinationReferences(); if (messageDestRefs != null) { for (MessageDestinationReferenceMetaData messageDestRef : messageDestRefs) { this.environmentEntries.add(new MessageDestinationReference(messageDestRef)); } } // service references ServiceReferencesMetaData serviceRefs = this.delegate.getServiceReferences(); if (serviceRefs != null) { for (ServiceReferenceMetaData serviceRef : serviceRefs) { if (serviceRef instanceof JBossServiceReferenceMetaData) { this.environmentEntries.add(new JBossServiceReference((JBossServiceReferenceMetaData) serviceRef)); } else { this.environmentEntries.add(new ServiceReference(serviceRef)); } } } // datasource(s) DataSourcesMetaData dataSources = this.delegate.getDataSources(); if (dataSources != null) { for (DataSourceMetaData dataSource : dataSources) { this.environmentEntries.add(new DataSourceReference(dataSource)); } } } }