Author: rfeng
Date: Tue Aug 24 22:34:52 2010
New Revision: 988747
URL: http://svn.apache.org/viewvc?rev=988747&view=rev
Log:
Populate intents and policySets from sca:reference and sca:service elements
Modified:
tuscany/sca-java-2.x/trunk/itest/implementation-spring/src/main/resources/sca/services/META-INF/spring/SpringExplicitService-context.xml
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaNamespaceHandler.java
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaReferenceBeanDefinitionParser.java
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaServiceBeanDefinitionParser.java
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/processor/SpringXMLBeanDefinitionLoaderImpl.java
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/resources/META-INF/spring.handlers
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAReferenceElement.java
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAServiceElement.java
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
Modified:
tuscany/sca-java-2.x/trunk/itest/implementation-spring/src/main/resources/sca/services/META-INF/spring/SpringExplicitService-context.xml
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/itest/implementation-spring/src/main/resources/sca/services/META-INF/spring/SpringExplicitService-context.xml?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/itest/implementation-spring/src/main/resources/sca/services/META-INF/spring/SpringExplicitService-context.xml
(original)
+++
tuscany/sca-java-2.x/trunk/itest/implementation-spring/src/main/resources/sca/services/META-INF/spring/SpringExplicitService-context.xml
Tue Aug 24 22:34:52 2010
@@ -23,6 +23,7 @@ explicitly using an sca:service element
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sca="http://www.springframework.org/schema/sca"
+ xmlns:spec="http://docs.oasis-open.org/ns/opencsa/sca/200912"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/sca
http://www.osoa.org/xmlns/sca/1.0/spring-sca.xsd">
@@ -30,6 +31,7 @@ http://www.springframework.org/schema/sc
<sca:service name="fooService"
type="helloworld.HelloWorld"
target="testBean"/>
+ <!-- requires="spec:serverAuthentication" -->
<bean id="testBean"
class="mock.TestHelloWorldBean"
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaNamespaceHandler.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaNamespaceHandler.java?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaNamespaceHandler.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaNamespaceHandler.java
Tue Aug 24 22:34:52 2010
@@ -16,7 +16,15 @@
*/
package org.apache.tuscany.sca.implementation.spring.namespace;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import javax.xml.namespace.QName;
+
import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
/**
* Handler for the <sca:> namespace in an application context
@@ -35,4 +43,51 @@ public class ScaNamespaceHandler extends
registerBeanDefinitionParser("property", new
ScaPropertyBeanDefinitionParser());
}
+ private static String getNamespaceURI(Element element, String prefix) {
+ if (element == null) {
+ return null;
+ }
+ String name = ("".equals(prefix)) ? "xmlns" : "xmlns:" + prefix;
+ String ns = element.getAttribute(name);
+ if (ns != null && !"".equals(ns)) {
+ return ns;
+ }
+ Node parent = element.getParentNode();
+ if (parent instanceof Element) {
+ return getNamespaceURI((Element)parent, prefix);
+ } else {
+ return null;
+ }
+ }
+
+ public static List<QName> resolve(Element element, String listOfNames) {
+ List<QName> qnames = new ArrayList<QName>();
+ StringTokenizer tokenizer = new StringTokenizer(listOfNames);
+ while (tokenizer.hasMoreTokens()) {
+ String qname = tokenizer.nextToken();
+ String prefix = "";
+ String local = qname;
+ int index = qname.indexOf(':');
+ if (index != -1) {
+ local = qname.substring(index + 1);
+ prefix = qname.substring(0, index);
+ }
+ String ns = getNamespaceURI(element, prefix);
+ if (ns != null) {
+ qnames.add(new QName(ns, local, prefix));
+ } else {
+ throw new IllegalArgumentException("Prefix " + prefix + "is
not bound to a namespace");
+ }
+ }
+ return qnames;
+ }
+
+ public static String getAttribute(Element element, String name) {
+ String attr = element.getAttributeNS(null, name);
+ if ("".equals(attr)) {
+ return null;
+ } else {
+ return attr;
+ }
+ }
}
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaReferenceBeanDefinitionParser.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaReferenceBeanDefinitionParser.java?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaReferenceBeanDefinitionParser.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaReferenceBeanDefinitionParser.java
Tue Aug 24 22:34:52 2010
@@ -16,6 +16,12 @@
*/
package org.apache.tuscany.sca.implementation.spring.namespace;
+import static
org.apache.tuscany.sca.implementation.spring.namespace.ScaNamespaceHandler.getAttribute;
+
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.sca.implementation.spring.SpringSCAReferenceElement;
import
org.apache.tuscany.sca.implementation.spring.context.SCAGenericApplicationContext;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -36,9 +42,21 @@ public class ScaReferenceBeanDefinitionP
if (registry instanceof SCAGenericApplicationContext) {
SCAGenericApplicationContext context =
(SCAGenericApplicationContext)registry;
SpringSCAReferenceElement referenceElement =
- new SpringSCAReferenceElement(element.getAttributeNS(null,
"name"),
- element.getAttributeNS(null,
"type"));
- referenceElement.setDefaultBean(element.getAttributeNS(null,
"default"));
+ new SpringSCAReferenceElement(getAttribute(element, "name"),
getAttribute(element, "type"));
+ referenceElement.setDefaultBean(getAttribute(element, "default"));
+
+ String requires = getAttribute(element, "requires");
+ if (requires != null) {
+ List<QName> qnames = ScaNamespaceHandler.resolve(element,
requires);
+ referenceElement.getIntentNames().addAll(qnames);
+ }
+
+ String policySets = getAttribute(element, "policySets");
+ if (policySets != null) {
+ List<QName> qnames = ScaNamespaceHandler.resolve(element,
policySets);
+ referenceElement.getPolicySetNames().addAll(qnames);
+ }
+
context.addSCAReferenceElement(referenceElement);
}
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaServiceBeanDefinitionParser.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaServiceBeanDefinitionParser.java?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaServiceBeanDefinitionParser.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/namespace/ScaServiceBeanDefinitionParser.java
Tue Aug 24 22:34:52 2010
@@ -16,6 +16,12 @@
*/
package org.apache.tuscany.sca.implementation.spring.namespace;
+import static
org.apache.tuscany.sca.implementation.spring.namespace.ScaNamespaceHandler.getAttribute;
+
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.sca.implementation.spring.SpringSCAServiceElement;
import
org.apache.tuscany.sca.implementation.spring.context.SCAGenericApplicationContext;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -36,9 +42,21 @@ public class ScaServiceBeanDefinitionPar
if (registry instanceof SCAGenericApplicationContext) {
SCAGenericApplicationContext context =
(SCAGenericApplicationContext)registry;
SpringSCAServiceElement serviceElement =
- new SpringSCAServiceElement(element.getAttributeNS(null,
"name"),
- element.getAttributeNS(null,
"target"));
- serviceElement.setType(element.getAttributeNS(null, "type"));
+ new SpringSCAServiceElement(getAttribute(element, "name"),
getAttribute(element, "target"));
+ serviceElement.setType(getAttribute(element, "type"));
+
+ String requires = getAttribute(element, "requires");
+ if (requires != null) {
+ List<QName> qnames = ScaNamespaceHandler.resolve(element,
requires);
+ serviceElement.getIntentNames().addAll(qnames);
+ }
+
+ String policySets = getAttribute(element, "policySets");
+ if (policySets != null) {
+ List<QName> qnames = ScaNamespaceHandler.resolve(element,
policySets);
+ serviceElement.getPolicySetNames().addAll(qnames);
+ }
+
context.addSCAServiceElement(serviceElement);
}
// do nothing, handled by Tuscany
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/processor/SpringXMLBeanDefinitionLoaderImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/processor/SpringXMLBeanDefinitionLoaderImpl.java?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/processor/SpringXMLBeanDefinitionLoaderImpl.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/java/org/apache/tuscany/sca/implementation/spring/processor/SpringXMLBeanDefinitionLoaderImpl.java
Tue Aug 24 22:34:52 2010
@@ -67,6 +67,7 @@ public class SpringXMLBeanDefinitionLoad
List<SpringSCAPropertyElement> propertyElements,
List<SpringBeanElement> beanElements,
ProcessorContext context) {
+ // FIXME: [rfeng] We should try to avoid parsing the Spring xml twice
for the deployment and runtime
SCAGenericApplicationContext applicationContext =
createApplicationContext(null, null, resources);
serviceElements.addAll(applicationContext.getServiceElements());
referenceElements.addAll(applicationContext.getReferenceElements());
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/resources/META-INF/spring.handlers
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/resources/META-INF/spring.handlers?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/resources/META-INF/spring.handlers
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring-runtime/src/main/resources/META-INF/spring.handlers
Tue Aug 24 22:34:52 2010
@@ -1 +1,2 @@
http\://www.springframework.org/schema/sca=org.apache.tuscany.sca.implementation.spring.namespace.ScaNamespaceHandler
+http\://docs.oasis-open.org/ns/opencsa/sca-j/spring/200810=org.apache.tuscany.sca.implementation.spring.namespace.ScaNamespaceHandler
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAReferenceElement.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAReferenceElement.java?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAReferenceElement.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAReferenceElement.java
Tue Aug 24 22:34:52 2010
@@ -21,6 +21,8 @@ package org.apache.tuscany.sca.implement
import java.util.ArrayList;
import java.util.List;
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.PolicySet;
@@ -39,6 +41,9 @@ public class SpringSCAReferenceElement {
private List<Intent> intents = new ArrayList<Intent>();
private List<PolicySet> policySets = new ArrayList<PolicySet>();
+ private List<QName> intentNames = new ArrayList<QName>();
+ private List<QName> policySetNames = new ArrayList<QName>();
+
public SpringSCAReferenceElement() {
}
@@ -80,12 +85,21 @@ public class SpringSCAReferenceElement {
return policySets;
}
+ public List<QName> getIntentNames() {
+ return intentNames;
+ }
+
+ public List<QName> getPolicySetNames() {
+ return policySetNames;
+ }
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("SpringSCAReferenceElement
[name=").append(name).append(", type=").append(type)
.append(", defaultBean=").append(defaultBean).append(",
intents=").append(intents).append(", policySets=")
- .append(policySets).append("]");
+ .append(policySets).append(",
intentNames=").append(intentNames).append(", policySetNames=")
+ .append(policySetNames).append("]");
return builder.toString();
}
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAServiceElement.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAServiceElement.java?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAServiceElement.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringSCAServiceElement.java
Tue Aug 24 22:34:52 2010
@@ -21,6 +21,8 @@ package org.apache.tuscany.sca.implement
import java.util.ArrayList;
import java.util.List;
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.PolicySet;
@@ -38,6 +40,8 @@ public class SpringSCAServiceElement {
private String target;
private List<Intent> intents = new ArrayList<Intent>();
private List<PolicySet> policySets = new ArrayList<PolicySet>();
+ private List<QName> intentNames = new ArrayList<QName>();
+ private List<QName> policySetNames = new ArrayList<QName>();
public SpringSCAServiceElement() {
@@ -80,12 +84,21 @@ public class SpringSCAServiceElement {
return policySets;
}
+ public List<QName> getIntentNames() {
+ return intentNames;
+ }
+
+ public List<QName> getPolicySetNames() {
+ return policySetNames;
+ }
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("SpringSCAServiceElement
[name=").append(name).append(", type=").append(type)
.append(", target=").append(target).append(",
intents=").append(intents).append(", policySets=")
- .append(policySets).append("]");
+ .append(policySets).append(",
intentNames=").append(intentNames).append(", policySetNames=")
+ .append(policySetNames).append("]");
return builder.toString();
}
Modified:
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java?rev=988747&r1=988746&r2=988747&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/introspect/SpringXMLComponentTypeLoader.java
Tue Aug 24 22:34:52 2010
@@ -41,6 +41,8 @@ import java.util.jar.Manifest;
import java.util.logging.Level;
import java.util.logging.Logger;
+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;
@@ -76,6 +78,9 @@ import org.apache.tuscany.sca.interfaced
import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.monitor.Problem;
import org.apache.tuscany.sca.monitor.Problem.Severity;
+import org.apache.tuscany.sca.policy.Intent;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+import org.apache.tuscany.sca.policy.PolicySet;
/**
* Introspects a Spring XML application-context configuration file to create
<implementation-spring../>
@@ -89,6 +94,7 @@ public class SpringXMLComponentTypeLoade
private ExtensionPointRegistry registry;
private ContributionFactory contributionFactory;
private AssemblyFactory assemblyFactory;
+ private PolicyFactory policyFactory;
private JavaInterfaceFactory javaFactory;
private SpringBeanIntrospector beanIntrospector;
@@ -99,6 +105,7 @@ public class SpringXMLComponentTypeLoade
this.registry = registry;
FactoryExtensionPoint factories =
registry.getExtensionPoint(FactoryExtensionPoint.class);
this.assemblyFactory = factories.getFactory(AssemblyFactory.class);
+ this.policyFactory = factories.getFactory(PolicyFactory.class);
this.javaFactory = factories.getFactory(JavaInterfaceFactory.class);
this.contributionFactory =
factories.getFactory(ContributionFactory.class);
this.xmlBeanDefinitionLoader =
@@ -219,6 +226,7 @@ public class SpringXMLComponentTypeLoade
appCxtProperties,
appCxtBeans,
context);
+ populatePolicies(appCxtServices, appCxtReferences);
}
// Validate the beans from individual application context for
uniqueness
validateBeans(appCxtBeans, appCxtServices, appCxtReferences,
appCxtProperties, context.getMonitor());
@@ -239,6 +247,35 @@ public class SpringXMLComponentTypeLoade
return;
} // end method loadFromXML
+ public void populatePolicies(List<SpringSCAServiceElement> appCxtServices,
+ List<SpringSCAReferenceElement>
appCxtReferences) {
+ for (SpringSCAReferenceElement e : appCxtReferences) {
+ for (QName qn : e.getIntentNames()) {
+ Intent intent = policyFactory.createIntent();
+ intent.setName(qn);
+ e.getRequiredIntents().add(intent);
+ }
+ for (QName qn : e.getPolicySetNames()) {
+ PolicySet ps = policyFactory.createPolicySet();
+ ps.setName(qn);
+ e.getPolicySets().add(ps);
+ }
+ }
+
+ for (SpringSCAServiceElement e : appCxtServices) {
+ for (QName qn : e.getIntentNames()) {
+ Intent intent = policyFactory.createIntent();
+ intent.setName(qn);
+ e.getRequiredIntents().add(intent);
+ }
+ for (QName qn : e.getPolicySetNames()) {
+ PolicySet ps = policyFactory.createPolicySet();
+ ps.setName(qn);
+ e.getPolicySets().add(ps);
+ }
+ }
+ }
+
private URL resolveLocation(ModelResolver resolver, String contextPath,
ProcessorContext context)
throws MalformedURLException, ContributionReadException {
URL resource = null;