1
2
3
4
5
6
7
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
29 private int maxAttempts = 3;
30
31 private int maxRedirects = 3;
32
33
34 private int attemptCount = 0;
35
36
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 }