Author: j16sdiz
Date: 2008-12-15 14:27:46 +0000 (Mon, 15 Dec 2008)
New Revision: 24356
Modified:
trunk/plugins/XMLSpider/XMLSpider.java
Log:
use PageMaker for html
Modified: trunk/plugins/XMLSpider/XMLSpider.java
===================================================================
--- trunk/plugins/XMLSpider/XMLSpider.java 2008-12-15 13:25:09 UTC (rev
24355)
+++ trunk/plugins/XMLSpider/XMLSpider.java 2008-12-15 14:27:46 UTC (rev
24356)
@@ -15,6 +15,7 @@
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -54,6 +55,7 @@
import freenet.client.async.ClientCallback;
import freenet.client.async.ClientGetter;
import freenet.client.async.USKCallback;
+import freenet.clients.http.PageMaker;
import freenet.clients.http.filter.ContentFilter;
import freenet.clients.http.filter.FoundURICallback;
import freenet.clients.http.filter.UnsafeContentTypeException;
@@ -69,7 +71,7 @@
import freenet.pluginmanager.FredPluginVersioned;
import freenet.pluginmanager.PluginHTTPException;
import freenet.pluginmanager.PluginRespirator;
-import freenet.support.HTMLEncoder;
+import freenet.support.HTMLNode;
import freenet.support.Logger;
import freenet.support.api.Bucket;
import freenet.support.api.HTTPRequest;
@@ -160,7 +162,7 @@
}
/** Document ID of fetching documents */
- protected Map<Page, ClientGetter> runningFetch = new HashMap<Page,
ClientGetter>();
+ protected Map<Page, ClientGetter> runningFetch =
Collections.synchronizedMap(new HashMap<Page, ClientGetter>());
long tProducedIndex;
protected AtomicLong maxPageId;
@@ -210,7 +212,8 @@
// Any lower makes it very difficult to debug. Maybe reduce for
production - after solving the ARK bugs.
private final short PRIORITY_CLASS =
RequestStarter.IMMEDIATE_SPLITFILE_PRIORITY_CLASS;
private boolean stopped = true;
- PluginRespirator pr;
+
+ private PageMaker pageMaker;
private final static String[] BADLIST_EXTENSTION = new String[] {
".ico", ".bmp", ".png", ".jpg", ".gif", // image
@@ -971,11 +974,14 @@
}
public void runPlugin(PluginRespirator pr){
- this.pr = pr;
this.core = pr.getNode().clientCore;
+ this.pageMaker = pr.getPageMaker();
+
pageMaker.addNavigationLink("/plugins/plugins.XMLSpider.XMLSpider", "Home",
"Home page", false, null);
+ pageMaker.addNavigationLink("/plugins/", "Plugins page", "Back
to Plugins page", false, null);
+
/* Initialize Fetch Context */
- this.ctx = core.makeClient((short) 0).getFetchContext();
+ this.ctx = pr.getHLSimpleClient().getFetchContext();
ctx.maxSplitfileBlockRetries = 2;
ctx.maxNonSplitfileRetries = 2;
ctx.maxTempLength = 2 * 1024 * 1024;
@@ -1018,192 +1024,85 @@
}
}, "Spider Plugin Starter");
}
+
+ private long getPageCount(Status status) {
+ Query query = db.query();
+ query.constrain(Page.class);
+ query.descend("status").constrain(status);
+ ObjectSet<Page> set = query.execute();
- /**
- * Interface to the Spider data
- */
- public String handleHTTPGet(HTTPRequest request) throws
PluginHTTPException{
- StringBuilder out = new StringBuilder();
+ return set.size();
+ }
+
+ private void listPage(Status status, HTMLNode parent) {
+ Query query = db.query();
+ query.constrain(Page.class);
+ query.descend("status").constrain(status);
+ query.descend("lastChange").orderDescending();
+ ObjectSet<Page> set = query.execute();
- String listname = request.getParam("list");
- if(listname.length() != 0)
- {
- appendDefaultHeader(out,null);
- out.append("<p><h4>"+listname+" URIs</h4></p>");
- appendList(listname, out);
- return out.toString();
- }
- appendDefaultPageStart(out,null);
- String uriParam = request.getParam("adduri");
- if(uriParam != null && uriParam.length() != 0)
- {
- try {
- FreenetURI uri = new FreenetURI(uriParam);
- synchronized (this) {
- // Check if queued already
- Page page = getPageByURI(uri);
- if (page != null) {
- // We have no reliable way to
stop a request,
- // requeue only if it is
successed / failed
- if (page.status ==
Status.SUCCEEDED || page.status == Status.FAILED) {
- page.lastChange =
System.currentTimeMillis();
- page.status =
Status.QUEUED;
+ HTMLNode list = parent.addChild("ol", "style", "overflow:
scroll");
- db.store(page);
- }
- }
- }
- out.append("<p>URI added :"+uriParam+"</p>");
- queueURI(uri, "manually");
- startSomeRequests();
- } catch (MalformedURLException mue1) {
- out.append("<p>MalFormed URI: "+uriParam+"</p");
- }
+ for (int i = 0; i < maxShownURIs && set.hasNext(); i++) {
+ Page page = set.next();
+ list.addChild("li", new String[] { "title" }, new
String[] { page.comment }, page.uri);
}
- return out.toString();
}
-/*
- * List the visited, queued, failed and running fetches on the web interface
- */
- private synchronized void appendList(String listname, StringBuilder
out) {
- Iterable<Page> it = runningFetch.keySet();
- if (listname.equals("running")) {
- it = runningFetch.keySet();
- } else if (listname.equals("visited")) {
- Query query = db.query();
- query.constrain(Page.class);
- query.descend("status").constrain(Status.SUCCEEDED);
- query.descend("lastChange").orderAscending();
- ObjectSet<Page> set = query.execute();
+ /**
+ * Interface to the Spider data
+ */
+ public String handleHTTPGet(HTTPRequest request) throws
PluginHTTPException{
+ HTMLNode pageNode = pageMaker.getPageNode(pluginName, null);
+ HTMLNode contentNode = pageMaker.getContentNode(pageNode);
- it = set;
- } else if (listname.equals("queued")) {
- Query query = db.query();
- query.constrain(Page.class);
- query.descend("status").constrain(Status.QUEUED);
- query.descend("lastChange").orderAscending();
- ObjectSet<Page> set = query.execute();
+ HTMLNode overviewTable = contentNode.addChild("table", "class",
"column");
+ HTMLNode overviewTableRow = overviewTable.addChild("tr");
- it = set;
- } else if (listname.equals("failed")) {
- Query query = db.query();
- query.constrain(Page.class);
- query.descend("status").constrain(Status.FAILED);
- query.descend("lastChange").orderAscending();
- ObjectSet<Page> set = query.execute();
+ // Column 1
+ HTMLNode nextTableCell = overviewTableRow.addChild("td",
"class", "first");
+ HTMLNode statusBox = pageMaker.getInfobox("Spider Status");
+ statusBox.addChild("%", "Running Request: " +
runningFetch.size() + "/" + maxParallelRequests);
+ statusBox.addChild("br");
+ statusBox.addChild("%", "Queued: " +
getPageCount(Status.QUEUED));
+ statusBox.addChild("br");
+ statusBox.addChild("%", "Succeeded: " +
getPageCount(Status.SUCCEEDED));
+ statusBox.addChild("br");
+ statusBox.addChild("%", "Failed: " +
getPageCount(Status.FAILED));
+ nextTableCell.addChild(statusBox);
- it = set;
- }
+ // Column 2
+ nextTableCell = overviewTableRow.addChild("td", "class",
"second");
+ statusBox = pageMaker.getInfobox("Spider Status");
+ nextTableCell.addChild(statusBox);
- for (Page page : it)
- out.append("<code title=\"" +
HTMLEncoder.encode(page.comment) + "\">" + HTMLEncoder.encode(page.uri)
- + "</code><br/>");
- }
+ HTMLNode runningList = pageMaker.getInfobox("Running URI");
+ synchronized (runningFetch) {
+ HTMLNode list = runningList.addChild("ol", "style",
"overflow: scroll");
- private void appendDefaultPageStart(StringBuilder out, String
stylesheet) {
-
- out.append("<HTML><HEAD><TITLE>" + pluginName + "</TITLE>");
- if(stylesheet != null)
- out.append("<link href=\""+stylesheet+"\"
type=\"text/css\" rel=\"stylesheet\" />");
- out.append("</HEAD><BODY>\n");
- out.append("<CENTER><H1>" + pluginName +
"</H1><BR/><BR/><BR/>\n");
- out.append("Add uri:");
- out.append("<form method=\"GET\"><input type=\"text\"
name=\"adduri\" /><br/><br/>");
- out.append("<input type=\"submit\" value=\"Add uri\"
/></form>");
- List<Page> runningFetchesSnapshot;
- long runningFetchesSnapshotSize;
- List<Page> visitedSnapshot;
- long visitedSnapshotSize;
- List<Page> failedSnapshot;
- long failedSnapshotSize;
- List<Page> queuedSnapshot;
- long queuedSnapshotSize;
-
- synchronized(this) {
- runningFetchesSnapshot = new
ArrayList<Page>(maxShownURIs);
- {
- Iterator<Page> it =
this.runningFetch.keySet().iterator();
- for (int i = 0; it.hasNext() && i <
maxShownURIs; i++)
- runningFetchesSnapshot.add(it.next());
- runningFetchesSnapshotSize =
runningFetch.size();
+ Iterator<Page> pi = runningFetch.keySet().iterator();
+ for (int i = 0; i < maxShownURIs && pi.hasNext(); i++) {
+ Page page = pi.next();
+ list.addChild("li", new String[] { "title" },
new String[] { page.comment }, page.uri);
}
-
- visitedSnapshot = new ArrayList<Page>(maxShownURIs);
- Query query = db.query();
- query.constrain(Page.class);
- query.descend("status").constrain(Status.SUCCEEDED);
- query.descend("lastChange").orderAscending();
- ObjectSet<Page> set = query.execute();
- for (int i = 0; set.hasNext() && i < maxShownURIs; i++)
- visitedSnapshot.add(set.next());
- visitedSnapshotSize = set.size();
-
- failedSnapshot = new ArrayList<Page>(maxShownURIs);
- query = db.query();
- query.constrain(Page.class);
- query.descend("status").constrain(Status.FAILED);
- query.descend("lastChange").orderAscending();
- set = query.execute();
- for (int i = 0; set.hasNext() && i < maxShownURIs; i++)
- failedSnapshot.add(set.next());
- failedSnapshotSize = set.size();
-
- queuedSnapshot = new ArrayList<Page>(maxShownURIs);
- query = db.query();
- query.constrain(Page.class);
- query.descend("status").constrain(Status.QUEUED);
- query.descend("lastChange").orderAscending();
- set = query.execute();
- for (int i = 0; set.hasNext() && i < maxShownURIs; i++)
- queuedSnapshot.add(set.next());
- queuedSnapshotSize = set.size();
}
-
- out.append("<p><h3>Running Fetches</h3></p>");
- out.append("<br/>Size :" + runningFetchesSnapshotSize +
"<br/>");
- for (Page page : runningFetchesSnapshot)
- out.append("<code title=\"" +
HTMLEncoder.encode(page.comment) + "\">" + HTMLEncoder.encode(page.uri)
- + "</code><br/>");
- out.append("<p><a href=\"?list="+"running"+"\">Show
all</a><br/></p>");
+ contentNode.addChild(runningList);
-
- out.append("<p><h3>Queued URIs</h3></p>");
- out.append("<br/>Size :" + queuedSnapshotSize + "<br/>");
- for (Page page : queuedSnapshot)
- out.append("<code title=\"" +
HTMLEncoder.encode(page.comment) + "\">" + HTMLEncoder.encode(page.uri)
- + "</code><br/>");
- out.append("<p><a href=\"?list=\">Show all</a><br/></p>");
-
-
- out.append("<p><h3>Visited URIs</h3></p>");
- out.append("<br/>Size :" + visitedSnapshotSize + "<br/>");
- for (Page page : visitedSnapshot)
- out.append("<code title=\"" +
HTMLEncoder.encode(page.comment) + "\">" + HTMLEncoder.encode(page.uri)
- + "</code><br/>");
- out.append("<p><a href=\"?list="+"visited"+"\">Show
all</a><br/></p>");
-
- out.append("<p><h3>Failed URIs</h3></p>");
- out.append("<br/>Size :" + failedSnapshotSize + "<br/>");
- for (Page page : failedSnapshot)
- out.append("<code title=\"" +
HTMLEncoder.encode(page.comment) + "\">" + HTMLEncoder.encode(page.uri)
- + "</code><br/>");
- out.append("<p><a href=\"?list="+"failed"+"\">Show
all</a><br/></p>");
- out.append("<p>Time taken in generating index =
"+time_taken+"</p>");
- }
+ HTMLNode queuedList = pageMaker.getInfobox("Queued URI");
+ listPage(Status.QUEUED, queuedList);
+ contentNode.addChild(queuedList);
+ HTMLNode succeededList = pageMaker.getInfobox("Succeeded URI");
+ listPage(Status.SUCCEEDED, succeededList);
+ contentNode.addChild(succeededList);
- private void appendDefaultHeader(StringBuilder out, String stylesheet){
- out.append("<HTML><HEAD><TITLE>" + pluginName + "</TITLE>");
- if(stylesheet != null)
- out.append("<link href=\""+stylesheet+"\"
type=\"text/css\" rel=\"stylesheet\" />");
- out.append("</HEAD><BODY>\n");
- out.append("<CENTER><H1>" + pluginName +
"</H1><BR/><BR/><BR/>\n");
- out.append("Add uri:");
- out.append("<form method=\"GET\"><input type=\"text\"
name=\"adduri\" /><br/><br/>");
- out.append("<input type=\"submit\" value=\"Add uri\"
/></form>");
- }
+ HTMLNode failedList = pageMaker.getInfobox("Failed URI");
+ listPage(Status.FAILED, failedList);
+ contentNode.addChild(failedList);
+ return pageNode.generate();
+ }
+
/**
* creates the callback object for each page.
*<p>Used to create inlinks and outlinks for each page separately.
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs