##### Coverage Report - org.apache.any23.validator.rule.AboutNotURIRule

Classes in this File | Line Coverage | Branch Coverage | Complexity
AboutNotURIRule |
0% | 0/22
0% | 0/12
| 3.25;3.25

1 |  |
     /*
2 |  |
      * Licensed to the Apache Software Foundation (ASF) under one or more
3 |  |
      * contributor license agreements.  See the NOTICE file distributed with
4 |  |
      * this work for additional information regarding copyright ownership.
5 |  |
      * The ASF licenses this file to You under the Apache License, Version 2.0
6 |  |
      * (the "License"); you may not use this file except in compliance with
7 |  |
      * the License.  You may obtain a copy of the License at
8 |  |
      *
9 |  |
      *  http://www.apache.org/licenses/LICENSE-2.0
10 |  |
      *
11 |  |
      * Unless required by applicable law or agreed to in writing, software
12 |  |
      * distributed under the License is distributed on an "AS IS" BASIS,
13 |  |
      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |  |
      * See the License for the specific language governing permissions and
15 |  |
      * limitations under the License.
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.net.MalformedURLException;
28 |  |
     import java.net.URL;
29 |  |
     import java.util.ArrayList;
30 |  |
     import java.util.List;
31 |  |
32 |  |
     /**
33 |  |
      * This rule is able to detect whether an about value is a valid URL
34 |  |
      * or otherwise is a valid relative URL.
35 |  |
      *
36 |  |
      * @author Michele Mostarda (mostarda@fbk.eu)
37 |  |
      * @author Davide Palmisano (palmisano@fbk.eu)
38 |  |
      */
39 | 0 |
     public class AboutNotURIRule implements Rule {
40 |  |
41 |  |
         public static final String NODES_WITH_INVALID_ABOUT = "nodes-with-invalid-about";
42 |  |
43 |  |
         public String getHRName() {
44 | 0 |
             return "about-not-uri-rule";
45 |  |
         }
46 |  |
47 |  |
         public boolean applyOn(
48 |  |
                 DOMDocument document,
49 |  |
                 RuleContext context,
50 |  |
                 ValidationReportBuilder validationReportBuilder
51 |  |
         ) {
52 | 0 |
             final List<Node> nodesWithAbout = document.getNodesWithAttribute("about");
53 | 0 |
             final List<Node> nodesWithInvalidAbout = new ArrayList<Node>();
54 | 0 |
             for(Node nodeWithAbout : nodesWithAbout) {
55 | 0 |
                 if ( ! aboutIsValid(nodeWithAbout) ) {
56 | 0 |
                     validationReportBuilder.reportIssue(
57 |  |
                             ValidationReport.IssueLevel.error,
58 |  |
                             "Invalid about value for node, expected valid URL.",
59 |  |
                             nodeWithAbout
60 |  |
                     );
61 | 0 |
                     nodesWithInvalidAbout.add(nodeWithAbout);
62 |  |
                 }
63 |  |
             }
64 | 0 |
             if(nodesWithInvalidAbout.isEmpty()) {
65 | 0 |
                 return false;
66 |  |
             }
67 | 0 |
             context.putData(NODES_WITH_INVALID_ABOUT, nodesWithInvalidAbout);
68 | 0 |
             return true;
69 |  |
         }
70 |  |
71 |  |
         private boolean aboutIsValid(Node n) {
72 | 0 |
             final String aboutContent = n.getAttributes().getNamedItem("about").getTextContent();
73 | 0 |
             if( isURL(aboutContent) ) {
74 | 0 |
                 return true;
75 |  |
             }
76 | 0 |
             final char firstChar = aboutContent.charAt(0);
77 | 0 |
             return firstChar == '#' || firstChar == '/';
78 |  |
         }
79 |  |
80 |  |
         private boolean isURL(String candidateURIStr) {
81 |  |
             try {
82 | 0 |
                 new URL(candidateURIStr);
83 | 0 |
             } catch (MalformedURLException murle) {
84 | 0 |
                 return false;
85 | 0 |
             }
86 | 0 |
             return true;
87 |  |
         }
88 |  |
89 |  |
     }