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.ArrayList;
28 import java.util.List;
29
30
31
32
33
34
35
36
37
38 public class MetaNameMisuseRule implements Rule {
39
40 public static final String ERRORED_META_NODES = "errored-meta-nodes";
41
42 @Override
43 public String getHRName() {
44 return "meta-name-misuse-rule";
45 }
46
47 @SuppressWarnings("unchecked")
48 @Override
49 public boolean applyOn(DOMDocument document, @SuppressWarnings("rawtypes") RuleContext context,
50 ValidationReportBuilder validationReportBuilder) {
51 List<Node> metaNodes = document.getNodes("/HTML/HEAD/META");
52 boolean foundIssue = false;
53 final List<Node> wrongMetaNodes = new ArrayList<>();
54 for (Node metaNode : metaNodes) {
55 Node nameNode = metaNode.getAttributes().getNamedItem("name");
56 if (nameNode != null && nameNode.getTextContent().contains(":")) {
57 foundIssue = true;
58 wrongMetaNodes.add(metaNode);
59 validationReportBuilder.reportIssue(ValidationReport.IssueLevel.ERROR,
60 "Error detected in meta node: name property contains a prefixed value.", metaNode);
61 }
62 }
63 context.putData(ERRORED_META_NODES, wrongMetaNodes);
64 return foundIssue;
65 }
66
67 }