summaryrefslogtreecommitdiffstats
path: root/sandbox/event/modules/binding-event/src/main/java/org/apache/tuscany/sca/binding/event/impl/EventReferenceBindingProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/event/modules/binding-event/src/main/java/org/apache/tuscany/sca/binding/event/impl/EventReferenceBindingProvider.java')
-rw-r--r--sandbox/event/modules/binding-event/src/main/java/org/apache/tuscany/sca/binding/event/impl/EventReferenceBindingProvider.java57
1 files changed, 49 insertions, 8 deletions
diff --git a/sandbox/event/modules/binding-event/src/main/java/org/apache/tuscany/sca/binding/event/impl/EventReferenceBindingProvider.java b/sandbox/event/modules/binding-event/src/main/java/org/apache/tuscany/sca/binding/event/impl/EventReferenceBindingProvider.java
index bb09fb5b77..6faa1fbf6f 100644
--- a/sandbox/event/modules/binding-event/src/main/java/org/apache/tuscany/sca/binding/event/impl/EventReferenceBindingProvider.java
+++ b/sandbox/event/modules/binding-event/src/main/java/org/apache/tuscany/sca/binding/event/impl/EventReferenceBindingProvider.java
@@ -21,10 +21,17 @@ package org.apache.tuscany.sca.binding.event.impl;
import java.util.logging.Logger;
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.binding.event.DefaultEventBindingFactory;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.PolicyProvider;
+import org.apache.tuscany.sca.provider.PolicyProviderFactory;
+import org.apache.tuscany.sca.provider.ProviderFactoryExtensionPoint;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
@@ -36,18 +43,20 @@ import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
*/
public class EventReferenceBindingProvider implements ReferenceBindingProvider {
- @SuppressWarnings("unused")
private static final Logger logger = Logger.getLogger(EventReferenceBindingProvider.class.getName());
@SuppressWarnings("unused")
private RuntimeComponent component;
@SuppressWarnings("unused")
private EventBindingImpl binding;
+ @SuppressWarnings("unused")
private RuntimeComponentReference reference;
private boolean started = false;
private ReferenceBindingProvider baseBindingProvider;
+
+ @SuppressWarnings("unchecked")
public EventReferenceBindingProvider(ExtensionPointRegistry extensionPoints,
RuntimeComponent component,
RuntimeComponentReference reference,
@@ -55,17 +64,47 @@ public class EventReferenceBindingProvider implements ReferenceBindingProvider {
this.component = component;
this.reference = reference;
this.binding = binding;
+
+
+ ProviderFactoryExtensionPoint providerFactories = extensionPoints.getExtensionPoint(ProviderFactoryExtensionPoint.class);
+ ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
+
+
+ Binding baseBinding = binding.getBaseBinding();
+ if (baseBinding == null) {
+
+ DefaultEventBindingFactory defaultEventBindingFactory =
+ (DefaultEventBindingFactory)modelFactories.getFactory(DefaultEventBindingFactory.class);
+
+ if (defaultEventBindingFactory == null) {
+ logger.severe("Default binding for Event binding not available");
+ }
+ baseBinding = binding.createDefaultBaseBinding(defaultEventBindingFactory);
+ }
- // TODO: Set baseBindingProvider
+ BindingProviderFactory providerFactory =
+ (BindingProviderFactory)providerFactories.getProviderFactory(baseBinding.getClass());
+ if (providerFactory != null) {
+ baseBindingProvider =
+ providerFactory.createReferenceBindingProvider((RuntimeComponent)component,
+ (RuntimeComponentReference)reference,
+ baseBinding);
+ for (PolicyProviderFactory f : providerFactories.getPolicyProviderFactories()) {
+ PolicyProvider policyProvider = f.createReferencePolicyProvider(component, reference, baseBinding);
+ if (policyProvider != null) {
+ reference.addPolicyProvider(baseBinding, policyProvider);
+ }
+ }
+ }
+ if (baseBindingProvider == null) {
+ throw new IllegalStateException("Provider factory not found for class: " + baseBinding.getClass().getName());
+ }
+
}
public InterfaceContract getBindingInterfaceContract() {
- if (reference.getReference() != null) {
- return reference.getReference().getInterfaceContract();
- } else {
- return reference.getInterfaceContract();
- }
+ return baseBindingProvider.getBindingInterfaceContract();
}
public boolean supportsOneWayInvocation() {
@@ -74,13 +113,14 @@ public class EventReferenceBindingProvider implements ReferenceBindingProvider {
public Invoker createInvoker(Operation operation) {
- return baseBindingProvider.createInvoker(operation);
+ return new EventBindingInvoker(baseBindingProvider, operation);
}
public void start() {
if (started) {
return;
} else {
+ baseBindingProvider.start();
started = true;
}
}
@@ -89,6 +129,7 @@ public class EventReferenceBindingProvider implements ReferenceBindingProvider {
if (!started) {
return;
} else {
+ baseBindingProvider.stop();
started = false;
}