/** * Make a new rule definition * * @param name * The name of the rule. Should be unique among rule names on the * REST server. * @param description * Text description of the rule. */ public RuleDefinition(String name, String description) { this(); this.setName(name); this.setDescription(description); }
@Override public void writeRule(RuleDefinition ruleHandle) { String ruleName = ruleHandle.getName(); writeRule(ruleName, ruleHandle); } @SuppressWarnings("rawtypes")
@Test public void testXMLRuleDefinitionsWithStructuredQuery() throws SAXException, IOException, ForbiddenUserException, FailedRequestException, ResourceNotFoundException { RuleDefinition defWithImport = new RuleDefinition(); defWithImport.setName("javatestrule2"); File ruleFile = new File("src/test/resources/structured-query.xml"); FileHandle queryHandle = new FileHandle(ruleFile); defWithImport.importQueryDefinition(queryHandle); ruleManager.writeRule(defWithImport); assertTrue(ruleManager.exists("javatestrule2")); RuleDefinition def = ruleManager.readRule("javatestrule2", new RuleDefinition()); assertEquals("javatestrule2", def.getName()); assertXMLEqual( "Search element round-tripped - structured query and options", "<search:search xmlns:search=\"http://marklogic.com/appservices/search\">" + "<search:query>" + "<search:term-query><search:text>foo</search:text></search:term-query>" + "</search:query>" + "</search:search>", new String( def.exportQueryDefinition(new BytesHandle()).get())); ruleManager.delete("javatestrule"); }
@Test public void testMatchGetDocumentUri() { String[] docs = new String[] { "/alert/second.xml" }; String[] candidates = new String[] { "notfavorited" }; RuleDefinitionList answer = ruleManager.match(docs, new RuleDefinitionList()); assertEquals( "One answer for first match scenario, favorite against all rules", 1, answer.size()); RuleDefinition ruleMatch = answer.iterator().next(); assertEquals("favorites", ruleMatch.getName()); answer = ruleManager.match(docs, candidates, answer, null); assertEquals( "Zero answers for second match scenario, favorites against false rule ", 0, answer.size()); docs = new String[] { "/alert/first.xml", "/alert/third.xml" }; answer = ruleManager.match(docs, answer); assertEquals("One answer for first match scenario", 1, answer.size()); RuleDefinition match = answer.iterator().next(); assertEquals("notfavorited", match.getName()); }
private static void setupMatchRules() throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { RuleDefinition definition = new RuleDefinition("favorites", "Rule for testing favorited:true"); String head = "<search:search xmlns:search=\"http://marklogic.com/appservices/search\">"; String qtext1 = "<search:qtext>favorited:true</search:qtext>"; String qtext2 = "<search:qtext>favorited:false</search:qtext>"; String tail = "</search:search>"; String ruleOptions = "<search:options >" + "<search:constraint name=\"favorited\">" + "<search:value>" + "<search:element name=\"favorited\" ns=\"\"/>" + "</search:value>" + "</search:constraint>" + "</search:options>"; StringHandle textQuery = new StringHandle(head + qtext1 + ruleOptions + tail); definition.importQueryDefinition(textQuery); ruleManager.writeRule(definition); textQuery = new StringHandle(head + qtext2 + ruleOptions + tail); definition.importQueryDefinition(textQuery); definition.setName("notfavorited"); definition.setDescription("Rule for testing favorited:false"); ruleManager.writeRule(definition); }
@Test public void testXMLRuleDefinitions() throws SAXException, IOException, ForbiddenUserException, FailedRequestException, ResourceNotFoundException { File ruleFile = new File("src/test/resources/rule1.xml"); FileHandle ruleHandle = new FileHandle(ruleFile); ruleManager.writeRule("javatestrule", ruleHandle); assertTrue(ruleManager.exists("javatestrule")); RuleDefinition def = ruleManager.readRule("javatestrule", new RuleDefinition()); assertEquals("javatestrule", def.getName()); assertXMLEqual( "Search element round-tripped - structured query and options", "<search:search xmlns:search=\"http://marklogic.com/appservices/search\">" + "<search:qtext>favorited:true</search:qtext>" + "<search:options xmlns:search=\"http://marklogic.com/appservices/search\">" + "<search:constraint name=\"favorited\">" + "<search:value>" + "<search:element ns=\"\" name=\"favorited\" />" + "</search:value>" + "</search:constraint>" + "</search:options>" + "</search:search>", new String( def.exportQueryDefinition(new BytesHandle()).get())); ruleManager.delete("javatestrule"); }
RequestConstants.RESTAPI_NS); for (Map.Entry<QName, Object> metadataProperty : getMetadata() .entrySet()) { QName propertyName = metadataProperty.getKey(); Object value = metadataProperty.getValue(); valueSerializer = new ValueSerializer(serializer);
@Test public void testWriteRuleAs() { RuleDefinition definition = new RuleDefinition("original" + RULE_NAME_WRITE_RULE_AS_TEST, "test to verify that writeRuleAs does not result in stackoverflow"); String query = "<search:search xmlns:search=\"http://marklogic.com/appservices/search\">" + "<search:qtext>favorited:true</search:qtext>" + "</search:search>"; StringHandle textQuery = new StringHandle(query).withFormat(Format.XML); definition.importQueryDefinition(textQuery); ruleManager.writeRuleAs(RULE_NAME_WRITE_RULE_AS_TEST, definition); assertTrue("Rule was written with the name provided", ruleManager.exists(RULE_NAME_WRITE_RULE_AS_TEST)); } }
/** * Make a new rule definition, no argument constructor. */ public RuleDefinition() { factory.setProperty("javax.xml.stream.isRepairingNamespaces", true); this.metadata = new RuleMetadataImpl(); }
@Override protected void receiveContent(InputStream content) { DOMHandle handle = new DOMHandle(); HandleAccessor.receiveContent(handle, content); Element ruleElement = handle.get().getDocumentElement(); receiveElement(ruleElement); }
@Test public void testPostDocumentWithoutFormat() throws SAXException, IOException { StringHandle stringHandle = new StringHandle("<search xmlns=\"http://marklogic.com/appservices/search\"><qtext>true</qtext></search>"); DOMHandle answer = ruleManager.match(stringHandle, new DOMHandle()); Document doc = answer.get(); NodeList nl = doc.getElementsByTagNameNS( "http://marklogic.com/rest-api", "name"); assertEquals(2, nl.getLength()); }
@Test public void testMatchPostDocument() { String docToMatch1 = "<favorited>true</favorited>"; String docToMatch2 = "<favorited>false</favorited>"; RuleDefinitionList ans1 = ruleManager.match(new StringHandle( docToMatch1).withFormat(Format.XML), new RuleDefinitionList()); assertEquals("doc match 1 count", 1, ans1.size()); assertEquals("doc match 1", "favorites", ans1.iterator().next() .getName()); RuleDefinitionList ans2 = ruleManager.match(new StringHandle( docToMatch2).withFormat(Format.XML), new RuleDefinitionList()); assertEquals("doc match 2 count", 1, ans2.size()); assertEquals("doc match 2", "notfavorited", ans2.iterator().next() .getName()); }
serializer.writeNamespace("xs", XMLConstants.W3C_XML_SCHEMA_NS_URI); for (Map.Entry<QName, Object> metadataProperty : getMetadata() .entrySet()) { QName propertyName = metadataProperty.getKey(); Object value = metadataProperty.getValue(); valueSerializer = new ValueSerializer(serializer);
/** * Make a new rule definition * * @param name * The name of the rule. Should be unique among rule names on the * REST server. * @param description * Text description of the rule. */ public RuleDefinition(String name, String description) { this(); this.setName(name); this.setDescription(description); }
@Override public void writeRule(RuleDefinition ruleHandle) { String ruleName = ruleHandle.getName(); writeRule(ruleName, ruleHandle); } @SuppressWarnings("rawtypes")
/** * Make a new rule definition, no argument constructor. */ public RuleDefinition() { factory.setProperty("javax.xml.stream.isRepairingNamespaces", true); this.metadata = new RuleMetadataImpl(); }
protected void receiveContent(InputStream content) { DOMHandle handle = new DOMHandle(); HandleAccessor.receiveContent(handle, content); Element ruleElement = handle.get().getDocumentElement(); receiveElement(ruleElement); }
@Test public void testRuleMatchTransform() { StructuredQueryBuilder qb = new StructuredQueryBuilder(); StructuredQueryDefinition structuredQuery; structuredQuery = qb.rangeConstraint("favorited", Operator.EQ, "true"); ServerTransform transform = new ServerTransform("ruleTransform"); DOMHandle answer = ruleManager.match(structuredQuery, 0L, QueryManager.DEFAULT_PAGE_LENGTH, new String[] {}, new DOMHandle(), transform); Document doc = answer.get(); NodeList nl = doc.getElementsByTagNameNS( "", "transformed-name"); assertEquals(2, nl.getLength()); }
@Test public void testMatchGetQuery() { StringQueryDefinition qtext = queryManager .newStringDefinition("alerts"); qtext.setCriteria("favorited:true"); RuleDefinitionList answer = ruleManager.match(qtext, new RuleDefinitionList()); assertEquals("One answer", 1, answer.size()); qtext.setCriteria("favorited:false"); answer = ruleManager.match(qtext, 1L, 10L, new String[] { "favorites", "notfavorited" }, answer); assertEquals("One answer", answer.size(), 1); assertEquals("Right answer", "notfavorited", answer.iterator().next() .getName()); answer = ruleManager.match(qtext, 1L, 0L, new String[] { "favorites", "notfavorited" }, answer); assertEquals("Zero answers (pageLength 0)", answer.size(), 0); answer = ruleManager.match(qtext, 3L, QueryManager.DEFAULT_PAGE_LENGTH, new String[] { "favorites", "notfavorited" }, answer); assertEquals("Zero answers (default pageLength, but start beyond result size)", answer.size(), 0); }