From 614a2e5ec9d9f1ddebf2e100d3ec82032d72af02 Mon Sep 17 00:00:00 2001 From: beckerdo Date: Thu, 19 Feb 2009 16:02:03 +0000 Subject: TUSCANY-2849 Unable to define operation-level intents on binding.jms git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@745909 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/sca/binding/jms/impl/JMSBinding.java | 18 +++++++++- .../sca/binding/jms/impl/JMSBindingProcessor.java | 38 ++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) (limited to 'branches/sca-java-1.x/modules/binding-jms/src/main') diff --git a/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBinding.java b/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBinding.java index d4542c6d5f..2236c7fee7 100644 --- a/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBinding.java +++ b/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBinding.java @@ -27,7 +27,9 @@ import java.util.Set; import java.util.TreeSet; import org.apache.tuscany.sca.assembly.BindingRRB; +import org.apache.tuscany.sca.assembly.ConfiguredOperation; import org.apache.tuscany.sca.assembly.OperationSelector; +import org.apache.tuscany.sca.assembly.OperationsConfigurator; import org.apache.tuscany.sca.assembly.WireFormat; import org.apache.tuscany.sca.policy.Intent; import org.apache.tuscany.sca.policy.IntentAttachPointType; @@ -40,7 +42,7 @@ import org.apache.tuscany.sca.policy.PolicySetAttachPoint; * @version $Rev$ $Date$ */ -public class JMSBinding implements BindingRRB, PolicySetAttachPoint { +public class JMSBinding implements BindingRRB, PolicySetAttachPoint, OperationsConfigurator { @Override public Object clone() throws CloneNotSupportedException { @@ -60,6 +62,9 @@ public class JMSBinding implements BindingRRB, PolicySetAttachPoint { // properties required by IntentAttachPoint private List requiredIntents = new ArrayList(); private IntentAttachPointType intentAttachPointType; + + // properties required to describe configured operations + private List configuredOperations = new ArrayList(); // Properties required to describe the JMS binding model @@ -727,6 +732,14 @@ public class JMSBinding implements BindingRRB, PolicySetAttachPoint { return operationPropertiesProperties.get(opName); } + public List getConfiguredOperations() { + return configuredOperations; + } + + public void setConfiguredOperations(List configuredOperations) { + this.configuredOperations = configuredOperations; + } + @Override public boolean equals( Object object ) { return ( object instanceof JMSBinding ) && equals( (JMSBinding) object ); @@ -786,6 +799,9 @@ public class JMSBinding implements BindingRRB, PolicySetAttachPoint { // Resource adapter if ( !optStringEquals( this.getResourceAdapterName(), binding.getResourceAdapterName() )) return false; + // Configured operations + if ( this.configuredOperations.size() != binding.getConfiguredOperations().size() ) return false; + // Other fields could also be checked for equality. See class fields for details. return true; } diff --git a/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java b/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java index 820d652895..6d6a14e191 100644 --- a/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java +++ b/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java @@ -24,6 +24,7 @@ import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.StringTokenizer; @@ -33,10 +34,13 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; +import org.apache.tuscany.sca.assembly.ConfiguredOperation; import org.apache.tuscany.sca.assembly.Extension; import org.apache.tuscany.sca.assembly.OperationSelector; +import org.apache.tuscany.sca.assembly.OperationsConfigurator; import org.apache.tuscany.sca.assembly.WireFormat; import org.apache.tuscany.sca.assembly.builder.impl.ProblemImpl; +import org.apache.tuscany.sca.assembly.xml.ConfiguredOperationProcessor; import org.apache.tuscany.sca.assembly.xml.Constants; import org.apache.tuscany.sca.assembly.xml.PolicyAttachPointProcessor; import org.apache.tuscany.sca.binding.jms.operationselector.jmsdefault.OperationSelectorJMSDefault; @@ -130,16 +134,21 @@ import org.apache.tuscany.sca.policy.PolicyFactory; public class JMSBindingProcessor implements StAXArtifactProcessor { private PolicyFactory policyFactory; private PolicyAttachPointProcessor policyProcessor; + private ConfiguredOperationProcessor configuredOperationProcessor; protected StAXArtifactProcessor extensionProcessor; private Monitor monitor; protected String validationMessage; + private ModelFactoryExtensionPoint modelFactories; // DOB public JMSBindingProcessor(ModelFactoryExtensionPoint modelFactories, StAXArtifactProcessor extensionProcessor, Monitor monitor) { this.policyFactory = modelFactories.getFactory(PolicyFactory.class); this.policyProcessor = new PolicyAttachPointProcessor(policyFactory); + this.configuredOperationProcessor = + new ConfiguredOperationProcessor(modelFactories, this.monitor); this.extensionProcessor = extensionProcessor; this.monitor = monitor; this.validationMessage = null; + this.modelFactories = modelFactories; } /** @@ -277,6 +286,11 @@ public class JMSBindingProcessor implements StAXArtifactProcessor { parseOperationProperties(reader, jmsBinding); } else if ("SubscriptionHeaders".equals(elementName)) { parseSubscriptionHeaders(reader, jmsBinding); + } else if (Constants.OPERATION_QNAME.equals(reader.getName())) { + ConfiguredOperation confOp = configuredOperationProcessor.read(reader); + if (confOp != null) { + ((OperationsConfigurator)jmsBinding).getConfiguredOperations().add(confOp); + } } else { Object extension = extensionProcessor.read(reader); if (extension != null) { @@ -929,6 +943,8 @@ public class JMSBindingProcessor implements StAXArtifactProcessor { writeResourceAdapterProperties( jmsBinding, writer ); + writeConfiguredOperations( jmsBinding, writer ); + writer.writeEndElement(); } @@ -1428,4 +1444,26 @@ public class JMSBindingProcessor implements StAXArtifactProcessor { writer.writeCharacters(" "); } + /** + * Writes configured operations if there are any. + * " + * " + * " + * " + * " + */ + private void writeConfiguredOperations( JMSBinding jmsBinding, XMLStreamWriter writer) throws XMLStreamException, ContributionWriteException { + List configOps = jmsBinding.getConfiguredOperations(); + if (configOps == null || (configOps.size() < 1)) { + return; + } + + for( Iterator it = configOps.iterator(); it.hasNext();) { + configuredOperationProcessor.write(it.next(), writer); + } + + // Strange bug. Without white space, headers end tag improperly read. + writer.writeCharacters(" "); + } + } -- cgit v1.2.3