View Javadoc

1   /*
2   
3   This software is OSI Certified Open Source Software.
4   OSI Certified is a certification mark of the Open Source Initiative.
5   
6   The license (Mozilla version 1.0) can be read at the MMBase site.
7   See http://www.MMBase.org/license
8   
9   */
10  package net.sf.mmapps.modules.linkchecker;
11  
12  import org.apache.commons.logging.Log;
13  import org.apache.commons.logging.LogFactory;
14  
15  import simplexml.*;
16  
17  import java.util.*;
18  /***
19   * @author Kees Jongenburger
20   */
21  public class Link {
22      private static Log log = LogFactory.getLog(Link.class);
23  
24      private String extraData = "";
25      private String start_url;
26      private String url;
27      private int status = 200;
28      //TODO: make maxAttempts configurable
29      private int maxAttempts = 3;
30      //TODO: make maxRedirects configurable
31      private int maxRedirects = 3;
32  
33      //TODO: add badness configuration for attemptCount
34      private int attemptCount = 0;
35  
36      //TODO: add badness configuration for redirectCount
37      private int redirectCount = 0;
38  
39      private int badPoints = 0;
40  
41      private long checkStartTime = -1;
42      private long checkEndTime = -1;
43      private boolean mustCheck = true;
44  
45      public void setMustCheck(boolean mustCheck) {
46          this.mustCheck = mustCheck;
47      }
48      Vector comments = new Vector();
49  
50      public Link(String url) {
51          this.url = url;
52          this.start_url = url;
53      }
54  
55      public void setExtraData(String extraData) {
56          this.extraData = extraData;
57      }
58  
59      public void setCheckStartTime() {
60          checkStartTime = System.currentTimeMillis();
61          if (log.isDebugEnabled()) {
62              log.debug("start chekking {" + start_url + "} at " + new Date(checkStartTime));
63          }
64      }
65  
66      public void setCheckEndTime() {
67          checkEndTime = System.currentTimeMillis();
68          if (log.isDebugEnabled()) {
69              log.debug("end chekking {" + start_url + "} at " + new Date(checkEndTime) + " status= " + status + comments);
70          }
71      }
72  
73      public void changeURL(String url) {
74          this.url = url;
75          addComment(new Comment("redirect url to " + url, 20));
76      }
77  
78      public String getURL() {
79          return url;
80      }
81  
82      public void addComment(String comment) {
83          addComment(new Comment(comment, 1));
84      }
85  
86      public void addBadNess(int value) {
87          badPoints += value;
88      }
89  
90      public int getMaxAttempts() {
91          return maxAttempts;
92      }
93      public void addAttemptCount() {
94          attemptCount++;
95          addBadNess(20);
96      }
97      public void addRedirectCount() {
98          redirectCount++;
99          addBadNess(3);
100     }
101 
102     public int getMaxRedirects() {
103         return maxRedirects;
104     }
105 
106     public void setStatus(int status) {
107         this.status = status;
108     }
109 
110     public int getStatus() {
111         return status;
112     }
113 
114     public boolean mustCheck() {
115         return mustCheck;
116     }
117 
118     private void addComment(Comment c) {
119         comments.add(c);
120         addBadNess(c.badNess);
121     }
122 
123     public static class Comment {
124         public Comment(String comment, int badNess) {
125             this.comment = comment;
126             this.badNess = badNess;
127         }
128         String comment;
129         int badNess;
130 
131         public String toString() {
132             return toXML().toString();
133         }
134 
135         public XMLElement toXML() {
136             XMLElement xmle = new XMLElement();
137             xmle.setTagName("comment");
138             xmle.addProperty("badness", badNess);
139             xmle.setContent(comment);
140             return xmle;
141         }
142     }
143 
144     public String toString() {
145         return toXML().toString();
146     }
147 
148     public XMLElement toXML() {
149         XMLElement xmle = new XMLElement();
150         xmle.setTagName("link");
151 
152         if (status == -1) {
153             xmle.addProperty("statuscode", "0");
154         } else {
155             xmle.addProperty("statuscode", status);
156         }
157         xmle.addProperty("starttimetillis", "" + checkStartTime);
158         xmle.addProperty("endtimetillis", "" + checkEndTime);
159         xmle.addProperty("starttime", "" + new Date(checkStartTime));
160         xmle.addProperty("endtime", "" + new Date(checkEndTime));
161 
162         xmle.addProperty("badness", badPoints);
163         xmle.addProperty("url", "" + start_url);
164         for (int x = 0; x < comments.size(); x++) {
165             Comment c = (Comment)comments.get(x);
166             xmle.addChild(c.toXML());
167         }
168         XMLElement extraDataElement = new XMLElement();
169         extraDataElement.setTagName("extrainfo");
170         extraDataElement.setContent(extraData);
171         xmle.addChild(extraDataElement);
172         return xmle;
173     }
174 }