From bdffc7e0b8b085e0bd2abdb33dc82e00cd8d78aa Mon Sep 17 00:00:00 2001 From: vamsic007 Date: Wed, 18 Mar 2009 20:23:02 +0000 Subject: o JavaEE processors to introspect WAR, JAR and EAR files and create model objects o JavaEE extensions to create SCA Services, SCA References and SCA Properties from EJB3 business interfaces, Remote EJB3 references and Env Entries. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@755722 13f79535-47bb-0310-9956-ffa450edef68 --- .../jee/impl/JavaEEOptionalExtensionImpl.java | 259 +++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java (limited to 'branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java') diff --git a/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java new file mode 100644 index 0000000000..f02b74bd8d --- /dev/null +++ b/branches/sca-java-1.x/modules/contribution-jee/src/main/java/org/apache/tuscany/sca/contribution/jee/impl/JavaEEOptionalExtensionImpl.java @@ -0,0 +1,259 @@ +/* + * 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.HashMap; +import java.util.Map; + +import javax.xml.namespace.QName; + +import org.apache.tuscany.sca.assembly.AssemblyFactory; +import org.apache.tuscany.sca.assembly.ComponentType; +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.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.JavaEEApplicationInfo; +import org.apache.tuscany.sca.contribution.jee.JavaEEOptionalExtension; +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 ALLOWED_ENV_ENTRY_TYPES; + static { + ALLOWED_ENV_ENTRY_TYPES = new HashMap(); + 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 entry : webModule.getEjbReferences().entrySet()) { + EjbReferenceInfo ejbRef = entry.getValue(); + 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 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 entry : ejbInfo.ejbReferences.entrySet()) { + EjbReferenceInfo ejbRef = entry.getValue(); + 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 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 ComponentType createImplementationJeeComponentType(WebModuleInfo webModule) { + ComponentType componentType = assemblyFactory.createComponentType(); + + // Process Remote EJB References + for(Map.Entry entry : webModule.getEjbReferences().entrySet()) { + EjbReferenceInfo ejbRef = entry.getValue(); + 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); + } + + return componentType; + } + + public ComponentType createImplementationJeeComponentType(EjbModuleInfo ejbModule) { + ComponentType componentType = assemblyFactory.createComponentType(); + + for(Map.Entry entry : ejbModule.getEjbInfos().entrySet()) { + EjbInfo ejbInfo = entry.getValue(); + // Process Remote EJB References + for(Map.Entry entry1 : ejbInfo.ejbReferences.entrySet()) { + EjbReferenceInfo ejbRef = entry1.getValue(); + String referenceName = ejbRef.referenceName; + referenceName = referenceName.replace("/", "_"); + referenceName = ejbInfo.beanName + "_" + referenceName; + 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); + } + } + + return componentType; + } + + public ComponentType createImplementationJeeComponentType(JavaEEApplicationInfo appInfo) { + ComponentType componentType = assemblyFactory.createComponentType(); + + for(Map.Entry entry0 : appInfo.getEjbModuleInfos().entrySet()) { + EjbModuleInfo ejbModule = entry0.getValue(); + + for(Map.Entry entry : ejbModule.getEjbInfos().entrySet()) { + EjbInfo ejbInfo = entry.getValue(); + // Process Remote EJB References + for(Map.Entry entry1 : ejbInfo.ejbReferences.entrySet()) { + EjbReferenceInfo ejbRef = entry1.getValue(); + String referenceName = ejbRef.referenceName; + referenceName = referenceName.replace("/", "_"); + referenceName = ejbInfo.beanName + "_" + referenceName; + 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); + } + } + } + + return componentType; + } +} -- cgit v1.2.3