@Override public void writeRule(RuleDefinition ruleHandle) { String ruleName = ruleHandle.getName(); writeRule(ruleName, ruleHandle); } @SuppressWarnings("rawtypes")
@Override public void writeRule(RuleDefinition ruleHandle) { String ruleName = ruleHandle.getName(); writeRule(ruleName, ruleHandle); } @SuppressWarnings("rawtypes")
serializer.writeCharacters(getName()); serializer.writeEndElement();
serializer.writeCharacters(getName()); serializer.writeEndElement();
@SuppressWarnings("rawtypes") @Override public void writeRule(String ruleName, RuleWriteHandle writeHandle) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { if (writeHandle instanceof RuleDefinition) { String name = ((RuleDefinition) writeHandle).getName(); if (name != null) ruleName = name; } HandleImplementation ruleBase = HandleAccessor.checkHandle(writeHandle, "rule"); if (ruleBase == null) throw new IllegalArgumentException("Could not write null rule: " + ruleName); Format ruleFormat = ruleBase.getFormat(); switch (ruleFormat) { case UNKNOWN: ruleFormat = Format.XML; break; case JSON: case XML: break; default: throw new UnsupportedOperationException( "Only JSON and XML rules are supported."); } String mimetype = ruleFormat.getDefaultMimetype(); services.putValue(requestLogger, RULES_BASE, ruleName, mimetype, ruleBase); }
@SuppressWarnings("rawtypes") @Override public void writeRule(String ruleName, RuleWriteHandle writeHandle) throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException { if (writeHandle instanceof RuleDefinition) { String name = ((RuleDefinition) writeHandle).getName(); if (name != null) ruleName = name; } HandleImplementation ruleBase = HandleAccessor.checkHandle(writeHandle, "rule"); if (ruleBase == null) throw new IllegalArgumentException("Could not write null rule: " + ruleName); Format ruleFormat = ruleBase.getFormat(); switch (ruleFormat) { case UNKNOWN: ruleFormat = Format.XML; break; case JSON: case XML: break; default: throw new UnsupportedOperationException( "Only JSON and XML rules are supported."); } String mimetype = ruleFormat.getDefaultMimetype(); services.putValue(requestLogger, RULES_BASE, ruleName, mimetype, ruleBase); }
@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()); }
@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()); }
@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"); }
System.out.println( "document criteria matched rule " + rule.getName() + " with metadata " + rule.getMetadata() );
System.out.println( "document criteria matched rule " + rule.getName() + " with metadata " + rule.getMetadata() );
@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 testJSONRuleDefinitions() throws SAXException, IOException, ForbiddenUserException, FailedRequestException, ResourceNotFoundException { File ruleFile = new File("src/test/resources/rule1.json"); FileHandle ruleHandle = new FileHandle(ruleFile); ruleHandle.setFormat(Format.JSON); 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())); BytesHandle bHandle = ruleManager.readRule("javatestrule", new BytesHandle().withFormat(Format.JSON)); assertEquals( "{\"rule\":{\"name\":\"javatestrule\", \"description\":\"rule to demonstrate REST alerting\", \"search\":{\"qtext\":[\"favorited:true\"], \"options\":{\"constraint\":[{\"name\":\"favorited\", \"value\":{\"element\":{\"ns\":\"\", \"name\":\"favorited\"}}}]}}, \"rule-metadata\":null}}", new String(bHandle.get())); ruleManager.delete("javatestrule"); }
@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); }