Author: jmarino
Date: Sun May 14 03:18:29 2006
New Revision: 406305
URL: http://svn.apache.org/viewcvs?rev=406305&view=rev
Log:
first cut at system builder
Added:
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
Modified:
incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java
Modified:
incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java?rev=406305&r1=406304&r2=406305&view=diff
==============================================================================
---
incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
(original)
+++
incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
Sun May 14 03:18:29 2006
@@ -56,8 +56,10 @@
serviceInterfaces.add(((JavaServiceContract)
service.getServiceContract()).getInterfaceClass());
}
PojoObjectFactory<?> factory = new PojoObjectFactory(ctr, null,
componentType.getInjectors());
- return new JavaAtomicContext(name, serviceInterfaces, factory,
componentType.isEagerInit(), componentType.getInitInvoker(),
- componentType.getDestroyInvoker(), injectors,
componentType.getMembers());
+ return null;
+ //TODO finish
+// return new JavaAtomicContext(name, serviceInterfaces, factory,
componentType.isEagerInit(), componentType.getInitInvoker(),
+// componentType.getDestroyInvoker(), injectors,
componentType.getMembers());
}
}
Added:
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java?rev=406305&view=auto
==============================================================================
---
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
(added)
+++
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
Sun May 14 03:18:29 2006
@@ -0,0 +1,47 @@
+package org.apache.tuscany.core.injection;
+
+import org.apache.tuscany.common.ObjectCreationException;
+import org.apache.tuscany.common.ObjectFactory;
+import org.apache.tuscany.spi.QualifiedName;
+import org.apache.tuscany.spi.context.ComponentContext;
+import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.Context;
+import org.apache.tuscany.spi.context.ReferenceContext;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public class LazyIntraCompositeResolver<T> implements ObjectFactory<T> {
+
+ private CompositeContext parent;
+ private QualifiedName name;
+ private Context context;
+
+ public LazyIntraCompositeResolver(CompositeContext parent, QualifiedName
name) {
+ assert(parent != null): "Parent context was null";
+ assert(name != null): "Qualified name was null";
+ this.parent = parent;
+ this.name = name;
+ }
+
+ @SuppressWarnings("unchecked")
+ public T getInstance() throws ObjectCreationException {
+ if (context == null) {
+ context = parent.getContext(name.getPartName());
+ if (context == null) {
+ ObjectCreationException e = new
ObjectCreationException("Target not found");
+ e.setIdentifier(name.getQualifiedName());
+ throw e;
+ }
+ }
+ if (context instanceof ComponentContext) {
+ return (T) ((CompositeContext)
context).getService(name.getPortName());
+ } else if (context instanceof ReferenceContext) {
+ return (T) context.getService();
+ } else {
+ ObjectCreationException e = new ObjectCreationException("Invalid
target type");
+ e.setIdentifier(context.getName());
+ throw e;
+ }
+ }
+}
Modified:
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java?rev=406305&r1=406304&r2=406305&view=diff
==============================================================================
---
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
(original)
+++
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
Sun May 14 03:18:29 2006
@@ -45,15 +45,15 @@
injectors.add(injector);
}
- public Member getMember(String name) {
+ public Member getReferenceMember(String name) {
return members.get(name);
}
- public void setMember(Member member) {
- members.put(member.getName(),member);
+ public void setReferenceMember(String name, Member member) {
+ members.put(name,member);
}
- public Map<String,Member> getMembers() {
+ public Map<String,Member> getReferenceMembers() {
return members;
}
Added:
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java?rev=406305&view=auto
==============================================================================
---
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
(added)
+++
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
Sun May 14 03:18:29 2006
@@ -0,0 +1,71 @@
+package org.apache.tuscany.core.system.builder;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.common.ObjectFactory;
+import org.apache.tuscany.core.injection.FieldInjector;
+import org.apache.tuscany.core.injection.Injector;
+import org.apache.tuscany.core.injection.LazyIntraCompositeResolver;
+import org.apache.tuscany.core.injection.MethodInjector;
+import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.model.PojoComponentType;
+import org.apache.tuscany.core.system.context.SystemAtomicContextImpl;
+import org.apache.tuscany.core.system.model.SystemImplementation;
+import org.apache.tuscany.core.util.JavaIntrospectionHelper;
+import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.ReferenceTarget;
+import org.apache.tuscany.model.Service;
+import org.apache.tuscany.spi.QualifiedName;
+import org.apache.tuscany.spi.builder.BuilderConfigException;
+import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.Context;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
[EMAIL PROTECTED]("unchecked")
+public class SystemComponentBuilder implements
ComponentBuilder<SystemImplementation> {
+ public Context build(CompositeContext parent,
Component<SystemImplementation> component) throws BuilderConfigException {
+ PojoComponentType componentType =
component.getImplementation().getComponentType();
+ List<Class<?>> serviceInterfaces = new ArrayList<Class<?>>();
+ for (Service service : componentType.getServices().values()) {
+ serviceInterfaces.add(service.getServiceContract().getInteface());
+ }
+ Constructor<?> constr;
+ try {
+ constr = JavaIntrospectionHelper.getDefaultConstructor(
+ component.getImplementation().getImplementationClass());
+ } catch (NoSuchMethodException e) {
+ BuilderConfigException bce = new BuilderConfigException("Error
building component", e);
+ bce.setIdentifier(component.getName());
+ bce.addContextName(parent.getName());
+ throw bce;
+ }
+ ObjectFactory<?> factory = new PojoObjectFactory(constr);
+ List<Injector> injectors = new ArrayList<Injector>();
+ injectors.addAll(componentType.getInjectors());
+ for (ReferenceTarget target :
component.getReferenceTargets().values()) {
+ LazyIntraCompositeResolver resolver = new
LazyIntraCompositeResolver(parent, new
QualifiedName(target.getTarget().getPath()));
+ Member member =
componentType.getReferenceMember(target.getReferenceName());
+ if (member == null) {
+ BuilderConfigException e = new
BuilderConfigException("Reference not found");
+ e.setIdentifier(target.getReferenceName());
+ e.addContextName(component.getName());
+ e.addContextName(parent.getName());
+ throw e;
+ } else if (member instanceof Field) {
+ injectors.add(new FieldInjector((Field) member, resolver));
+ } else if (member instanceof Method) {
+ injectors.add(new MethodInjector((Method) member, resolver));
+ }
+ }
+ return new SystemAtomicContextImpl(component.getName(),
serviceInterfaces, factory,
+ componentType.isEagerInit(), componentType.getInitInvoker(),
componentType.getDestroyInvoker(), injectors);
+ }
+}
Modified:
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java?rev=406305&r1=406304&r2=406305&view=diff
==============================================================================
---
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
(original)
+++
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
Sun May 14 03:18:29 2006
@@ -16,13 +16,13 @@
*/
package org.apache.tuscany.core.system.model;
+import org.apache.tuscany.core.model.PojoComponentType;
import org.apache.tuscany.model.AtomicImplementation;
-import org.apache.tuscany.model.ComponentType;
/**
* @version $Rev$ $Date$
*/
-public class SystemImplementation extends AtomicImplementation<ComponentType> {
+public class SystemImplementation extends
AtomicImplementation<PojoComponentType> {
private Class<?> implementationClass;
public Class<?> getImplementationClass() {
Modified:
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java?rev=406305&r1=406304&r2=406305&view=diff
==============================================================================
---
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java
(original)
+++
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java
Sun May 14 03:18:29 2006
@@ -21,6 +21,15 @@
*/
public abstract class ServiceContract extends ModelObject {
private InteractionScope interactionScope;
+ private Class<?> intefaze;
+
+ public Class<?> getInteface() {
+ return intefaze;
+ }
+
+ public void setIntefaze(Class<?> intefaze) {
+ this.intefaze = intefaze;
+ }
public InteractionScope getInteractionScope() {
return interactionScope;
@@ -29,4 +38,5 @@
public void setInteractionScope(InteractionScope interactionScope) {
this.interactionScope = interactionScope;
}
+
}