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 e39f7b53..95f3da59 100644 --- a/engine/src/main/java/org/archive/crawler/framework/Engine.java +++ b/engine/src/main/java/org/archive/crawler/framework/Engine.java @@ -83,20 +83,26 @@ public class Engine { public boolean accept(File pathname) { return pathname.isDirectory(); }})) { - for (File cxml : dir.listFiles(new FilenameFilter() { - public boolean accept(File dir, String name) { - return name.endsWith(".cxml"); - }})) { - try { - CrawlJob cj = new CrawlJob(cxml); - if(!jobConfigs.containsKey(cj.getShortName())) { - jobConfigs.put(cj.getShortName(),cj); - } - } catch (IllegalArgumentException iae) { - LOGGER.log(Level.WARNING,"bad cxml: "+cxml,iae); + considerAsJobDirectory(dir); + } + } + + public boolean considerAsJobDirectory(File dir) { + for (File cxml : dir.listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(".cxml"); + }})) { + try { + CrawlJob cj = new CrawlJob(cxml); + if(!jobConfigs.containsKey(cj.getShortName())) { + jobConfigs.put(cj.getShortName(),cj); + return true; } + } catch (IllegalArgumentException iae) { + LOGGER.log(Level.WARNING,"bad cxml: "+cxml,iae); } } + return false; } public Map getJobConfigs() { 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 6cb7bd17..9024822b 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java @@ -72,6 +72,21 @@ public class EngineApplication extends Application { router.attach("/engine/jobsdir",alljobsdir); + EnhDirectory anypath = new EnhDirectory( + getContext(), + engine.getJobsDir().toURI().toString() /*TODO: changeme*/) { + @Override + Reference determineRootRef(Request request) { + String ref = "file:/"; + System.out.println(ref); + return new Reference(ref); + }}; + anypath.setListingAllowed(true); + anypath.setModifiable(true); + anypath.setEditFilter(JobResource.EDIT_FILTER); + + router.attach("/engine/anypath/",anypath); + EnhDirectory jobdir = new EnhDirectory( getContext(), engine.getJobsDir().toURI().toString() /*TODO: changeme*/) { 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 9b590b84..e56e3667 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java @@ -72,7 +72,9 @@ public class EngineResource extends Resource { String action = form.getFirstValue("action"); if("rescan".equals(action)) { getEngine().findJobConfigs(); - } + } else if ("add".equals(action)) { + getEngine().considerAsJobDirectory(new File(form.getFirstValue("addpath"))); + } // default: redirect to GET self getResponse().redirectSeeOther(getRequest().getOriginalRef()); } @@ -105,7 +107,7 @@ public class EngineResource extends Resource { jobs.addAll(engine.getJobConfigs().values()); pw.println("

Job Directories ("+jobs.size()+")"); - pw.println(""); + pw.println(""); pw.println("

"); Collections.sort(jobs); pw.println(""); pw.println( "To create a new job, use the 'copy' functionality on " + - "an existing job's detail page, or create a new job " + - "directory outside this interface and use the 'rescan' " + - "button."); + "an existing job's detail page. Or, create a new job " + + "directory manually the main jobs directory and use the " + + "'rescan' button above. Or, supply a full path to another " + + "valid job directory at the engine machine below.

"); + + pw.println("
"); + pw.println("Add job directory: "); + pw.println(""); + pw.println("
"); + pw.println(""); pw.flush(); } diff --git a/engine/src/main/java/org/archive/crawler/restlet/JobResource.java b/engine/src/main/java/org/archive/crawler/restlet/JobResource.java index c91e91bc..aeb9ae63 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/JobResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/JobResource.java @@ -151,7 +151,7 @@ public class JobResource extends Resource { pw.println(" disabled "); } pw.println(" type='submit' name='action' value='terminate'/>"); - pw.println("
"); @@ -332,7 +332,20 @@ public class JobResource extends Resource { protected void printLinkedIfInJobDirectory(PrintWriter pw, File f) { String jobDirRelative = cj.jobDirRelativePath(f); if(jobDirRelative==null) { - pw.println(f); + /// print via anypath + String fullPath = f.getAbsolutePath(); + fullPath = fullPath.replace(File.separatorChar, '/'); + pw.println("" + + f +""); + if(EDIT_FILTER.accept(f)) { + pw.println("[edit]
"); + } + + + //pw.println(f); return; } pw.println("