package gov.nist.registry.ws.test; import gov.nist.registry.common2.exception.MetadataException; import gov.nist.registry.common2.exception.MetadataValidationException; import gov.nist.registry.common2.exception.XdsInternalException; import gov.nist.registry.common2.registry.IdParser; import gov.nist.registry.common2.registry.Metadata; import java.io.File; import java.util.Iterator; import java.util.List; import junit.framework.TestCase; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.util.XPathEvaluator; public class RegistryAdaptorTest extends TestCase { String metadata_filename = "/Users/bill/IheOs/workspace_prod/xds/testdata/submit_fdd.xml"; Metadata m; public void setUp() throws MetadataException, XdsInternalException, MetadataValidationException { m = new Metadata(new File(metadata_filename)); } public void test_compile_symbolic_names() throws Exception { // Document1 String[] document1 = { "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/@id", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][1]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][2]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][3]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][4]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][5]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][6]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][7]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][1]/*[local-name()='Classification'][8]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='Association'][1]/@targetObject" }; verify_xpath_against_constant(document1, "Document01"); // Document2 String[] document2 = { "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/@id", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][1]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][2]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][3]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][4]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][5]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][6]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][7]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='ExtrinsicObject'][2]/*[local-name()='Classification'][8]/@classifiedObject", }; verify_xpath_against_constant(document2, "Document02"); // SubmissionSet01 String[] ss = { // classifications no longer remain as top level objects "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='RegistryPackage'][1]/@id", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='RegistryPackage'][1]/*[local-name()='Classification'][1]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='RegistryPackage'][1]/*[local-name()='Classification'][2]/@classifiedObject", //"//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='Classification'][2]/@classifiedObject", "//*[local-name()='SubmitObjectsRequest']/*[local-name()='LeafRegistryObjectList'][1]/*[local-name()='Association'][1]/@sourceObject", }; verify_xpath_against_constant(ss, "SubmissionSet01"); IdParser ra = new IdParser(m); ra.compileSymbolicNamesIntoUuids(); String[] doc1_values = new String[document1.length]; String[] doc2_values = new String[document2.length]; String[] ss_values = new String[ss.length]; load_xpath_values(document1, doc1_values); load_xpath_values(document2, doc2_values); load_xpath_values(ss, ss_values); for (int i=1; i<doc1_values.length; i++) { assertTrue(doc1_values[0].equals(doc1_values[i])); } for (int i=1; i<doc2_values.length; i++) { assertTrue(doc2_values[0].equals(doc2_values[i])); } for (int i=1; i<ss_values.length; i++) { assertTrue(ss_values[0].equals(ss_values[i])); } assertFalse(doc1_values[0].equals(doc2_values[0])); assertFalse(doc2_values[0].equals(ss_values[0])); assertTrue(doc1_values[0].startsWith("urn:uuid:")); assertTrue(doc2_values[0].startsWith("urn:uuid:")); assertTrue(ss_values[0].startsWith("urn:uuid:")); } private void verify_xpath_against_constant(String[] document1, String value) throws Exception { XPathEvaluator eval = new XPathEvaluator(); for (int i=0; i<document1.length; i++) { String path = document1[i]; List node_list = eval.evaluateXpath(path, m.getRoot(), null); assertTrue("path not found: " + path, node_list.size() == 1); for (Iterator it=node_list.iterator(); it.hasNext(); ) { OMAttribute attr = (OMAttribute) it.next(); assertTrue("path is " + path + " value is " + attr.getAttributeValue() + " should be " + value, attr.getAttributeValue().equals(value)); } } } private void load_xpath_values(String[] paths, String[] values) throws Exception { XPathEvaluator eval = new XPathEvaluator(); for (int i=0; i<paths.length; i++) { String path = paths[i]; List node_list = eval.evaluateXpath(path, m.getRoot(), null); assertTrue(node_list.size() == 1); for (Iterator it=node_list.iterator(); it.hasNext(); ) { OMAttribute attr = (OMAttribute) it.next(); values[i] = attr.getAttributeValue(); } } } }