summaryrefslogtreecommitdiffstats
path: root/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider')
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProvider.java115
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProviderFactory.java38
-rw-r--r--sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java163
3 files changed, 316 insertions, 0 deletions
diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProvider.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProvider.java
new file mode 100644
index 0000000000..2eb3dbdf58
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProvider.java
@@ -0,0 +1,115 @@
+/*
+ * 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.implementation.guardian.provider;
+
+import org.apache.tuscany.sca.implementation.guardian.impl.*;
+import java.util.Iterator;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.tuscany.sca.implementation.guardian.GuardianGroup;
+import org.apache.tuscany.sca.implementation.guardian.GuardianGroupImplementation;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.implementation.guardian.common.Constants;
+
+public class GuardianGroupImplementationProvider implements ImplementationProvider {
+
+ private GuardianGroupImplementation implementation;
+ private GuardianGroupImpl guardian;
+
+ public GuardianGroupImplementationProvider(RuntimeComponent component, GuardianGroupImplementation implementation) {
+ this.implementation = implementation;
+ this.guardian = createGuardian(implementation.getGuardianProperties());
+ }
+
+ private GuardianGroupImpl createGuardian(OMElement guardianProperties) {
+ GuardianGroupImpl guardian = null;
+
+ String recoveryRules = null;
+ String resolutionTrees = null;
+
+ OMAttribute at;
+ Iterator it = guardianProperties.getAllAttributes();
+ while (it.hasNext()) {
+ at = (OMAttribute) it.next();
+
+ if (at.getLocalName().equals(Constants.RECOVERY_RULES)) {
+ recoveryRules = at.getAttributeValue();
+ } else if (at.getLocalName().equals(Constants.RESOLUTION_TREES)) {
+ resolutionTrees = at.getAttributeValue();
+ }
+ }
+
+ if (recoveryRules != null && resolutionTrees != null) {
+ guardian = new GuardianGroupImpl(recoveryRules, resolutionTrees);
+ }
+
+ return guardian;
+ }
+
+ public void start() {
+ }
+
+ public void stop() {
+ }
+
+ public Invoker createInvoker(RuntimeComponentService service, Operation operation) {
+ String operationName = operation.getName();
+ String interfaceFullName = operation.getInterface().toString();
+
+ //GuardianGroup interface
+ if (interfaceFullName.equals(GuardianGroup.class.getName())) {
+
+ //Why is the createInvoker ivoked 'n' static inner class times?
+ //System.out.println("NAME: " + operationName);
+
+ //public void addGuardianMember(GuardianMember guardianMember)
+ if (operationName.equals("addGuardianMember")) {
+ return new GuardianGroupInvoker.AddGuardianMemberInvoker(guardian);
+ } //public boolean removeGuardianMember(GuardianMember guardianMember)
+ else if (operationName.equals("removeGuardianMember")) {
+ return new GuardianGroupInvoker.RemoveGuardianMemberInvoker(guardian);
+ } //public void enableContext(Context context);
+ else if (operationName.equals("enableContext")) {
+ return new GuardianGroupInvoker.EnableContextInvoker(guardian);
+ } //public void removeContext();
+ else if (operationName.equals("removeContext")) {
+ return new GuardianGroupInvoker.RemoveContextInvoker(guardian);
+ } //public void gthrow(GlobalExceptionInterface ex, List<String> participantList);
+ else if (operationName.equals("gthrow")) {
+ return new GuardianGroupInvoker.GthrowInvoker(guardian);
+ } //public boolean propagate(GlobalExceptionInterface ex);
+ else if (operationName.equals("propagate")) {
+ return new GuardianGroupInvoker.PropagateInvoker(guardian);
+ } //public void checkExceptionStatus() throws GlobalException;
+ else if (operationName.equals("checkExceptionStatus")) {
+ return new GuardianGroupInvoker.CheckExceptionStatusInvoker(guardian);
+ }
+ }
+
+ return new GuardianGroupInvoker(null);
+ }
+
+ public boolean supportsOneWayInvocation() {
+ return false;
+ }
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProviderFactory.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProviderFactory.java
new file mode 100644
index 0000000000..a42c35506d
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupImplementationProviderFactory.java
@@ -0,0 +1,38 @@
+/*
+ * 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.implementation.guardian.provider;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.implementation.guardian.GuardianGroupImplementation;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.provider.ImplementationProviderFactory;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+
+public class GuardianGroupImplementationProviderFactory implements ImplementationProviderFactory<GuardianGroupImplementation> {
+ public GuardianGroupImplementationProviderFactory(ExtensionPointRegistry extensionPoints) {
+ }
+
+ public ImplementationProvider createImplementationProvider(RuntimeComponent component, GuardianGroupImplementation implementation) {
+ return new GuardianGroupImplementationProvider(component, implementation);
+ }
+
+ public Class<GuardianGroupImplementation> getModelType() {
+ return GuardianGroupImplementation.class;
+ }
+}
diff --git a/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java
new file mode 100644
index 0000000000..8f393ebcb9
--- /dev/null
+++ b/sandbox/dougsleite/implementation-guardian/src/main/java/org/apache/tuscany/sca/implementation/guardian/provider/GuardianGroupInvoker.java
@@ -0,0 +1,163 @@
+/*
+ * 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.implementation.guardian.provider;
+
+import org.apache.tuscany.sca.implementation.guardian.impl.*;
+import java.util.List;
+import org.apache.tuscany.sca.implementation.guardian.GuardianMember;
+import org.apache.tuscany.sca.implementation.guardian.common.Context;
+import org.apache.tuscany.sca.implementation.guardian.common.GlobalExceptionInterface;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+
+public class GuardianGroupInvoker implements Invoker {
+
+ protected final GuardianGroupImpl guardian;
+
+ public GuardianGroupInvoker(GuardianGroupImpl guardian) {
+ this.guardian = guardian;
+ }
+
+ public Message invoke(Message arg0) {
+ throw new UnsupportedOperationException("Not supported yet. 1");
+ }
+
+ //AddGuardianMember operation invoker
+ public static class AddGuardianMemberInvoker extends GuardianGroupInvoker {
+
+ public AddGuardianMemberInvoker(GuardianGroupImpl guardian) {
+ super(guardian);
+ }
+
+ @Override
+ public Message invoke(Message msg) {
+
+ GuardianMember guardianMember = (GuardianMember) ((Object[]) msg.getBody())[0];
+ this.guardian.addGuardianMember(guardianMember);
+
+ return msg;
+ }
+ }
+
+ //RemoveGuardianMember operation invoker
+ public static class RemoveGuardianMemberInvoker extends GuardianGroupInvoker {
+
+ public RemoveGuardianMemberInvoker(GuardianGroupImpl guardian) {
+ super(guardian);
+ }
+
+ @Override
+ public Message invoke(Message msg) {
+
+ GuardianMember guardianMember = (GuardianMember) ((Object[]) msg.getBody())[0];
+ boolean returnedValue = this.guardian.removeGuardianMember(guardianMember);
+
+ msg.setBody(returnedValue);
+ return msg;
+ }
+ }
+
+ //EnableContext operation invoker
+ public static class EnableContextInvoker extends GuardianGroupInvoker {
+
+ public EnableContextInvoker(GuardianGroupImpl guardian) {
+ super(guardian);
+ }
+
+ @Override
+ public Message invoke(Message msg) {
+
+ Context context = (Context) ((Object[]) msg.getBody())[0];
+
+ this.guardian.enableContext(context);
+
+ return msg;
+ }
+ }
+
+ //RemoveContext operation invoker
+ public static class RemoveContextInvoker extends GuardianGroupInvoker {
+
+ public RemoveContextInvoker(GuardianGroupImpl guardian) {
+ super(guardian);
+ }
+
+ @Override
+ public Message invoke(Message msg) {
+
+ this.guardian.removeContext();
+
+ return msg;
+ }
+ }
+
+ //Gthrow operation invoker
+ public static class GthrowInvoker extends GuardianGroupInvoker {
+
+ public GthrowInvoker(GuardianGroupImpl guardian) {
+ super(guardian);
+ }
+
+ @Override
+ public Message invoke(Message msg) {
+
+ GlobalExceptionInterface ex = (GlobalExceptionInterface) ((Object[]) msg.getBody())[0];
+ List<String> participantList = (List<String>) ((Object[]) msg.getBody())[1];
+
+ this.guardian.gthrow(ex, participantList);
+
+ return msg;
+ }
+ }
+
+ //Propagate operation invoker
+ public static class PropagateInvoker extends GuardianGroupInvoker {
+
+ public PropagateInvoker(GuardianGroupImpl guardian) {
+ super(guardian);
+ }
+
+ @Override
+ public Message invoke(Message msg) {
+
+ GlobalExceptionInterface ex = (GlobalExceptionInterface) ((Object[]) msg.getBody())[0];
+
+ boolean needPropagation = this.guardian.propagate(ex);
+ msg.setBody(needPropagation);
+
+ return msg;
+ }
+ }
+
+ //CheckExceptionStatus operation invoker
+ public static class CheckExceptionStatusInvoker extends GuardianGroupInvoker {
+
+ public CheckExceptionStatusInvoker(GuardianGroupImpl guardian) {
+ super(guardian);
+ }
+
+ @Override
+ public Message invoke(Message msg) {
+
+ this.guardian.checkExceptionStatus();
+
+ return msg;
+ }
+ }
+}