From ecd93ae45818a53378c9bf2967d035cd4cfe7974 Mon Sep 17 00:00:00 2001 From: gojomo Date: Wed, 10 Jun 2009 22:31:44 +0000 Subject: [PATCH] Fixes from trial guide testing * Heritrix.java fail-fast with helpful error message if launched with Java < 1.6 * EditRepresentation.java "save changes" rather than "update content" * EngineApplication.java customize restlet error to include back-button and full stack (instead of link to HTTP spec!) --- .../java/org/archive/crawler/Heritrix.java | 11 ++++++ .../crawler/restlet/EditRepresentation.java | 3 +- .../crawler/restlet/EngineApplication.java | 36 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/engine/src/main/java/org/archive/crawler/Heritrix.java b/engine/src/main/java/org/archive/crawler/Heritrix.java index 9fbe75eb..4e7fb15f 100644 --- a/engine/src/main/java/org/archive/crawler/Heritrix.java +++ b/engine/src/main/java/org/archive/crawler/Heritrix.java @@ -188,6 +188,17 @@ public class Heritrix { public void instanceMain(String[] args) throws Exception { + + // ensure using java 1.6+ before hitting a later cryptic error + String version = System.getProperty("java.version"); + float floatVersion = Float.valueOf(version.substring(0,version.indexOf('.',2))); + if(floatVersion<1.6) { + System.err.println("Heritrix (as of version 3) requires Java 1.6 or higher."); + System.err.println("You attempted to launch with: "+version); + System.err.println("Please try again with a later Java."); + System.exit(1); + } + // Set some system properties early. // Can't use class names here without loading them. String ignoredSchemes = "org.archive.net.UURIFactory.ignored-schemes"; diff --git a/engine/src/main/java/org/archive/crawler/restlet/EditRepresentation.java b/engine/src/main/java/org/archive/crawler/restlet/EditRepresentation.java index 69957bb2..8f041619 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EditRepresentation.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EditRepresentation.java @@ -63,7 +63,8 @@ public class EditRepresentation extends CharacterRepresentation { PrintWriter pw = new PrintWriter(writer); Flash.renderFlashesHTML(pw, dirResource.getRequest()); pw.println("
"); - pw.println(""); + // TODO: enable button on after changes made + pw.println(""); pw.println(fileRepresentation.getFile()); Reference viewRef = dirResource.getRequest().getOriginalRef().clone(); viewRef.setQuery(null); diff --git a/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java b/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java index 4517dd89..6cb7bd17 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java @@ -20,6 +20,8 @@ package org.archive.crawler.restlet; import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; import org.archive.crawler.framework.Engine; import org.archive.util.TextUtils; @@ -31,6 +33,11 @@ import org.restlet.Router; import org.restlet.data.MediaType; import org.restlet.data.Reference; import org.restlet.data.Request; +import org.restlet.data.Response; +import org.restlet.data.Status; +import org.restlet.resource.Representation; +import org.restlet.resource.StringRepresentation; +import org.restlet.service.StatusService; import org.restlet.util.Template; /** @@ -46,6 +53,7 @@ public class EngineApplication extends Application { this.engine = engine; getMetadataService().addExtension("log", MediaType.TEXT_PLAIN ); getMetadataService().addExtension("cxml", MediaType.APPLICATION_XML ); + setStatusService(new EngineStatusService()); } public synchronized Restlet createRoot() { @@ -95,4 +103,32 @@ public class EngineApplication extends Application { public Engine getEngine() { return engine; } + + /** + * Customize Restlet error to include back button and full stack. + */ + protected class EngineStatusService extends StatusService { + + @Override + public Representation getRepresentation(Status status, Request request, Response response) { + StringWriter st = new StringWriter(); + PrintWriter pw = new PrintWriter(st); + pw.append("

An error occured

\n"); + pw.append( + "You may be able to recover and try something " + + "else by going " + + "back.\n"); + if(status.getThrowable()!=null) { + pw.append("

Cause: "+ + status.getThrowable().toString()+"

\n"); + pw.append("
");
+                status.getThrowable().printStackTrace(pw);
+                pw.append("
"); + } + pw.flush(); + return new StringRepresentation(st.toString(),MediaType.TEXT_HTML); + } + + } + }