1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.any23.validator.rule;
19
20 import org.apache.any23.validator.DOMDocument;
21 import org.apache.any23.validator.Rule;
22 import org.apache.any23.validator.RuleContext;
23 import org.apache.any23.validator.ValidationReport;
24 import org.apache.any23.validator.ValidationReportBuilder;
25 import org.w3c.dom.Node;
26
27 import java.util.List;
28
29
30
31
32
33
34
35
36
37 public class MissingOpenGraphNamespaceRule implements Rule {
38
39 @Override
40 public String getHRName() {
41 return "missing-opengraph-namespace-rule";
42 }
43
44 @Override
45 public boolean applyOn(DOMDocument document, @SuppressWarnings("rawtypes") RuleContext context,
46 ValidationReportBuilder validationReportBuilder) {
47 List<Node> metas = document.getNodes("/HTML/HEAD/META");
48 boolean foundPrecondition = false;
49 for (Node meta : metas) {
50 Node propertyNode = meta.getAttributes().getNamedItem("property");
51 if (propertyNode != null && propertyNode.getTextContent().indexOf("og:") == 0) {
52 foundPrecondition = true;
53 break;
54 }
55 }
56 if (foundPrecondition) {
57 Node htmlNode = document.getNode("/HTML");
58 if (htmlNode.getAttributes().getNamedItem("xmlns:og") == null) {
59 validationReportBuilder.reportIssue(ValidationReport.IssueLevel.ERROR,
60 "Missing OpenGraph namespace declaration.", htmlNode);
61 return true;
62 }
63 }
64 return false;
65 }
66 }