summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl')
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java77
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedProcessor.java67
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EarContributionProcessor.java158
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbArchiveProcessor.java69
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbModuleInfoImpl.java66
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEApplicationInfoImpl.java68
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEArchiveProcessor.java59
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java262
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java398
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/ModelObjectImpl.java51
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WarContributionProcessor.java36
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebArchiveProcessor.java59
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedImpl.java60
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedProcessor.java66
-rw-r--r--sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebModuleInfoImpl.java109
15 files changed, 1605 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java
new file mode 100644
index 0000000000..eb5b8d8463
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedImpl.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.impl.ImplementationImpl;
+import org.apache.tuscany.sca.contribution.jee.EJBImplementationGenerated;
+import org.apache.tuscany.sca.contribution.jee.EjbInfo;
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+
+/**
+ * The model representing an EJB implementation in an SCA assembly model when the
+ * EJB implementation has been generated by introspecting a non-enhanced EAR $
+ */
+class EJBImplementationGeneratedImpl extends ImplementationImpl implements EJBImplementationGenerated {
+
+ private EjbInfo ejbInfo;
+ private EjbModuleInfo ejbModuleInfo;
+
+ /**
+ * Constructs a new EJB implementation.
+ */
+ EJBImplementationGeneratedImpl() {
+ super();
+ }
+
+ @Override
+ public ConstrainingType getConstrainingType() {
+ // The EJB implementation does not support constrainingTypes
+ return null;
+ }
+
+ @Override
+ public void setConstrainingType(ConstrainingType constrainingType) {
+ // The EJB implementation does not support constrainingTypes
+ }
+
+ public EjbInfo getEJBInfo() {
+ return ejbInfo;
+ }
+
+ public void setEJBInfo(EjbInfo ejbInfo) {
+ this.ejbInfo = ejbInfo;
+ }
+
+ public EjbModuleInfo getEjbModuleInfo() {
+ return ejbModuleInfo;
+ }
+
+ public void setEjbModuleInfo(EjbModuleInfo ejbModuleInfo) {
+ this.ejbModuleInfo = ejbModuleInfo;
+ }
+
+ // make sure the generated implementation can be distinguished
+ // based on the ejb info that is referenced
+ @Override
+ public int hashCode() {
+ return getEJBInfo().hashCode();
+ }
+
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedProcessor.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedProcessor.java
new file mode 100644
index 0000000000..bc8bc99770
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EJBImplementationGeneratedProcessor.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.monitor.Monitor;
+
+
+/**
+ * Dummy processor that's used to mark EJBImplementationGeneratedImpl instance
+ * as resolved at the appropriate point in the resolution processing
+ *
+ * @version $Rev$ $Date$
+ */
+public class EJBImplementationGeneratedProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor<EJBImplementationGeneratedImpl> {
+
+ public EJBImplementationGeneratedProcessor(ExtensionPointRegistry registry,
+ Monitor monitor) {
+ }
+
+ public QName getArtifactType() {
+ return null;
+ }
+
+ public Class<EJBImplementationGeneratedImpl> getModelType() {
+ // Returns the type of model processed by this processor
+ return EJBImplementationGeneratedImpl.class;
+ }
+
+ public EJBImplementationGeneratedImpl read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
+ return null;
+ }
+
+ public void resolve(EJBImplementationGeneratedImpl implementation, ModelResolver resolver) throws ContributionResolveException {
+ implementation.setUnresolved(false);
+ }
+
+ public void write(EJBImplementationGeneratedImpl implementation, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EarContributionProcessor.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EarContributionProcessor.java
new file mode 100644
index 0000000000..b0eb155636
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EarContributionProcessor.java
@@ -0,0 +1,158 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+
+import org.apache.tuscany.sca.contribution.PackageType;
+import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
+import org.apache.tuscany.sca.contribution.processor.impl.JarContributionProcessor;
+import org.apache.tuscany.sca.contribution.service.ContributionException;
+import org.eclipse.emf.common.archive.ArchiveURLConnection;
+
+/**
+ * Ear Contribution package processor.
+ *
+ * @version $Rev$ $Date$
+ */
+public class EarContributionProcessor implements PackageProcessor {
+
+ /* URL stream handler for "archive" */
+ private static URLStreamHandler archiveUrlStreamHandler = new URLStreamHandler() {
+ @Override
+ protected URLConnection openConnection(URL u) throws IOException {
+ return new ArchiveURLConnection(u);
+ }
+ };
+
+ public URL getArtifactURL(URL packageSourceURL, URI artifact)
+ throws MalformedURLException {
+ if(artifact.toString().equals("")) {
+ return packageSourceURL;
+ }
+ if (packageSourceURL.toString().startsWith("archive:")) {
+ return new URL(packageSourceURL, artifact.toString(), archiveUrlStreamHandler);
+ } else {
+ return new URL("archive", "", -1, packageSourceURL.toExternalForm() + "!/" + artifact, archiveUrlStreamHandler);
+ }
+ }
+
+ public List<URI> getArtifacts(URL packageSourceURL, InputStream inputStream) throws ContributionException, IOException {
+ if (packageSourceURL == null) {
+ throw new IllegalArgumentException("Invalid null package source URL.");
+ }
+
+ if (inputStream == null) {
+ throw new IllegalArgumentException("Invalid null source inputstream.");
+ }
+
+ // The root is a jar file
+ JarInputStream jar = new JarInputStream(inputStream);
+ try {
+ Set<String> names = new HashSet<String>();
+ while (true) {
+ JarEntry entry = jar.getNextJarEntry();
+ if (entry == null) {
+ // EOF
+ break;
+ }
+
+ String name = entry.getName();
+ if (!name.startsWith(".")) {
+
+ // Trim trailing /
+ if (name.endsWith("/")) {
+ name = name.substring(0, name.length() - 1);
+ }
+
+ // Add the entry name
+ if (!names.contains(name)) {
+ names.add(name);
+
+ // Add parent folder names to the list too
+ for (;;) {
+ int s = name.lastIndexOf('/');
+ if (s == -1) {
+ name = "";
+ } else {
+ name = name.substring(0, s);
+ }
+ if (!names.contains(name)) {
+ names.add(name);
+ } else {
+ break;
+ }
+ }
+ }
+ }
+ if(entry.getName().indexOf("/") == -1 && (entry.getName().toLowerCase().endsWith(".war") || entry.getName().toLowerCase().endsWith(".jar"))) {
+ // A WAR or an EJB JAR file in the root of the archive.
+ // Get entries from the nested archive.
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ int b;
+ while((b = jar.read()) != -1) {
+ bout.write(b);
+ }
+ bout.close();
+ ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
+
+ PackageProcessor archiveProcessor = entry.getName().toLowerCase().endsWith(".war") ? new WarContributionProcessor() : new JarContributionProcessor();
+ List<URI> artifacts = archiveProcessor.getArtifacts(packageSourceURL, bin);
+ bin.close();
+ for(URI artifact : artifacts) {
+ // don't add in nested application composites
+ if ((artifact.toString().endsWith("ejb-jar.composite") == false) &&
+ (artifact.toString().endsWith("web.composite") == false)) {
+ names.add(entry.getName()+"!/"+artifact);
+ }
+ }
+ }
+ }
+
+ // Return list of URIs
+ List<URI> artifacts = new ArrayList<URI>();
+ for (String name: names) {
+ artifacts.add(URI.create(name));
+ }
+ return artifacts;
+
+ } finally {
+ jar.close();
+ }
+ }
+
+ public String getPackageType() {
+ return PackageType.EAR;
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbArchiveProcessor.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbArchiveProcessor.java
new file mode 100644
index 0000000000..36aabefa99
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbArchiveProcessor.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEIntrospector;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.monitor.Monitor;
+
+/**
+ * URLArtifactProcessor for EJB jars.
+ *
+ * @version $Rev$ $Date$
+ */
+public class EjbArchiveProcessor implements URLArtifactProcessor<EjbModuleInfo> {
+ private JavaEEIntrospector jeeIntrospector;
+
+ public EjbArchiveProcessor(ExtensionPointRegistry registry, Monitor monitor) {
+ jeeIntrospector = registry.getExtensionPoint(JavaEEIntrospector.class);
+ }
+
+ public String getArtifactType() {
+ return ".jar";
+ }
+
+ public EjbModuleInfo read(URL contributionURL, URI artifactURI, URL artifactURL) throws ContributionReadException {
+ if (jeeIntrospector != null) {
+ EjbModuleInfo ejbModuleInfo = jeeIntrospector.introspectEjbArchive(artifactURL);
+ if(ejbModuleInfo != null) {
+ ejbModuleInfo.setUri(artifactURI);
+ ejbModuleInfo.setModuleName(new File(artifactURL.getFile()).getName());
+ }
+ return ejbModuleInfo;
+ }
+ return null;
+ }
+
+ public Class<EjbModuleInfo> getModelType() {
+ return EjbModuleInfo.class;
+ }
+
+ public void resolve(EjbModuleInfo arg0, ModelResolver arg1)
+ throws ContributionResolveException {
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbModuleInfoImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbModuleInfoImpl.java
new file mode 100644
index 0000000000..830aa81b19
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/EjbModuleInfoImpl.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.jee.EjbInfo;
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+
+public class EjbModuleInfoImpl implements EjbModuleInfo {
+
+ private URI uri;
+ private String moduleName;
+ private ClassLoader moduleClassLoader;
+ private Map<String, EjbInfo> ejbInfos = new HashMap<String, EjbInfo>();
+
+ public EjbInfo getEjbInfo(String beanName) {
+ return ejbInfos.get(beanName);
+ }
+
+ public Map<String, EjbInfo> getEjbInfos() {
+ return ejbInfos;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public URI getUri() {
+ return uri;
+ }
+
+ public void setUri(URI uri) {
+ this.uri = uri;
+ }
+
+ public ClassLoader getModuleClassloader() {
+ return moduleClassLoader;
+ }
+
+ public void setmoduleClassloader(ClassLoader classLoader) {
+ this.moduleClassLoader = classLoader;
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEApplicationInfoImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEApplicationInfoImpl.java
new file mode 100644
index 0000000000..993605ebe5
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEApplicationInfoImpl.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.WebModuleInfo;
+
+public class JavaEEApplicationInfoImpl implements JavaEEApplicationInfo {
+
+ private URI uri;
+ private String applicationName;
+ private Map<String, EjbModuleInfo> ejbModuleInfos = new HashMap<String, EjbModuleInfo>();
+ private Map<String, WebModuleInfo> webModuleInfos = new HashMap<String, WebModuleInfo>();
+
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public void setApplicationName(String applicationName) {
+ this.applicationName = applicationName;
+ }
+
+ public EjbModuleInfo getEjbModuleInfo(String moduleName) {
+ return ejbModuleInfos.get(moduleName);
+ }
+
+ public Map<String, EjbModuleInfo> getEjbModuleInfos() {
+ return ejbModuleInfos;
+ }
+
+ public WebModuleInfo getWebModuleInfo(String moduleName) {
+ return webModuleInfos.get(moduleName);
+ }
+
+ public Map<String, WebModuleInfo> getWebModuleInfos() {
+ return webModuleInfos;
+ }
+
+ public URI getUri() {
+ return uri;
+ }
+
+ public void setUri(URI uri) {
+ this.uri = uri;
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEArchiveProcessor.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEArchiveProcessor.java
new file mode 100644
index 0000000000..53201b5e2b
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEArchiveProcessor.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEIntrospector;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.monitor.Monitor;
+
+public class JavaEEArchiveProcessor implements URLArtifactProcessor<JavaEEApplicationInfo> {
+ private JavaEEIntrospector jeeIntrospector;
+
+ public JavaEEArchiveProcessor(ExtensionPointRegistry registry, Monitor monitor) {
+ jeeIntrospector = registry.getExtensionPoint(JavaEEIntrospector.class);
+ }
+
+ public String getArtifactType() {
+ return ".ear";
+ }
+
+ public JavaEEApplicationInfo read(URL contributionURL, URI artifactURI, URL artifactURL) throws ContributionReadException {
+ JavaEEApplicationInfo jeeAppInfo = jeeIntrospector.introspectJeeArchive(artifactURL);
+ jeeAppInfo.setUri(artifactURI);
+ jeeAppInfo.setApplicationName(new File(artifactURL.getFile()).getName());
+ return jeeAppInfo;
+ }
+
+ public Class<JavaEEApplicationInfo> getModelType() {
+ return JavaEEApplicationInfo.class;
+ }
+
+ public void resolve(JavaEEApplicationInfo arg0, ModelResolver arg1)
+ throws ContributionResolveException {
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java
new file mode 100644
index 0000000000..4271a93399
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEExtensionImpl.java
@@ -0,0 +1,262 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.CompositeService;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.jee.EJBImplementationGenerated;
+import org.apache.tuscany.sca.contribution.jee.EjbInfo;
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEExtension;
+import org.apache.tuscany.sca.contribution.jee.EjbInfo.EjbType;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+import org.apache.tuscany.sca.policy.Intent;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+
+public class JavaEEExtensionImpl implements JavaEEExtension {
+
+ private AssemblyFactory assemblyFactory;
+ private JavaInterfaceFactory javaInterfaceFactory;
+ private PolicyFactory policyFactory;
+ private Intent EJB_INTENT;
+
+ public JavaEEExtensionImpl(ModelFactoryExtensionPoint modelFactories) {
+ this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+ this.javaInterfaceFactory = modelFactories.getFactory(JavaInterfaceFactory.class);
+ this.policyFactory = modelFactories.getFactory(PolicyFactory.class);
+
+ EJB_INTENT = policyFactory.createIntent();
+ EJB_INTENT.setName(new QName("http://www.osoa.org/xmlns/sca/1.0", "ejb"));
+ }
+
+ public ComponentType createImplementationEjbComponentType(EjbModuleInfo ejbModule, String ejbName) {
+ ComponentType componentType = assemblyFactory.createComponentType();
+ EjbInfo ejbInfo = ejbModule.getEjbInfo(ejbName);
+ if(ejbInfo == null) {
+ return null;
+ }
+ if(ejbInfo.ejbType.compareTo(EjbType.MESSAGE_DRIVEN) != 0) {
+ for(Class<?> intf : ejbInfo.businessRemote) {
+ Service service = assemblyFactory.createComponentService();
+ String intfName = intf.getName();
+ String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
+ service.setName(serviceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(intf));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ service.setInterfaceContract(ic);
+ service.getRequiredIntents().add(EJB_INTENT);
+
+ componentType.getServices().add(service);
+ }
+
+ for(Class<?> intf : ejbInfo.businessLocal) {
+ Service service = assemblyFactory.createComponentService();
+ String intfName = intf.getName();
+ String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
+ service.setName(serviceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(intf));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ service.setInterfaceContract(ic);
+ service.getRequiredIntents().add(EJB_INTENT);
+
+ componentType.getServices().add(service);
+ }
+ }
+ return componentType;
+ }
+
+ public void createImplementationJeeComposite(EjbModuleInfo ejbModule, Composite composite) {
+
+ for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
+ EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo, ejbModule);
+
+ if(ejbInfo.ejbType.compareTo(EjbType.MESSAGE_DRIVEN) != 0) {
+ for(Class<?> intf : ejbInfo.businessRemote) {
+ ComponentService service = assemblyFactory.createComponentService();
+ String intfName = intf.getName();
+ String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
+ serviceName = ejbInfo.beanName+"_"+serviceName;
+ service.setName(serviceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(intf));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ service.setInterfaceContract(ic);
+ service.getRequiredIntents().add(EJB_INTENT);
+
+ addComponentService(composite, component, service);
+ }
+
+ for(Class<?> intf : ejbInfo.businessLocal) {
+ ComponentService service = assemblyFactory.createComponentService();
+ String intfName = intf.getName();
+ String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
+ serviceName = ejbInfo.beanName+"_"+serviceName;
+ service.setName(serviceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(intf));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ service.setInterfaceContract(ic);
+ service.getRequiredIntents().add(EJB_INTENT);
+
+ addComponentService(composite, component, service);
+ }
+ }
+ }
+ }
+
+ public void createImplementationJeeComposite(JavaEEApplicationInfo appInfo, Composite composite) {
+
+ for(Map.Entry<String, EjbModuleInfo> entry0 : appInfo.getEjbModuleInfos().entrySet()) {
+ EjbModuleInfo ejbModule = entry0.getValue();
+
+ for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
+ EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo, ejbModule);
+
+ if(ejbInfo.ejbType.compareTo(EjbType.MESSAGE_DRIVEN) != 0) {
+ for(Class<?> intf : ejbInfo.businessRemote) {
+ ComponentService service = assemblyFactory.createComponentService();
+ String intfName = intf.getName();
+ String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
+ serviceName = ejbInfo.mappedName+"_"+serviceName;
+ service.setName(serviceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(intf));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ service.setInterfaceContract(ic);
+ service.getRequiredIntents().add(EJB_INTENT);
+
+ addComponentService(composite, component, service);
+ }
+
+ for(Class<?> intf : ejbInfo.businessLocal) {
+ ComponentService service = assemblyFactory.createComponentService();
+ String intfName = intf.getName();
+ String serviceName = intfName.lastIndexOf(".") != -1 ? intfName.substring(intfName.lastIndexOf(".") + 1) : intfName;
+ serviceName = ejbInfo.mappedName+"_"+serviceName;
+ service.setName(serviceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(intf));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ service.setInterfaceContract(ic);
+ service.getRequiredIntents().add(EJB_INTENT);
+
+ addComponentService(composite, component, service);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * We are fluffing up the JEEImplemention composite to represented the components
+ * in the JEE archive. Given the JEEimplemenation composite find a named component
+ * it if already exists or create it if it doesn't.
+ *
+ * @param ejbInfo
+ * @param componentName
+ * @return
+ */
+ private Component findComponent(Composite composite, EjbInfo ejbInfo, EjbModuleInfo ejbmoduleInfo){
+ String componentName = ejbInfo.beanName;
+ Component component = null;
+
+ for (Component tmpComponent : composite.getComponents()){
+ if (tmpComponent.getName().equals(componentName)){
+ component = tmpComponent;
+ break;
+ }
+ }
+
+ if (component == null){
+ component = assemblyFactory.createComponent();
+ component.setName(componentName);
+ component.setUnresolved(true);
+ composite.getComponents().add(component);
+
+ EJBImplementationGenerated implementation = new EJBImplementationGeneratedImpl();
+ implementation.setUnresolved(true);
+ implementation.setEJBInfo(ejbInfo);
+ implementation.setEjbModuleInfo(ejbmoduleInfo);
+ component.setImplementation(implementation);
+ }
+
+ return component;
+ }
+
+ /**
+ * Add a component service and fluff up a composite service to match
+ *
+ * @param composite
+ * @param component
+ * @param service
+ */
+ private void addComponentService(Composite composite, Component component, ComponentService service){
+ component.getImplementation().getServices().add(service);
+
+ CompositeService compositeService = assemblyFactory.createCompositeService();
+ composite.getServices().add(compositeService);
+
+ compositeService.setName(service.getName());
+ compositeService.setPromotedComponent(component);
+ compositeService.setPromotedService(service);
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java
new file mode 100644
index 0000000000..505578d6f1
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java
@@ -0,0 +1,398 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.assembly.ComponentService;
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.CompositeReference;
+import org.apache.tuscany.sca.assembly.CompositeService;
+import org.apache.tuscany.sca.assembly.Multiplicity;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.jee.EJBImplementationGenerated;
+import org.apache.tuscany.sca.contribution.jee.EjbInfo;
+import org.apache.tuscany.sca.contribution.jee.EjbModuleInfo;
+import org.apache.tuscany.sca.contribution.jee.EjbReferenceInfo;
+import org.apache.tuscany.sca.contribution.jee.EnvEntryInfo;
+import org.apache.tuscany.sca.contribution.jee.InjectionTarget;
+import org.apache.tuscany.sca.contribution.jee.JavaEEApplicationInfo;
+import org.apache.tuscany.sca.contribution.jee.JavaEEOptionalExtension;
+import org.apache.tuscany.sca.contribution.jee.WebImplementationGenerated;
+import org.apache.tuscany.sca.contribution.jee.WebModuleInfo;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
+import org.apache.tuscany.sca.policy.Intent;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+
+public class JavaEEOptionalExtensionImpl implements JavaEEOptionalExtension {
+
+ private AssemblyFactory assemblyFactory;
+ private JavaInterfaceFactory javaInterfaceFactory;
+ private PolicyFactory policyFactory;
+ private Intent EJB_INTENT;
+
+ public static final Map<String, QName> ALLOWED_ENV_ENTRY_TYPES;
+ static {
+ ALLOWED_ENV_ENTRY_TYPES = new HashMap<String, QName>();
+ ALLOWED_ENV_ENTRY_TYPES.put(String.class.getName(), new QName("http://www.w3.org/2001/XMLSchema", "string",
+ "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Character.class.getName(), new QName("http://www.w3.org/2001/XMLSchema", "string",
+ "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Byte.class.getName(), new QName("http://www.w3.org/2001/XMLSchema", "byte", "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Short.class.getName(),
+ new QName("http://www.w3.org/2001/XMLSchema", "short", "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Integer.class.getName(),
+ new QName("http://www.w3.org/2001/XMLSchema", "int", "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Long.class.getName(), new QName("http://www.w3.org/2001/XMLSchema", "long", "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Boolean.class.getName(), new QName("http://www.w3.org/2001/XMLSchema", "boolean",
+ "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Double.class.getName(), new QName("http://www.w3.org/2001/XMLSchema", "double",
+ "xsd"));
+ ALLOWED_ENV_ENTRY_TYPES.put(Float.class.getName(),
+ new QName("http://www.w3.org/2001/XMLSchema", "float", "xsd"));
+ }
+
+ public JavaEEOptionalExtensionImpl(ModelFactoryExtensionPoint modelFactories) {
+ this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+ this.javaInterfaceFactory = modelFactories.getFactory(JavaInterfaceFactory.class);
+ this.policyFactory = modelFactories.getFactory(PolicyFactory.class);
+
+ EJB_INTENT = policyFactory.createIntent();
+ EJB_INTENT.setName(new QName("http://www.osoa.org/xmlns/sca/1.0", "ejb"));
+ }
+
+ public ComponentType createImplementationWebComponentType(WebModuleInfo webModule) {
+ ComponentType componentType = assemblyFactory.createComponentType();
+
+ // Process Remote EJB References
+ for(Map.Entry<String, EjbReferenceInfo> entry : webModule.getEjbReferences().entrySet()) {
+ EjbReferenceInfo ejbRef = entry.getValue();
+ // If the EJB reference has @Reference SCA annotation, then skip that reference
+ if(!hasReferenceAnnotation(ejbRef.injectionTarget)) {
+ continue;
+ }
+ String referenceName = entry.getKey();
+ referenceName = referenceName.replace("/", "_");
+ Reference reference = assemblyFactory.createComponentReference();
+ reference.setName(referenceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(ejbRef.businessInterface));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ reference.setInterfaceContract(ic);
+ reference.getRequiredIntents().add(EJB_INTENT);
+ reference.setMultiplicity(Multiplicity.ZERO_ONE);
+ componentType.getReferences().add(reference);
+ }
+
+ // Process env-entries to compute properties
+ for (Map.Entry<String, EnvEntryInfo> entry : webModule.getEnvEntries().entrySet()) {
+ EnvEntryInfo envEntry = entry.getValue();
+ String type = envEntry.type;
+ if (!ALLOWED_ENV_ENTRY_TYPES.containsKey(type)) {
+ continue;
+ }
+ String propertyName = envEntry.name;
+ propertyName = propertyName.replace("/", "_");
+ String value = envEntry.value;
+ Property property = assemblyFactory.createComponentProperty();
+ property.setName(propertyName);
+ property.setXSDType(ALLOWED_ENV_ENTRY_TYPES.get(type));
+ property.setValue(value);
+ componentType.getProperties().add(property);
+ }
+
+ return componentType;
+ }
+
+ public ComponentType createImplementationEjbComponentType(EjbModuleInfo ejbModule, String ejbName) {
+ ComponentType componentType = assemblyFactory.createComponentType();
+ EjbInfo ejbInfo = ejbModule.getEjbInfo(ejbName);
+ if(ejbInfo == null) {
+ return null;
+ }
+
+ // Process Remote EJB References
+ for(Map.Entry<String, EjbReferenceInfo> entry : ejbInfo.ejbReferences.entrySet()) {
+ EjbReferenceInfo ejbRef = entry.getValue();
+ // If the EJB reference has @Reference SCA annotation, then skip that reference
+ if(!hasReferenceAnnotation(ejbRef.injectionTarget)) {
+ continue;
+ }
+ String referenceName = entry.getKey();
+ referenceName = referenceName.replace("/", "_");
+ Reference reference = assemblyFactory.createComponentReference();
+ reference.setName(referenceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(ejbRef.businessInterface));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ reference.setInterfaceContract(ic);
+ reference.getRequiredIntents().add(EJB_INTENT);
+ reference.setMultiplicity(Multiplicity.ZERO_ONE);
+ componentType.getReferences().add(reference);
+ }
+
+ // Process env-entries to compute properties
+ for (Map.Entry<String, EnvEntryInfo> entry : ejbInfo.envEntries.entrySet()) {
+ EnvEntryInfo envEntry = entry.getValue();
+ String type = envEntry.type;
+ if (!ALLOWED_ENV_ENTRY_TYPES.containsKey(type)) {
+ continue;
+ }
+ String propertyName = envEntry.name;
+ propertyName = propertyName.replace("/", "_");
+ String value = envEntry.value;
+ Property property = assemblyFactory.createComponentProperty();
+ property.setName(propertyName);
+ property.setXSDType(ALLOWED_ENV_ENTRY_TYPES.get(type));
+ property.setValue(value);
+ componentType.getProperties().add(property);
+ }
+ return componentType;
+ }
+
+ public void createImplementationJeeComposite(WebModuleInfo webModule, Composite composite) {
+
+ Component component = findComponent(composite, webModule);
+
+ // Process Remote EJB References
+ for(Map.Entry<String, EjbReferenceInfo> entry : webModule.getEjbReferences().entrySet()) {
+ EjbReferenceInfo ejbRef = entry.getValue();
+ String referenceName = entry.getKey();
+ referenceName = referenceName.replace("/", "_");
+ ComponentReference reference = assemblyFactory.createComponentReference();
+ reference.setName(referenceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(ejbRef.businessInterface));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ reference.setInterfaceContract(ic);
+ reference.getRequiredIntents().add(EJB_INTENT);
+ reference.setMultiplicity(Multiplicity.ZERO_ONE);
+
+ addComponentReference(composite, component, reference);
+ }
+ }
+
+ public void createImplementationJeeComposite(EjbModuleInfo ejbModule, Composite composite) {
+
+ for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
+ EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo, ejbModule);
+
+ // Process Remote EJB References
+ for(Map.Entry<String, EjbReferenceInfo> entry1 : ejbInfo.ejbReferences.entrySet()) {
+ EjbReferenceInfo ejbRef = entry1.getValue();
+ String referenceName = ejbRef.referenceName;
+ referenceName = referenceName.replace("/", "_");
+ referenceName = ejbInfo.beanName + "_" + referenceName;
+ ComponentReference reference = assemblyFactory.createComponentReference();
+ reference.setName(referenceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(ejbRef.businessInterface));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ reference.setInterfaceContract(ic);
+ reference.getRequiredIntents().add(EJB_INTENT);
+ reference.setMultiplicity(Multiplicity.ZERO_ONE);
+
+ addComponentReference(composite, component, reference);
+ }
+ }
+ }
+
+
+ public void createImplementationJeeComposite(JavaEEApplicationInfo appInfo, Composite composite) {
+
+ for(Map.Entry<String, EjbModuleInfo> entry0 : appInfo.getEjbModuleInfos().entrySet()) {
+ EjbModuleInfo ejbModule = entry0.getValue();
+
+ for(Map.Entry<String, EjbInfo> entry : ejbModule.getEjbInfos().entrySet()) {
+ EjbInfo ejbInfo = entry.getValue();
+
+ Component component = findComponent(composite, ejbInfo, ejbModule);
+
+ // Process Remote EJB References
+ for(Map.Entry<String, EjbReferenceInfo> entry1 : ejbInfo.ejbReferences.entrySet()) {
+ EjbReferenceInfo ejbRef = entry1.getValue();
+ String referenceName = ejbRef.referenceName;
+ referenceName = referenceName.replace("/", "_");
+ referenceName = ejbInfo.beanName + "_" + referenceName;
+ ComponentReference reference = assemblyFactory.createComponentReference();
+ reference.setName(referenceName);
+ InterfaceContract ic = javaInterfaceFactory.createJavaInterfaceContract();
+ try {
+ ic.setInterface(javaInterfaceFactory.createJavaInterface(ejbRef.businessInterface));
+ } catch (InvalidInterfaceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ reference.setInterfaceContract(ic);
+ reference.getRequiredIntents().add(EJB_INTENT);
+ reference.setMultiplicity(Multiplicity.ZERO_ONE);
+
+ addComponentReference(composite, component, reference);
+ }
+ }
+ }
+ }
+
+ /**
+ * We are fluffing up the JEEImplemention composite to represent the components
+ * in the JEE archive. Given the JEEimplemenation composite find a named component
+ * it if already exists or create it if it doesn't.
+ *
+ * @param composite
+ * @param ejbInfo
+ * @return
+ */
+ private Component findComponent(Composite composite, EjbInfo ejbInfo, EjbModuleInfo ejbmoduleInfo){
+ String componentName = ejbInfo.beanName;
+ Component component = null;
+
+ for (Component tmpComponent : composite.getComponents()){
+ if (tmpComponent.getName().equals(componentName)){
+ component = tmpComponent;
+ break;
+ }
+ }
+
+ if (component == null){
+ component = assemblyFactory.createComponent();
+ component.setName(componentName);
+ component.setUnresolved(true);
+ composite.getComponents().add(component);
+
+ EJBImplementationGenerated implementation = new EJBImplementationGeneratedImpl();
+ implementation.setUnresolved(true);
+ implementation.setEJBInfo(ejbInfo);
+ implementation.setEjbModuleInfo(ejbmoduleInfo);
+ component.setImplementation(implementation);
+ }
+
+ return component;
+ }
+
+ /**
+ * We are fluffing up the JEEImplemention composite to represent the components
+ * in the JEE archive. Given the JEEimplemenation composite find a named component
+ * it if already exists or create it if it doesn't.
+ *
+ * @param composite
+ * @param ejbInfo
+ * @return
+ */
+ private Component findComponent(Composite composite, WebModuleInfo webInfo){
+ String componentName = webInfo.getModuleName();
+ Component component = null;
+
+ for (Component tmpComponent : composite.getComponents()){
+ if (tmpComponent.getName().equals(componentName)){
+ component = tmpComponent;
+ break;
+ }
+ }
+
+ if (component == null){
+ component = assemblyFactory.createComponent();
+ component.setName(componentName);
+ component.setUnresolved(true);
+ composite.getComponents().add(component);
+
+ WebImplementationGenerated implementation = new WebImplementationGeneratedImpl();
+ implementation.setUnresolved(true);
+ // need generated impl to represent web modules
+ implementation.setWebInfo(webInfo);
+ component.setImplementation(implementation);
+ }
+
+ return component;
+ }
+
+ /**
+ * Add a component reference and fluff up a composite reference to match
+ *
+ * @param composite
+ * @param component
+ * @param service
+ */
+ private void addComponentReference(Composite composite, Component component, ComponentReference reference){
+ component.getImplementation().getReferences().add(reference);
+
+ CompositeReference compositeReference = assemblyFactory.createCompositeReference();
+ composite.getReferences().add(compositeReference);
+
+ compositeReference.setName(reference.getName());
+ compositeReference.getPromotedReferences().add(reference);
+ }
+
+ private boolean hasReferenceAnnotation(InjectionTarget injectionTarget) {
+ if(injectionTarget.targetClass == null || injectionTarget.targetClass.equals("")) {
+ return false;
+ }
+ try {
+ Class<?> clazz = Class.forName(injectionTarget.targetClass);
+ try {
+ Method method = clazz.getDeclaredMethod("set"+injectionTarget.targetName);
+ if(method.isAnnotationPresent(javax.ejb.EJB.class)) {
+ return method.isAnnotationPresent(org.osoa.sca.annotations.Reference.class);
+ } else {
+ // The method does not have @EJB annotation. So, the method is not good for us.
+ throw new NoSuchMethodException("set"+injectionTarget.targetName);
+ }
+ } catch(NoSuchMethodException nsme) {
+ try {
+ Field field = clazz.getDeclaredField(injectionTarget.targetName);
+ return field.isAnnotationPresent(org.osoa.sca.annotations.Reference.class);
+ } catch(NoSuchFieldException nsfe) {
+ return false;
+ }
+ }
+ } catch(ClassNotFoundException cnfe) {
+ return false;
+ }
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/ModelObjectImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/ModelObjectImpl.java
new file mode 100644
index 0000000000..95050dfd88
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/ModelObjectImpl.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.net.URI;
+
+import org.apache.tuscany.sca.contribution.jee.ModelObject;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ModelObjectImpl implements ModelObject {
+
+ private URI uri;
+ private Object obj;
+
+ public ModelObjectImpl() {
+ }
+
+ public Object getObject() {
+ return obj;
+ }
+
+ public void setObject(Object obj) {
+ this.obj = obj;
+ }
+
+ public URI getUri() {
+ return uri;
+ }
+
+ public void setUri(URI uri) {
+ this.uri = uri;
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WarContributionProcessor.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WarContributionProcessor.java
new file mode 100644
index 0000000000..17974e831f
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WarContributionProcessor.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import org.apache.tuscany.sca.contribution.PackageType;
+import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
+import org.apache.tuscany.sca.contribution.processor.impl.JarContributionProcessor;
+
+/**
+ * War Contribution package processor.
+ *
+ * @version $Rev$ $Date$
+ */
+public class WarContributionProcessor extends JarContributionProcessor implements PackageProcessor {
+ @Override
+ public String getPackageType() {
+ return PackageType.WAR;
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebArchiveProcessor.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebArchiveProcessor.java
new file mode 100644
index 0000000000..9e9bfb8bc1
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebArchiveProcessor.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+
+import org.apache.tuscany.sca.contribution.jee.JavaEEIntrospector;
+import org.apache.tuscany.sca.contribution.jee.WebModuleInfo;
+import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.monitor.Monitor;
+
+public class WebArchiveProcessor implements URLArtifactProcessor<WebModuleInfo> {
+ private JavaEEIntrospector jeeIntrospector;
+
+ public WebArchiveProcessor(ExtensionPointRegistry registry, Monitor monitor) {
+ jeeIntrospector = registry.getExtensionPoint(JavaEEIntrospector.class);
+ }
+
+ public String getArtifactType() {
+ return ".war";
+ }
+
+ public WebModuleInfo read(URL contributionURL, URI artifactURI, URL artifactURL) throws ContributionReadException {
+ WebModuleInfo webModuleInfo = jeeIntrospector.introspectWebArchive(artifactURL);
+ webModuleInfo.setUri(artifactURI);
+ webModuleInfo.setModuleName(new File(artifactURL.getFile()).getName());
+ return webModuleInfo;
+ }
+
+ public Class<WebModuleInfo> getModelType() {
+ return WebModuleInfo.class;
+ }
+
+ public void resolve(WebModuleInfo arg0, ModelResolver arg1)
+ throws ContributionResolveException {
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedImpl.java
new file mode 100644
index 0000000000..d898bd4ea0
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedImpl.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import org.apache.tuscany.sca.assembly.ConstrainingType;
+import org.apache.tuscany.sca.assembly.impl.ImplementationImpl;
+import org.apache.tuscany.sca.contribution.jee.WebImplementationGenerated;
+import org.apache.tuscany.sca.contribution.jee.WebModuleInfo;
+
+
+/**
+ * The model representing a WEB implementation in an SCA assembly model when the
+ * WEB implementation has been generated by introspecting a non-enhanced EAR
+ */
+class WebImplementationGeneratedImpl extends ImplementationImpl implements WebImplementationGenerated {
+
+ private WebModuleInfo webInfo;
+
+ /**
+ * Constructs a new EJB implementation.
+ */
+ WebImplementationGeneratedImpl() {
+ super();
+ }
+
+ @Override
+ public ConstrainingType getConstrainingType() {
+ // The Web implementation does not support constrainingTypes
+ return null;
+ }
+
+ @Override
+ public void setConstrainingType(ConstrainingType constrainingType) {
+ // The Web implementation does not support constrainingTypes
+ }
+
+ public WebModuleInfo getWebInfo() {
+ return webInfo;
+ }
+
+ public void setWebInfo(WebModuleInfo webInfo) {
+ this.webInfo = webInfo;
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedProcessor.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedProcessor.java
new file mode 100644
index 0000000000..4e50b15960
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebImplementationGeneratedProcessor.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.monitor.Monitor;
+
+
+/**
+ * Dummy processor that's used to mark WebImplementationGeneratedImpl instance
+ * as resolved at the appropriate point in the resolution processing
+ *
+ */
+public class WebImplementationGeneratedProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor<WebImplementationGeneratedImpl> {
+
+ public WebImplementationGeneratedProcessor(ExtensionPointRegistry registry,
+ Monitor monitor) {
+ }
+
+ public QName getArtifactType() {
+ return null;
+ }
+
+ public Class<WebImplementationGeneratedImpl> getModelType() {
+ // Returns the type of model processed by this processor
+ return WebImplementationGeneratedImpl.class;
+ }
+
+ public WebImplementationGeneratedImpl read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
+ return null;
+ }
+
+ public void resolve(WebImplementationGeneratedImpl implementation, ModelResolver resolver) throws ContributionResolveException {
+ implementation.setUnresolved(false);
+ }
+
+ public void write(WebImplementationGeneratedImpl implementation, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
+ }
+}
diff --git a/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebModuleInfoImpl.java b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebModuleInfoImpl.java
new file mode 100644
index 0000000000..ceca698356
--- /dev/null
+++ b/sca-java-1.x/tags/1.6-TUSCANY-3909/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/WebModuleInfoImpl.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.contribution.jee.impl;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.jee.EjbReferenceInfo;
+import org.apache.tuscany.sca.contribution.jee.EnvEntryInfo;
+import org.apache.tuscany.sca.contribution.jee.JspReferenceTagInfo;
+import org.apache.tuscany.sca.contribution.jee.WebModuleInfo;
+
+public class WebModuleInfoImpl implements WebModuleInfo {
+
+ private URI uri;
+ private String moduleName;
+ private ClassLoader moduleClassLoader;
+
+ private Collection<Class<?>> servletClasses = new ArrayList<Class<?>>();
+ private Collection<Class<?>> listenerClasses = new ArrayList<Class<?>>();
+ private Collection<Class<?>> filterClasses = new ArrayList<Class<?>>();
+ private Collection<Class<?>> jsfClasses = new ArrayList<Class<?>>();
+
+ private Collection<JspReferenceTagInfo> jspReferenceTags = new ArrayList<JspReferenceTagInfo>();
+
+ private Map<String, EjbReferenceInfo> ejbReferences = new HashMap<String, EjbReferenceInfo>();
+ private Map<String, EnvEntryInfo> envEntries = new HashMap<String, EnvEntryInfo>();
+
+ public WebModuleInfoImpl() {
+ }
+ public Collection<Class<?>> getServletClasses() {
+ return servletClasses;
+ }
+
+ public Collection<Class<?>> getListenerClasses() {
+ return listenerClasses;
+ }
+
+ public Collection<Class<?>> getFilterClasses() {
+ return filterClasses;
+ }
+
+ public Collection<Class<?>> getJSFClasses() {
+ return jsfClasses;
+ }
+
+ public Collection<JspReferenceTagInfo> getJspReferenceTags() {
+ return jspReferenceTags;
+ }
+
+ public EjbReferenceInfo getEjbReference(String ejbRefName) {
+ return ejbReferences.get(ejbRefName);
+ }
+
+ public Map<String, EjbReferenceInfo> getEjbReferences() {
+ return ejbReferences;
+ }
+
+ public Map<String, EnvEntryInfo> getEnvEntries() {
+ return envEntries;
+ }
+
+ public EnvEntryInfo getEnvEntry(String envEntryName) {
+ return envEntries.get(envEntryName);
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public void setModuleName(String moduleName) {
+ this.moduleName = moduleName;
+ }
+
+ public URI getUri() {
+ return uri;
+ }
+
+ public void setUri(URI uri) {
+ this.uri = uri;
+ }
+
+ public ClassLoader getModuleClassloader() {
+ return moduleClassLoader;
+ }
+
+ public void setmoduleClassloader(ClassLoader classLoader) {
+ this.moduleClassLoader = classLoader;
+ }
+}