From 1a136b21d57ba02380762a36d7f00ec82d3f22f2 Mon Sep 17 00:00:00 2001 From: szznax Date: Thu, 8 Oct 2009 23:55:42 +0000 Subject: [PATCH] Fix for [HER-1419] can't create job in web ui without profile/job to base it on in jobs dir? * Engine.java createNewJobWithDefaults() to write profile-crawler-beans.cxml resoure into new job * EngineResource.java added FORM for new job dir and "create" action * profile-crawler-beans.cxml added resource from dist/src/main/conf/jobs/profile-defaults to bootstrap new jobs --- .../org/archive/crawler/framework/Engine.java | 23 + .../crawler/restlet/EngineResource.java | 37 ++ .../restlet/profile-crawler-beans.cxml | 523 ++++++++++++++++++ 3 files changed, 583 insertions(+) create mode 100644 engine/src/main/java/org/archive/crawler/restlet/profile-crawler-beans.cxml diff --git a/engine/src/main/java/org/archive/crawler/framework/Engine.java b/engine/src/main/java/org/archive/crawler/framework/Engine.java index fee3ef86..7b68c9c0 100644 --- a/engine/src/main/java/org/archive/crawler/framework/Engine.java +++ b/engine/src/main/java/org/archive/crawler/framework/Engine.java @@ -23,12 +23,14 @@ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.io.filefilter.FileFilterUtils; import org.archive.util.ArchiveUtils; @@ -272,5 +274,26 @@ public class Engine { return false; } + public boolean createNewJobWithDefaults(String path) throws IOException { + + File newJobDir = new File(jobsDir,"/"+path); + if (newJobDir.exists()) { + throw new IOException("file exists: "+newJobDir); + } + newJobDir.mkdirs(); + + // get crawler-beans template from this package into string + InputStream inStream = getClass().getResourceAsStream( + "/org/archive/crawler/restlet/profile-crawler-beans.cxml"); + String defaultCxmlStr = IOUtils.toString(inStream); + inStream.close(); + + // write default crawler-beans string to new job config + File newJobCxml = new File(newJobDir,"crawler-beans.cxml"); + FileUtils.writeStringToFile(newJobCxml, defaultCxmlStr); + + return true; + } + } \ No newline at end of file diff --git a/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java b/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java index afa7ed4b..c87a9661 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java @@ -85,6 +85,35 @@ public class EngineResource extends Resource { if(!added) { Flash.addFlash(getResponse(), "not a valid preexisting job directory: \""+path+"\"", Flash.Kind.NACK); } + } else if ("create".equals(action)) { + String errStyle = "style=\"margin:1em;padding:0.2em 1em;background:pink;\""; + String warnStyle = errStyle; + String msgStyle = "style=\"margin:1em;padding:0.2em 1em;background:khaki;\""; + String path = form.getFirstValue("addpath"); + if (path.indexOf("/") != -1) { + String warn = "
WARNING: " + + "no job created. sub-directories disallowed: " + + "" + path + "
\n"; + Flash.addFlash(getResponse(), warn, Flash.Kind.NACK); + System.err.println(warn); + } else { + boolean created = false; + try { + created = getEngine().createNewJobWithDefaults(path); + } catch (IOException e) { + String err = "
ERROR! failed to create new job: " + + "" + path + " "+ e.toString() + "
\n"; + Flash.addFlash(getResponse(), err, Flash.Kind.NACK); + System.err.println(err); + + } + if (created) { + String msg = "

Successfully created job: " + + "" + path + "

\n"; + Flash.addFlash(getResponse(), msg, Flash.Kind.NACK); + getEngine().findJobConfigs(); + } + } } // default: redirect to GET self getResponse().redirectSeeOther(getRequest().getOriginalRef()); @@ -137,6 +166,14 @@ public class EngineResource extends Resource { "'rescan' button above. Or, supply a full path to another " + "valid job directory at the engine machine below.

"); + // create new job with defaults + pw.println("
\n" + + "Create new job with recommended defaults
\n" + + jobsDir.getAbsolutePath() + "/\n" + + "\n" + + "\n" + + "
\n"); + pw.println("
"); pw.println("Add job directory: "); pw.println(""); diff --git a/engine/src/main/java/org/archive/crawler/restlet/profile-crawler-beans.cxml b/engine/src/main/java/org/archive/crawler/restlet/profile-crawler-beans.cxml new file mode 100644 index 00000000..fa50dcc5 --- /dev/null +++ b/engine/src/main/java/org/archive/crawler/restlet/profile-crawler-beans.cxml @@ -0,0 +1,523 @@ + + + + + + + + + + + +# This Properties map is specified in the Java 'property list' text format +# http://java.sun.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 + +metadata.operatorContactUrl=ENTER_AN_URL_WITH_YOUR_CONTACT_INFO_HERE_FOR_WEBMASTERS_AFFECTED_BY_YOUR_CRAWL +metadata.jobName=basic +metadata.description=Basic crawl starting with useful defaults + +##..more?..## + + + + + + + + + + +# URLS HERE +http://example.example/example + + + + + + + + + + + + + + + +# [see override above] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +