diff options
Diffstat (limited to 'java/sca/modules/definitions-xml')
8 files changed, 342 insertions, 399 deletions
diff --git a/java/sca/modules/definitions-xml/pom.xml b/java/sca/modules/definitions-xml/pom.xml index f44236e304..9ba6587631 100644 --- a/java/sca/modules/definitions-xml/pom.xml +++ b/java/sca/modules/definitions-xml/pom.xml @@ -39,6 +39,7 @@ <groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-policy-xml</artifactId>
<version>2.0-SNAPSHOT</version>
+ <scope>runtime</scope>
</dependency>
<dependency>
diff --git a/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsDocumentProcessor.java b/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsDocumentProcessor.java index 6c3dca7bab..2f9c5d3379 100644 --- a/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsDocumentProcessor.java +++ b/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsDocumentProcessor.java @@ -27,8 +27,8 @@ import java.net.URLConnection; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; -import java.util.HashMap; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; import javax.xml.namespace.QName; import javax.xml.stream.XMLInputFactory; @@ -48,8 +48,9 @@ import org.apache.tuscany.sca.definitions.util.DefinitionsUtil; 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.BindingType; +import org.apache.tuscany.sca.policy.ImplementationType; import org.apache.tuscany.sca.policy.Intent; -import org.apache.tuscany.sca.policy.IntentAttachPointType; import org.apache.tuscany.sca.policy.PolicySet; /** @@ -73,9 +74,9 @@ public class DefinitionsDocumentProcessor implements URLArtifactProcessor<Defini * @param staxProcessor */ public DefinitionsDocumentProcessor(StAXArtifactProcessor<Object> staxProcessor, - XMLInputFactory inputFactory, - DefinitionsFactory definitionsFactory, - Monitor monitor) { + XMLInputFactory inputFactory, + DefinitionsFactory definitionsFactory, + Monitor monitor) { this.extensionProcessor = (StAXArtifactProcessor<Object>)staxProcessor; this.inputFactory = inputFactory; this.definitionsFactory = definitionsFactory; @@ -89,8 +90,8 @@ public class DefinitionsDocumentProcessor implements URLArtifactProcessor<Defini * @param staxProcessor */ public DefinitionsDocumentProcessor(FactoryExtensionPoint modelFactories, - StAXArtifactProcessor<Object> staxProcessor, - Monitor monitor) { + StAXArtifactProcessor<Object> staxProcessor, + Monitor monitor) { this.extensionProcessor = (StAXArtifactProcessor<Object>)staxProcessor; this.inputFactory = modelFactories.getFactory(XMLInputFactory.class); this.definitionsFactory = modelFactories.getFactory(DefinitionsFactory.class); @@ -198,36 +199,22 @@ public class DefinitionsDocumentProcessor implements URLArtifactProcessor<Defini } } } - + private static void stripDuplicates(Definitions scaDefns) { - Map<QName, Intent> definedIntents = new HashMap<QName, Intent>(); - for (Intent intent : scaDefns.getIntents()) { - definedIntents.put(intent.getName(), intent); - } + Set<Intent> definedIntents = new HashSet<Intent>(scaDefns.getIntents()); + Set<PolicySet> definedPolicySets = new HashSet<PolicySet>(scaDefns.getPolicySets()); + + Set<BindingType> definedBindingTypes = new HashSet<BindingType>(scaDefns.getBindingTypes()); + Set<ImplementationType> definedImplTypes = new HashSet<ImplementationType>(scaDefns.getImplementationTypes()); - Map<QName, PolicySet> definedPolicySets = new HashMap<QName, PolicySet>(); - for (PolicySet policySet : scaDefns.getPolicySets()) { - definedPolicySets.put(policySet.getName(), policySet); - } - - Map<QName, IntentAttachPointType> definedBindingTypes = new HashMap<QName, IntentAttachPointType>(); - for (IntentAttachPointType bindingType : scaDefns.getBindingTypes()) { - definedBindingTypes.put(bindingType.getName(), bindingType); - } - - Map<QName, IntentAttachPointType> definedImplTypes = new HashMap<QName, IntentAttachPointType>(); - for (IntentAttachPointType implType : scaDefns.getImplementationTypes()) { - definedImplTypes.put(implType.getName(), implType); - } - scaDefns.getIntents().clear(); - scaDefns.getIntents().addAll(definedIntents.values()); + scaDefns.getIntents().addAll(definedIntents); scaDefns.getPolicySets().clear(); - scaDefns.getPolicySets().addAll(definedPolicySets.values()); + scaDefns.getPolicySets().addAll(definedPolicySets); scaDefns.getBindingTypes().clear(); - scaDefns.getBindingTypes().addAll(definedBindingTypes.values()); + scaDefns.getBindingTypes().addAll(definedBindingTypes); scaDefns.getImplementationTypes().clear(); - scaDefns.getImplementationTypes().addAll(definedImplTypes.values()); + scaDefns.getImplementationTypes().addAll(definedImplTypes); } public void resolve(Definitions scaDefinitions, ModelResolver resolver) throws ContributionResolveException { @@ -236,7 +223,7 @@ public class DefinitionsDocumentProcessor implements URLArtifactProcessor<Defini } public String getArtifactType() { - return "definitions.xml"; + return "META-INF/definitions.xml"; } public Class<Definitions> getModelType() { diff --git a/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsProcessor.java b/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsProcessor.java index c65a9626ab..701d80711c 100644 --- a/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsProcessor.java +++ b/java/sca/modules/definitions-xml/src/main/java/org/apache/tuscany/sca/definitions/xml/DefinitionsProcessor.java @@ -39,14 +39,13 @@ import org.apache.tuscany.sca.contribution.processor.ContributionWriteException; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; import org.apache.tuscany.sca.core.FactoryExtensionPoint; -import org.apache.tuscany.sca.definitions.DefinitionsFactory; import org.apache.tuscany.sca.definitions.Definitions; +import org.apache.tuscany.sca.definitions.DefinitionsFactory; import org.apache.tuscany.sca.monitor.Monitor; +import org.apache.tuscany.sca.policy.BindingType; +import org.apache.tuscany.sca.policy.ImplementationType; import org.apache.tuscany.sca.policy.Intent; -import org.apache.tuscany.sca.policy.IntentAttachPointType; import org.apache.tuscany.sca.policy.PolicySet; -import org.apache.tuscany.sca.policy.ProfileIntent; -import org.apache.tuscany.sca.policy.QualifiedIntent; /** * Processor for SCA Definitions @@ -59,17 +58,17 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S private DefinitionsFactory definitionsFactory; private Monitor monitor; + public static final String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200712"; public static final String BINDING = "binding"; public static final String IMPLEMENTATION = "implementation"; - public static final String SCA10_NS = "http://www.osoa.org/xmlns/sca/1.0"; - public static final String SCA_DEFINITIONS = "definitions"; - public static final QName SCA_DEFINITIONS_QNAME = new QName(SCA10_NS, SCA_DEFINITIONS); + public static final String DEFINITIONS = "definitions"; + public static final QName DEFINITIONS_QNAME = new QName(SCA11_NS, DEFINITIONS); public static final String TARGET_NAMESPACE = "targetNamespace"; public static final String NAME = "name"; public DefinitionsProcessor(FactoryExtensionPoint factoryExtensionPoint, - StAXArtifactProcessor<Object> extensionProcessor, - Monitor monitor) { + StAXArtifactProcessor<Object> extensionProcessor, + Monitor monitor) { this.extensionProcessor = extensionProcessor; this.monitor = monitor; this.definitionsFactory = factoryExtensionPoint.getFactory(DefinitionsFactory.class); @@ -85,7 +84,7 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S switch (event) { case START_ELEMENT: { name = reader.getName(); - if (SCA_DEFINITIONS_QNAME.equals(name)) { + if (DEFINITIONS_QNAME.equals(name)) { definitions = definitionsFactory.createDefinitions(); targetNamespace = reader.getAttributeValue(null, TARGET_NAMESPACE); definitions.setTargetNamespace(targetNamespace); @@ -95,17 +94,10 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S if (extension instanceof Intent) { Intent intent = (Intent)extension; intent.setName(new QName(targetNamespace, intent.getName().getLocalPart())); - if (intent instanceof QualifiedIntent) { - QualifiedIntent qualifiedIntent = (QualifiedIntent)intent; - qualifiedIntent.getQualifiableIntent() - .setName(new QName(targetNamespace, qualifiedIntent.getQualifiableIntent() - .getName().getLocalPart())); - } - - // FIXME: Workaround for TUSCANY-2499 - intent.setUnresolved(false); - definitions.getIntents().add(intent); + for (Intent i : intent.getQualifiedIntents()) { + i.setName(new QName(targetNamespace, i.getName().getLocalPart())); + } } else if (extension instanceof PolicySet) { PolicySet policySet = (PolicySet)extension; policySet.setName(new QName(targetNamespace, policySet.getName().getLocalPart())); @@ -113,13 +105,10 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S } else if (extension instanceof Binding) { Binding binding = (Binding)extension; definitions.getBindings().add(binding); - } else if (extension instanceof IntentAttachPointType) { - IntentAttachPointType type = (IntentAttachPointType)extension; - if (type.getName().getLocalPart().startsWith(BINDING)) { - definitions.getBindingTypes().add((IntentAttachPointType)extension); - } else if (type.getName().getLocalPart().startsWith(IMPLEMENTATION)) { - definitions.getImplementationTypes().add((IntentAttachPointType)extension); - } + } else if (extension instanceof BindingType) { + definitions.getBindingTypes().add((BindingType)extension); + } else if (extension instanceof ImplementationType) { + definitions.getImplementationTypes().add((ImplementationType)extension); } } break; @@ -131,7 +120,7 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S case END_ELEMENT: name = reader.getName(); - if (SCA_DEFINITIONS_QNAME.equals(name)) { + if (DEFINITIONS_QNAME.equals(name)) { return definitions; } break; @@ -148,8 +137,7 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S public void write(Definitions definitions, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException { - writeStartDocument(writer, SCA10_NS, SCA_DEFINITIONS, new XAttr(TARGET_NAMESPACE, definitions - .getTargetNamespace())); + writeStartDocument(writer, SCA11_NS, DEFINITIONS, new XAttr(TARGET_NAMESPACE, definitions.getTargetNamespace())); for (Intent policyIntent : definitions.getIntents()) { extensionProcessor.write(policyIntent, writer); @@ -159,11 +147,11 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S extensionProcessor.write(policySet, writer); } - for (IntentAttachPointType bindingType : definitions.getBindingTypes()) { + for (BindingType bindingType : definitions.getBindingTypes()) { extensionProcessor.write(bindingType, writer); } - for (IntentAttachPointType implType : definitions.getImplementationTypes()) { + for (ImplementationType implType : definitions.getImplementationTypes()) { extensionProcessor.write(implType, writer); } @@ -175,71 +163,60 @@ public class DefinitionsProcessor extends BaseStAXArtifactProcessor implements S // are many cross artifact references in a definitions file and we don't want // to be dependent on the order things appear - List<Intent> simpleIntents = new ArrayList<Intent>(); - List<ProfileIntent> profileIntents = new ArrayList<ProfileIntent>(); - List<QualifiedIntent> qualifiedIntents = new ArrayList<QualifiedIntent>(); - List<PolicySet> simplePolicySets = new ArrayList<PolicySet>(); + List<Intent> intents = new ArrayList<Intent>(); + List<PolicySet> policySets = new ArrayList<PolicySet>(); List<PolicySet> referredPolicySets = new ArrayList<PolicySet>(); - for (Intent policyIntent : scaDefns.getIntents()) { - if (policyIntent instanceof ProfileIntent) - profileIntents.add((ProfileIntent)policyIntent); - else if (policyIntent instanceof QualifiedIntent) - qualifiedIntents.add((QualifiedIntent)policyIntent); - else - simpleIntents.add(policyIntent); - - resolver.addModel(policyIntent); + for (Intent intent : scaDefns.getIntents()) { + intents.add(intent); + resolver.addModel(intent); + for (Intent i : intent.getQualifiedIntents()) { + intents.add(i); + resolver.addModel(i); + } } for (PolicySet policySet : scaDefns.getPolicySets()) { - if (policySet.getReferencedPolicySets().isEmpty()) - simplePolicySets.add(policySet); - else + if (policySet.getReferencedPolicySets().isEmpty()) { + policySets.add(policySet); + } else { referredPolicySets.add(policySet); + } resolver.addModel(policySet); } - for (IntentAttachPointType bindingType : scaDefns.getBindingTypes()) { + for (BindingType bindingType : scaDefns.getBindingTypes()) { resolver.addModel(bindingType); } - for (IntentAttachPointType implType : scaDefns.getImplementationTypes()) { + for (ImplementationType implType : scaDefns.getImplementationTypes()) { resolver.addModel(implType); } // now resolve everything to ensure that any references between // artifacts are satisfied - for (Intent policyIntent : simpleIntents) - extensionProcessor.resolve(policyIntent, resolver); - - for (ProfileIntent policyIntent : profileIntents) - extensionProcessor.resolve(policyIntent, resolver); - - for (QualifiedIntent policyIntent : qualifiedIntents) + for (Intent policyIntent : intents) extensionProcessor.resolve(policyIntent, resolver); - for (PolicySet policySet : simplePolicySets) + for (PolicySet policySet : policySets) extensionProcessor.resolve(policySet, resolver); for (PolicySet policySet : referredPolicySets) extensionProcessor.resolve(policySet, resolver); - for (int count = 0, size = scaDefns.getBindingTypes().size(); count < size; count++) { - IntentAttachPointType bindingType = scaDefns.getBindingTypes().get(count); + for (BindingType bindingType : scaDefns.getBindingTypes()) { extensionProcessor.resolve(bindingType, resolver); } - for (int count = 0, size = scaDefns.getImplementationTypes().size(); count < size; count++) { - IntentAttachPointType implType = scaDefns.getImplementationTypes().get(count); - extensionProcessor.resolve(implType, resolver); + for (ImplementationType implementationType : scaDefns.getImplementationTypes()) { + extensionProcessor.resolve(implementationType, resolver); } } public QName getArtifactType() { - return SCA_DEFINITIONS_QNAME; + return DEFINITIONS_QNAME; } public Class<Definitions> getModelType() { diff --git a/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor index fa33150e87..7768f11565 100644 --- a/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor +++ b/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor @@ -16,4 +16,4 @@ # under the License. # Implementation class for the artifact processor extension -org.apache.tuscany.sca.definitions.xml.DefinitionsProcessor;qname=http://www.osoa.org/xmlns/sca/1.0#definitions,model=org.apache.tuscany.sca.definitions.Definitions +org.apache.tuscany.sca.definitions.xml.DefinitionsProcessor;qname=http://docs.oasis-open.org/ns/opencsa/sca/200712#definitions,model=org.apache.tuscany.sca.definitions.Definitions diff --git a/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor b/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor index 677aff9918..78cba6e6ab 100644 --- a/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor +++ b/java/sca/modules/definitions-xml/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor @@ -16,4 +16,4 @@ # under the License. # Implementation class for the artifact processor extension -org.apache.tuscany.sca.definitions.xml.DefinitionsDocumentProcessor;type=definitions.xml,model=org.apache.tuscany.sca.definitions.Definitions +org.apache.tuscany.sca.definitions.xml.DefinitionsDocumentProcessor;type=META-INF/definitions.xml,model=org.apache.tuscany.sca.definitions.Definitions diff --git a/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/ReadDocumentTestCase.java b/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/ReadDocumentTestCase.java index 2614bbacb4..69dedd2076 100644 --- a/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/ReadDocumentTestCase.java +++ b/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/ReadDocumentTestCase.java @@ -38,11 +38,12 @@ import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensi import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolver;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.policy.BindingType;
+import org.apache.tuscany.sca.policy.ImplementationType;
import org.apache.tuscany.sca.policy.Intent;
-import org.apache.tuscany.sca.policy.IntentAttachPointType;
+import org.apache.tuscany.sca.policy.IntentMap;
import org.apache.tuscany.sca.policy.PolicySet;
-import org.apache.tuscany.sca.policy.ProfileIntent;
-import org.apache.tuscany.sca.policy.QualifiedIntent;
+import org.apache.tuscany.sca.policy.Qualifier;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -57,16 +58,16 @@ public class ReadDocumentTestCase { private static Definitions definitions;
private static Map<QName, Intent> intentTable = new Hashtable<QName, Intent>();
private static Map<QName, PolicySet> policySetTable = new Hashtable<QName, PolicySet>();
- private static Map<QName, IntentAttachPointType> bindingTypesTable = new Hashtable<QName, IntentAttachPointType>();
- private static Map<QName, IntentAttachPointType> implTypesTable = new Hashtable<QName, IntentAttachPointType>();
- public static final String scaNamespace = "http://www.osoa.org/xmlns/sca/1.0";
+ private static Map<QName, BindingType> bindingTypesTable = new Hashtable<QName, BindingType>();
+ private static Map<QName, ImplementationType> implTypesTable = new Hashtable<QName, ImplementationType>();
+ public static final String scaNamespace = "http://docs.oasis-open.org/ns/opencsa/sca/200712";
public static final String namespace = "http://test";
-
+
private static final QName secureWsPolicy = new QName(namespace, "SecureWSPolicy");
private static final QName confidentiality = new QName(namespace, "confidentiality");
private static final QName integrity = new QName(namespace, "integrity");
private static final QName messageProtection = new QName(namespace, "messageProtection");
- private static final QName confidentiality_transport = new QName(namespace, "confidentiality.transport");
+ private static final QName confidentiality_transport = new QName(namespace, "confidentiality.transport");
private static final QName confidentiality_message = new QName(namespace, "confidentiality.message");
private static final QName secureReliablePolicy = new QName(namespace, "SecureReliablePolicy");
private static final QName secureMessagingPolicies = new QName(namespace, "SecureMessagingPolicies");
@@ -74,125 +75,152 @@ public class ReadDocumentTestCase { private static final QName basicAuthMsgProtSecurity = new QName(namespace, "BasicAuthMsgProtSecurity");
private static final QName wsBinding = new QName(scaNamespace, "binding.ws");
private static final QName javaImpl = new QName(scaNamespace, "implementation.java");
-
@BeforeClass
public static void setUp() throws Exception {
DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
-
+
// Create StAX processors
- StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ StAXArtifactProcessorExtensionPoint staxProcessors =
+ extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
staxProcessors.addArtifactProcessor(new TestPolicyProcessor());
-
- URLArtifactProcessorExtensionPoint documentProcessors = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
- policyDefinitionsProcessor = documentProcessors.getProcessor(Definitions.class);
-
+
+ URLArtifactProcessorExtensionPoint documentProcessors =
+ extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
+ policyDefinitionsProcessor = documentProcessors.getProcessor(Definitions.class);
+
URL url = ReadDocumentTestCase.class.getResource("test_definitions.xml");
URI uri = URI.create("test_definitions.xml");
definitions = policyDefinitionsProcessor.read(null, uri, url);
-
- for ( Intent intent : definitions.getIntents() ) {
+
+ for (Intent intent : definitions.getIntents()) {
intentTable.put(intent.getName(), intent);
+ for (Intent i : intent.getQualifiedIntents()) {
+ intentTable.put(i.getName(), i);
+ }
}
-
- for ( PolicySet policySet : definitions.getPolicySets() ) {
+
+ for (PolicySet policySet : definitions.getPolicySets()) {
policySetTable.put(policySet.getName(), policySet);
}
-
- for ( IntentAttachPointType bindingType : definitions.getBindingTypes() ) {
- bindingTypesTable.put(bindingType.getName(), bindingType);
+
+ for (BindingType bindingType : definitions.getBindingTypes()) {
+ bindingTypesTable.put(bindingType.getType(), bindingType);
}
-
- for ( IntentAttachPointType implType : definitions.getImplementationTypes() ) {
- implTypesTable.put(implType.getName(), implType);
+
+ for (ImplementationType implType : definitions.getImplementationTypes()) {
+ implTypesTable.put(implType.getType(), implType);
}
}
@Test
public void testReadSCADefinitions() throws Exception {
assertNotNull(definitions);
-
+
assertNotNull(intentTable.get(confidentiality));
assertNotNull(intentTable.get(messageProtection));
assertNotNull(intentTable.get(confidentiality_transport));
- assertTrue(intentTable.get(confidentiality).getDescription().length() > 0 );
-
+ assertTrue(intentTable.get(confidentiality).getDescription().length() > 0);
+
assertNotNull(policySetTable.get(secureReliablePolicy));
assertTrue(policySetTable.get(secureReliablePolicy).getProvidedIntents().size() == 2);
assertTrue(policySetTable.get(secureReliablePolicy).getPolicies().size() == 2);
-
+
assertNotNull(policySetTable.get(secureMessagingPolicies));
- assertEquals(policySetTable.get(secureMessagingPolicies).getMappedPolicies().size(), 3);
+ assertEquals(2, policySetTable.get(secureMessagingPolicies).getIntentMaps().get(0).getQualifiers().size());
//assertTrue(policySetTable.get(secureWsPolicy).getPolicies().get(0) instanceof org.apache.neethi.Policy);
-
+
assertEquals(bindingTypesTable.size(), 1);
assertNotNull(bindingTypesTable.get(wsBinding));
assertEquals(implTypesTable.size(), 1);
assertNotNull(implTypesTable.get(javaImpl));
}
+
+ private boolean isRealizedBy(PolicySet policySet, Intent intent) {
+ if (intent.getName().getLocalPart().indexOf('.') == -1) {
+ return policySet.getProvidedIntents().contains(intent);
+ }
+ for (IntentMap map : policySet.getIntentMaps()) {
+ for (Qualifier q : map.getQualifiers()) {
+ if (q.getIntent().equals(intent)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ private int getNumberOfQualifiedPolicies(PolicySet policySet) {
+ int count = 0;
+ for(IntentMap intentMap: policySet.getIntentMaps()) {
+ for(Qualifier q: intentMap.getQualifiers()) {
+ count += q.getPolicies().size();
+ }
+ }
+ return count;
+ }
+
@Test
public void testResolveSCADefinitions() throws Exception {
- assertTrue(intentTable.get(messageProtection) instanceof ProfileIntent);
- ProfileIntent profileIntent = (ProfileIntent)intentTable.get(new QName(namespace, "messageProtection"));
- assertNull(profileIntent.getRequiredIntents().get(0).getDescription());
-
- QName confidentiality_transport = new QName(namespace, "confidentiality.transport");
- assertTrue(intentTable.get(confidentiality_transport) instanceof QualifiedIntent);
- QualifiedIntent qualifiedIntent = (QualifiedIntent)intentTable.get(new QName(namespace, "confidentiality.transport"));
- assertNull(qualifiedIntent.getQualifiableIntent().getDescription());
-
+ Intent i1 = intentTable.get(messageProtection);
+ assertTrue(!i1.getRequiredIntents().isEmpty());
+ assertNull(i1.getRequiredIntents().get(0).getDescription());
+
+ QName confidentiality_transport = new QName(namespace, "confidentiality.transport");
+ Intent i2 = intentTable.get(confidentiality_transport);
+ assertNotNull(i2.getParent());
+
PolicySet secureReliablePolicySet = policySetTable.get(secureReliablePolicy);
PolicySet secureMessagingPolicySet = policySetTable.get(secureMessagingPolicies);
PolicySet securityPolicySet = policySetTable.get(securityPolicy);
-
+
assertEquals(secureReliablePolicySet.getProvidedIntents().get(1).getName(), integrity);
assertNull(secureReliablePolicySet.getProvidedIntents().get(1).getDescription());
assertTrue(secureMessagingPolicySet.isUnresolved());
- assertEquals(securityPolicySet.getMappedPolicies().size(), 5);
-
+ assertEquals(3, getNumberOfQualifiedPolicies(securityPolicySet));
+
//testing to ensure that inclusion of referred policy sets has not happened
PolicySet basicAuthMsgProtSecurityPolicySet = policySetTable.get(basicAuthMsgProtSecurity);
assertTrue(basicAuthMsgProtSecurityPolicySet.getPolicies().isEmpty());
- assertTrue(basicAuthMsgProtSecurityPolicySet.getMappedPolicies().isEmpty());
-
- IntentAttachPointType wsBindingType = bindingTypesTable.get(wsBinding);
+ assertTrue(basicAuthMsgProtSecurityPolicySet.getIntentMaps().isEmpty());
+
+ BindingType wsBindingType = bindingTypesTable.get(wsBinding);
assertNull(wsBindingType.getAlwaysProvidedIntents().get(0).getDescription());
- assertNull(wsBindingType.getMayProvideIntents().get(0).getDescription());
-
- IntentAttachPointType javaImplType = implTypesTable.get(javaImpl);
+ assertNull(wsBindingType.getMayProvidedIntents().get(0).getDescription());
+
+ ImplementationType javaImplType = implTypesTable.get(javaImpl);
assertNull(javaImplType.getAlwaysProvidedIntents().get(0).getDescription());
- assertNull(javaImplType.getMayProvideIntents().get(0).getDescription());
-
+ assertNull(javaImplType.getMayProvidedIntents().get(0).getDescription());
+
ModelResolver resolver = new DefaultModelResolver();
policyDefinitionsProcessor.resolve(definitions, resolver);
//builder.build(scaDefinitions);
-
+
//testing if policy intents have been linked have property been linked up
- assertNotNull(profileIntent.getRequiredIntents().get(0).getDescription());
- assertNotNull(qualifiedIntent.getQualifiableIntent().getDescription());
+ assertNotNull(i1.getRequiredIntents().get(0).getDescription());
+ // assertNotNull(i2.getQualifiableIntent().getDescription());
assertEquals(secureReliablePolicySet.getProvidedIntents().get(1).getName(), integrity);
assertNotNull(secureReliablePolicySet.getProvidedIntents().get(1).getDescription());
-
+
//testing if policysets have been properly linked up with intents
assertFalse(secureMessagingPolicySet.isUnresolved());
- assertNotNull(secureMessagingPolicySet.getMappedPolicies().get(intentTable.get(confidentiality)));
- assertNotNull(secureMessagingPolicySet.getMappedPolicies().get(intentTable.get(confidentiality_transport)));
-
+ assertTrue(isRealizedBy(secureMessagingPolicySet, intentTable.get(confidentiality)));
+ assertTrue(isRealizedBy(secureMessagingPolicySet, intentTable.get(confidentiality_transport)));
+
//testing if intent maps have been properly mapped to policies
assertFalse(securityPolicySet.isUnresolved());
- assertNotNull(securityPolicySet.getMappedPolicies().get(intentTable.get(confidentiality)));
- assertNotNull(securityPolicySet.getMappedPolicies().get(intentTable.get(confidentiality_message)));
-
+ assertTrue(isRealizedBy(securityPolicySet, intentTable.get(confidentiality)));
+ assertTrue(isRealizedBy(securityPolicySet, intentTable.get(confidentiality_message)));
+
//testing for inclusion of referred policysets
assertFalse(basicAuthMsgProtSecurityPolicySet.getPolicies().isEmpty());
- assertFalse(basicAuthMsgProtSecurityPolicySet.getMappedPolicies().isEmpty());
- assertNotNull(basicAuthMsgProtSecurityPolicySet.getMappedPolicies().get(intentTable.get(confidentiality_transport)));
-
+ assertFalse(basicAuthMsgProtSecurityPolicySet.getIntentMaps().get(0).getQualifiers().isEmpty());
+ assertTrue(isRealizedBy(basicAuthMsgProtSecurityPolicySet, intentTable.get(confidentiality_transport)));
+
assertNotNull(wsBindingType.getAlwaysProvidedIntents().get(0).getDescription());
- assertNotNull(wsBindingType.getMayProvideIntents().get(0).getDescription());
-
+ assertNotNull(wsBindingType.getMayProvidedIntents().get(0).getDescription());
+
assertNotNull(javaImplType.getAlwaysProvidedIntents().get(0).getDescription());
- assertNotNull(javaImplType.getMayProvideIntents().get(0).getDescription());
+ assertNotNull(javaImplType.getMayProvidedIntents().get(0).getDescription());
}
}
diff --git a/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/TestPolicyProcessor.java b/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/TestPolicyProcessor.java index 3ff8f294f8..270aed0f90 100644 --- a/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/TestPolicyProcessor.java +++ b/java/sca/modules/definitions-xml/src/test/java/org/apache/tuscany/sca/definitions/TestPolicyProcessor.java @@ -28,7 +28,6 @@ import org.apache.tuscany.sca.contribution.processor.ContributionResolveExceptio import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
-import org.apache.tuscany.sca.policy.Policy;
/**
* A PolicyProcessor used for testing.
diff --git a/java/sca/modules/definitions-xml/src/test/resources/org/apache/tuscany/sca/definitions/test_definitions.xml b/java/sca/modules/definitions-xml/src/test/resources/org/apache/tuscany/sca/definitions/test_definitions.xml index f60047e769..216cb29b0a 100644 --- a/java/sca/modules/definitions-xml/src/test/resources/org/apache/tuscany/sca/definitions/test_definitions.xml +++ b/java/sca/modules/definitions-xml/src/test/resources/org/apache/tuscany/sca/definitions/test_definitions.xml @@ -17,239 +17,190 @@ * specific language governing permissions and limitations
* under the License.
-->
-<definitions xmlns="http://www.osoa.org/xmlns/sca/1.0"
- targetNamespace="http://test"
- xmlns:test="http://test"
- xmlns:sca="http://www.osoa.org/xmlns/sca/1.0">
-
-<!-- Extension Types Metadata -->
-<implementationType type="sca:implementation.java" alwaysProvides="test:logging"
- mayProvide="test:tracing"/>
-<bindingType type="sca:binding.ws" alwaysProvides="test:confidentiality"
- mayProvide="test:integrity"/>
-
-<!-- Intents and Policysets to assume targetnamespace -->
-<intent name="TestIntentOne"
- constrains="sca:binding">
- <description>
- Test Intent
- </description>
- </intent>
-
- <intent name="TestIntentTwo"
- constrains="sca:binding"
- requires="test:TestIntentOne">
- <description>
- Protect messages from unauthorized reading or modification
- </description>
- </intent>
-
- <policySet name="TestPolicySetOne"
- provides="test:TestIntentOne"
- appliesTo="sca:binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for
- "basic authentication" -->
- </wsp:PolicyAttachment>
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for
- "reliability" -->
- </wsp:PolicyAttachment>
- </policySet>
-
-
- <!-- qualified intents -->
- <intent name="confidentiality.transport" />
- <intent name="confidentiality.message" />
- <intent name="confidentiality.message.whole" />
- <intent name="confidentiality.message.body" />
-
- <!-- POLICY SETS -->
- <policySet name="SecureReliablePolicy"
- provides="test:confidentiality.transport test:integrity"
- appliesTo="sca:binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for
- "basic authentication" -->
- </wsp:PolicyAttachment>
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for
- "reliability" -->
- </wsp:PolicyAttachment>
- </policySet>
-
- <policySet name="SecureMessagingPolicies"
- provides="test:confidentiality"
- appliesTo="binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
- <intentMap provides="test:confidentiality" default="transport">
- <qualifier name="transport">
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for "transport" alternative -->
+<definitions xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" targetNamespace="http://test"
+ xmlns:test="http://test" xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200712">
+
+ <!-- Extension Types Metadata -->
+ <implementationType type="sca:implementation.java" alwaysProvides="test:logging" mayProvide="test:tracing" />
+ <bindingType type="sca:binding.ws" alwaysProvides="test:confidentiality" mayProvide="test:integrity" />
+
+ <!-- Intents and Policysets to assume targetnamespace -->
+ <intent name="TestIntentOne" constrains="sca:binding">
+ <description>
+ Test Intent
+ </description>
+ </intent>
+
+ <intent name="TestIntentTwo" constrains="sca:binding" requires="test:TestIntentOne">
+ <description>
+ Protect messages from unauthorized reading or modification
+ </description>
+ </intent>
+
+ <policySet name="TestPolicySetOne" provides="test:TestIntentOne" appliesTo="sca:binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for
+ "basic authentication" -->
+ </wsp:PolicyAttachment>
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for
+ "reliability" -->
+ </wsp:PolicyAttachment>
+ </policySet>
+
+ <!-- POLICY SETS -->
+ <policySet name="SecureReliablePolicy" provides="test:confidentiality.transport test:integrity" appliesTo="sca:binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for
+ "basic authentication" -->
+ </wsp:PolicyAttachment>
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for
+ "reliability" -->
+ </wsp:PolicyAttachment>
+ </policySet>
+
+ <policySet name="SecureMessagingPolicies" provides="test:confidentiality" appliesTo="binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <intentMap provides="test:confidentiality" default="transport">
+ <qualifier name="transport">
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for "transport" alternative -->
+ </wsp:PolicyAttachment>
+ <wsp:PolicyAttachment>...</wsp:PolicyAttachment>
+ </qualifier>
+ <qualifier name="message">
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for "message" alternative" -->
</wsp:PolicyAttachment>
- <wsp:PolicyAttachment>...</wsp:PolicyAttachment>
- </qualifier>
- <qualifier name="message">
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for "message" alternative" -->
- </wsp:PolicyAttachment>
- </qualifier>
- </intentMap>
-</policySet>
-
-<policySet name="SecurityPolicy" - provides="test:confidentiality" - appliesTo="binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" >
- <intentMap provides="test:confidentiality" default="message">
- <qualifier name="message">
- <intentMap provides="message" default="whole">
- <qualifier name="body">
- <wsp:PolicyAttachment>
- <!-- policy attachment for body encryption -->
- </wsp:PolicyAttachment>
- </qualifier>
- <qualifier name="whole">
- <wsp:PolicyAttachment>
- <!-- policy attachment for whole message encryption -->
- </wsp:PolicyAttachment>
- </qualifier>
- </intentMap>
- </qualifier>
- <qualifier name="transport">
- <wsp:PolicyAttachment>
- <!-- policy attachment for transport encryption -->
- </wsp:PolicyAttachment>
- </qualifier>
- </intentMap>
-</policySet>
-
-<policySet name="BasicAuthMsgProtSecurity"
- provides="test:authentication test:confidentiality"
- appliesTo="binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0">
- <policySetReference name="test:AuthenticationPolicies"/>
- <policySetReference name="test:ConfidentialityPolicies"/>
-</policySet>
-
-<policySet name="AuthenticationPolicies"
- provides="test:authentication"
- appliesTo="binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for "basic
+ </qualifier>
+ </intentMap>
+ </policySet>
+
+ <policySet name="SecurityPolicy" provides="test:confidentiality" appliesTo="binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <intentMap provides="test:confidentiality" default="message">
+ <qualifier name="message">
+ <wsp:PolicyAttachment>
+ <!-- policy attachment for body encryption -->
+ </wsp:PolicyAttachment>
+ <wsp:PolicyAttachment>
+ <!-- policy attachment for whole message encryption -->
+ </wsp:PolicyAttachment>
+ </qualifier>
+ <qualifier name="transport">
+ <wsp:PolicyAttachment>
+ <!-- policy attachment for transport encryption -->
+ </wsp:PolicyAttachment>
+ </qualifier>
+ </intentMap>
+ </policySet>
+
+ <policySet name="BasicAuthMsgProtSecurity" provides="test:authentication test:confidentiality" appliesTo="binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712">
+ <policySetReference name="test:AuthenticationPolicies" />
+ <policySetReference name="test:ConfidentialityPolicies" />
+ </policySet>
+
+ <policySet name="AuthenticationPolicies" provides="test:authentication" appliesTo="binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for "basic
authentication" -->
- </wsp:PolicyAttachment>
-</policySet>
-
-<policySet name="ConfidentialityPolicies"
- provides="test:confidentiality"
- appliesTo="binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
- <intentMap provides="test:confidentiality" default="transport">
- <qualifier name="transport">
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for "transport"
+ </wsp:PolicyAttachment>
+ </policySet>
+
+ <policySet name="ConfidentialityPolicies" provides="test:confidentiality" appliesTo="binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <intentMap provides="test:confidentiality" default="transport">
+ <qualifier name="transport">
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for "transport"
alternative -->
- </wsp:PolicyAttachment>
- <wsp:PolicyAttachment>...</wsp:PolicyAttachment>
- </qualifier>
- <qualifier name="message">
- <wsp:PolicyAttachment>
- <!-- policy expression and policy subject for "message"
- alternative" -->...
- </wsp:PolicyAttachment>
- </qualifier>
- </intentMap>
-</policySet>
-
-<policySet name="SecureWSPolicy"
- provides="test:confidentiality"
- appliesTo="sca:binding.ws"
- xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
- <wsp:Policy>
- <wsp:ExactlyOne>
- <wsp:All>
- <sp:SecurityToken>
- <sp:TokenType>sp:X509v3</sp:TokenType>
- </sp:SecurityToken>
- <sp:UsernameToken />
- <sp:SignedParts />
- <sp:EncryptedParts>
- <sp:Body />
- </sp:EncryptedParts>
- <sp:TransportBinding>
- <sp:IncludeTimeStamp />
- </sp:TransportBinding>
- </wsp:All>
- </wsp:ExactlyOne>
- </wsp:Policy>
- </policySet>
-
-<!-- profile intent -->
- <intent name="reliableMessageProtection"
- constrains="sca:binding"
- requires="test:messageProtection">
- <description>
- Protect messages from unauthorized reading or modification
- </description>
- </intent>
-
- <intent name="messageProtection"
- constrains="sca:binding"
- requires="test:confidentiality test:integrity">
- <description>
- Protect messages from unauthorized reading or modification
- </description>
- </intent>
-
-<!-- simple intent -->
- <intent name="confidentiality"
- constrains="sca:binding">
- <description>
- Communitcation thro this binding must prevent
- unauthorized users from reading the messages.
- </description>
- </intent>
-
- <intent name="integrity"
- constrains="sca:binding">
- <description>
- Communitcation thro this binding must prevent
- unauthorized modification of the messages.
- </description>
- </intent>
-
- <intent name="authentication"
- constrains="sca:binding">
- <description>
- Communitcation thro this binding required
- Authentication.
- </description>
- </intent>
-
- <intent name="logging"
- constrains="sca:implementation">
- <description>
- All messages to and from this implementation must be logged
- </description>
- </intent>
-
- <intent name="tracing"
- constrains="sca:implementation.java">
- <description>
- Need to figure out some description for this
- </description>
- </intent>
-
+ </wsp:PolicyAttachment>
+ <wsp:PolicyAttachment>...</wsp:PolicyAttachment>
+ </qualifier>
+ <qualifier name="message">
+ <wsp:PolicyAttachment>
+ <!-- policy expression and policy subject for "message"
+ alternative" -->
+ ...
+ </wsp:PolicyAttachment>
+ </qualifier>
+ </intentMap>
+ </policySet>
+
+ <policySet name="SecureWSPolicy" provides="test:confidentiality" appliesTo="sca:binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200712" xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
+ xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:Policy>
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <sp:SecurityToken>
+ <sp:TokenType>sp:X509v3</sp:TokenType>
+ </sp:SecurityToken>
+ <sp:UsernameToken />
+ <sp:SignedParts />
+ <sp:EncryptedParts>
+ <sp:Body />
+ </sp:EncryptedParts>
+ <sp:TransportBinding>
+ <sp:IncludeTimeStamp />
+ </sp:TransportBinding>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ </policySet>
+
+ <!-- profile intent -->
+ <intent name="reliableMessageProtection" constrains="sca:binding" requires="test:messageProtection">
+ <description>
+ Protect messages from unauthorized reading or modification
+ </description>
+ </intent>
+
+ <intent name="messageProtection" constrains="sca:binding" requires="test:confidentiality test:integrity">
+ <description>
+ Protect messages from unauthorized reading or modification
+ </description>
+ </intent>
+
+ <!-- simple intent -->
+ <intent name="confidentiality" constrains="sca:binding">
+ <description>
+ Communitcation thro this binding must prevent
+ unauthorized users from reading the messages.
+ </description>
+ <qualifier name="transport" />
+ <qualifier name="message" default="true" />
+ </intent>
+
+ <intent name="integrity" constrains="sca:binding">
+ <description>
+ Communitcation thro this binding must prevent
+ unauthorized modification of the messages.
+ </description>
+ </intent>
+
+ <intent name="authentication" constrains="sca:binding">
+ <description>
+ Communitcation thro this binding required
+ Authentication.
+ </description>
+ </intent>
+
+ <intent name="logging" constrains="sca:implementation">
+ <description>
+ All messages to and from this implementation must be logged
+ </description>
+ </intent>
+
+ <intent name="tracing" constrains="sca:implementation.java">
+ <description>
+ Need to figure out some description for this
+ </description>
+ </intent>
+
</definitions>
\ No newline at end of file |