From 4233a930f0a3544bfa9070707e33928f129a67a8 Mon Sep 17 00:00:00 2001 From: Alex Osborne Date: Sun, 1 Aug 2021 14:59:27 +0900 Subject: [PATCH 1/3] UI: Use a single instance of Freemarker for the whole application So we don't need to configure it separately in every resource class that uses HTML templates. --- .../archive/crawler/restlet/BaseResource.java | 5 +++++ .../crawler/restlet/BeanBrowseResource.java | 16 ++-------------- .../crawler/restlet/EngineApplication.java | 12 +++++++++++- .../archive/crawler/restlet/EngineResource.java | 16 +--------------- .../org/archive/crawler/restlet/JobResource.java | 14 +------------- .../archive/crawler/restlet/ScriptResource.java | 16 ++-------------- 6 files changed, 22 insertions(+), 57 deletions(-) diff --git a/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java b/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java index 72ae434b..c1270797 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java @@ -27,6 +27,11 @@ import org.restlet.resource.ServerResource; * @author nlevitt */ public abstract class BaseResource extends ServerResource { + @Override + public EngineApplication getApplication() { + return (EngineApplication) super.getApplication(); + } + protected String getStaticRef(String resource) { String rootRef = getRequest().getRootRef().toString(); return rootRef + "/engine/static/" + resource; diff --git a/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java b/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java index 5ae0c897..ef5e60be 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java @@ -63,8 +63,7 @@ import freemarker.template.TemplateException; */ public class BeanBrowseResource extends JobRelatedResource { protected PathSharingContext appCtx; - protected String beanPath; - private Configuration _templateConfiguration; + protected String beanPath; @Override public void init(Context ctx, Request req, Response res) throws ResourceException { @@ -82,17 +81,6 @@ public class BeanBrowseResource extends JobRelatedResource { } else { beanPath = ""; } - - Configuration tmpltCfg = new Configuration(); - tmpltCfg.setClassForTemplateLoading(this.getClass(),""); - tmpltCfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER); - setTemplateConfiguration(tmpltCfg); - } - public void setTemplateConfiguration(Configuration tmpltCfg) { - _templateConfiguration=tmpltCfg; - } - public Configuration getTemplateConfiguration(){ - return _templateConfiguration; } @Override @@ -225,7 +213,7 @@ public class BeanBrowseResource extends JobRelatedResource { if(!baseRef.endsWith("/")) { baseRef += "/"; } - Configuration tmpltCfg = getTemplateConfiguration(); + Configuration tmpltCfg = getApplication().getTemplateConfiguration(); ViewModel viewModel = new ViewModel(); viewModel.setFlashes(Flash.getFlashes(getRequest())); 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 a82c3026..b5ac3951 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java @@ -23,6 +23,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; +import freemarker.template.Configuration; +import freemarker.template.ObjectWrapper; import org.archive.crawler.framework.Engine; import org.archive.util.TextUtils; import org.restlet.Application; @@ -48,12 +50,17 @@ import org.restlet.service.StatusService; * @author gojomo */ public class EngineApplication extends Application { - protected Engine engine; + protected Engine engine; + private final Configuration templateConfiguration; + public EngineApplication(Engine engine) { this.engine = engine; getMetadataService().addExtension("log", MediaType.TEXT_PLAIN ); getMetadataService().addExtension("cxml", MediaType.APPLICATION_XML ); setStatusService(new EngineStatusService()); + templateConfiguration = new Configuration(); + templateConfiguration.setClassForTemplateLoading(getClass(), ""); + templateConfiguration.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER); } @Override @@ -159,4 +166,7 @@ public class EngineApplication extends Application { } + public Configuration getTemplateConfiguration() { + return templateConfiguration; + } } 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 4cedda7d..588b271f 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java @@ -58,25 +58,11 @@ import static org.restlet.data.MediaType.APPLICATION_XML; */ public class EngineResource extends BaseResource { - private Configuration _templateConfiguration; - @Override public void init(Context ctx, Request req, Response res) { super.init(ctx, req, res); getVariants().add(new Variant(MediaType.TEXT_HTML)); getVariants().add(new Variant(APPLICATION_XML)); - - Configuration tmpltCfg = new Configuration(); - tmpltCfg.setClassForTemplateLoading(this.getClass(),""); - tmpltCfg.setObjectWrapper(new DefaultObjectWrapper()); - setTemplateConfiguration(tmpltCfg); - } - - public void setTemplateConfiguration(Configuration tmpltCfg) { - _templateConfiguration=tmpltCfg; - } - public Configuration getTemplateConfiguration(){ - return _templateConfiguration; } @Override @@ -233,7 +219,7 @@ public class EngineResource extends BaseResource { if(!baseRef.endsWith("/")) { baseRef += "/"; } - Configuration tmpltCfg = getTemplateConfiguration(); + Configuration tmpltCfg = getApplication().getTemplateConfiguration(); ViewModel viewModel = new ViewModel(); viewModel.setFlashes(Flash.getFlashes(getRequest())); 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 5b4ab6c7..54bceb15 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/JobResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/JobResource.java @@ -61,7 +61,6 @@ import freemarker.template.TemplateException; public class JobResource extends BaseResource { public static final IOFileFilter EDIT_FILTER = FileUtils .getRegexFileFilter(".*\\.((c?xml)|(txt))$"); - private Configuration _templateConfiguration; @SuppressWarnings("unused") private static final Logger logger = Logger.getLogger(JobResource.class @@ -77,17 +76,6 @@ public class JobResource extends BaseResource { getVariants().add(new Variant(MediaType.APPLICATION_XML)); cj = getEngine().getJob( TextUtils.urlUnescape((String) req.getAttributes().get("job"))); - - Configuration tmpltCfg = new Configuration(); - tmpltCfg.setClassForTemplateLoading(this.getClass(),""); - tmpltCfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER); - setTemplateConfiguration(tmpltCfg); - } - public void setTemplateConfiguration(Configuration tmpltCfg) { - _templateConfiguration=tmpltCfg; - } - public Configuration getTemplateConfiguration(){ - return _templateConfiguration; } @Override @@ -139,7 +127,7 @@ public class JobResource extends BaseResource { if(!baseRef.endsWith("/")) { baseRef += "/"; } - Configuration tmpltCfg = getTemplateConfiguration(); + Configuration tmpltCfg = getApplication().getTemplateConfiguration(); ViewModel viewModel = new ViewModel(); viewModel.setFlashes(Flash.getFlashes(getRequest())); diff --git a/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java b/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java index 58fee0f9..26cd4129 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java @@ -80,28 +80,16 @@ public class ScriptResource extends JobRelatedResource { } protected String chosenEngine = FACTORIES.isEmpty() ? "" : FACTORIES.getFirst().getNames().get(0); - private Configuration _templateConfiguration; @Override public void init(Context ctx, Request req, Response res) throws ResourceException { super.init(ctx, req, res); getVariants().add(new Variant(MediaType.TEXT_HTML)); getVariants().add(new Variant(MediaType.APPLICATION_XML)); - - Configuration tmpltCfg = new Configuration(); - tmpltCfg.setClassForTemplateLoading(this.getClass(),""); - tmpltCfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER); - setTemplateConfiguration(tmpltCfg); scriptingConsole = new ScriptingConsole(cj); } - public void setTemplateConfiguration(Configuration tmpltCfg) { - _templateConfiguration=tmpltCfg; - } - public Configuration getTemplateConfiguration(){ - return _templateConfiguration; - } - + private ScriptingConsole scriptingConsole; @Override @@ -184,7 +172,7 @@ public class ScriptResource extends JobRelatedResource { if(!baseRef.endsWith("/")) { baseRef += "/"; } - Configuration tmpltCfg = getTemplateConfiguration(); + Configuration tmpltCfg = getApplication().getTemplateConfiguration(); ViewModel viewModel = new ViewModel(); viewModel.setFlashes(Flash.getFlashes(getRequest())); From 2719d022d5017a0ff10fb00c67d90120391b81a3 Mon Sep 17 00:00:00 2001 From: Alex Osborne Date: Sun, 1 Aug 2021 15:50:37 +0900 Subject: [PATCH 2/3] UI: Refactor duplicated template code into a common render() helper We remove the calls to setCharacterSet(UTF_8) since WriterRepresentation's constructor does that anyway. --- .../archive/crawler/restlet/BaseResource.java | 43 +++++++++++ .../crawler/restlet/BeanBrowseResource.java | 45 +---------- .../crawler/restlet/EngineResource.java | 48 ++---------- .../archive/crawler/restlet/JobResource.java | 42 ++-------- .../crawler/restlet/ScriptResource.java | 76 ++++--------------- 5 files changed, 74 insertions(+), 180 deletions(-) diff --git a/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java b/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java index c1270797..800f9391 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java @@ -19,8 +19,19 @@ package org.archive.crawler.restlet; +import freemarker.template.ObjectWrapper; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import org.archive.crawler.restlet.models.ViewModel; +import org.restlet.data.MediaType; +import org.restlet.representation.Representation; +import org.restlet.representation.WriterRepresentation; import org.restlet.resource.ServerResource; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.io.Writer; + /** * Abstract {@code Resource} with common shared functionality. * @@ -36,4 +47,36 @@ public abstract class BaseResource extends ServerResource { String rootRef = getRequest().getRootRef().toString(); return rootRef + "/engine/static/" + resource; } + + protected Representation render(String templateName, ViewModel viewModel) { + return render(templateName, viewModel, null); + } + + protected Representation render(String templateName, ViewModel viewModel, ObjectWrapper objectWrapper) { + String baseRef = getRequest().getResourceRef().getBaseRef().toString(); + if(!baseRef.endsWith("/")) { + baseRef += "/"; + } + viewModel.put("baseRef", baseRef); + viewModel.setFlashes(Flash.getFlashes(getRequest())); + + Template template; + try { + template = getApplication().getTemplateConfiguration().getTemplate(templateName); + } catch (IOException e) { + throw new UncheckedIOException("Error reading template " + templateName, e); + } + + return new WriterRepresentation(MediaType.TEXT_HTML) { + @Override + public void write(Writer writer) throws IOException { + try { + template.process(viewModel, writer, objectWrapper); + } catch (TemplateException e) { + throw new RuntimeException(e); + } + writer.flush(); + } + }; + } } diff --git a/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java b/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java index ef5e60be..0922a054 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/BeanBrowseResource.java @@ -33,7 +33,6 @@ import org.archive.crawler.restlet.models.BeansModel; import org.archive.crawler.restlet.models.ViewModel; import org.archive.spring.PathSharingContext; import org.restlet.Context; -import org.restlet.data.CharacterSet; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.data.Reference; @@ -47,11 +46,6 @@ import org.restlet.representation.Variant; import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.BeansException; -import freemarker.template.Configuration; -import freemarker.template.ObjectWrapper; -import freemarker.template.Template; -import freemarker.template.TemplateException; - /** * Restlet Resource which allows browsing the constructed beans in * a hierarchical fashion. @@ -129,24 +123,17 @@ public class BeanBrowseResource extends JobRelatedResource { throw new ResourceException(404); } - Representation representation; if (variant.getMediaType() == MediaType.APPLICATION_XML) { - representation = new WriterRepresentation(MediaType.APPLICATION_XML) { + return new WriterRepresentation(MediaType.APPLICATION_XML) { public void write(Writer writer) throws IOException { XmlMarshaller.marshalDocument(writer, "beans", makeDataModel()); } }; } else { - representation = new WriterRepresentation( - MediaType.TEXT_HTML) { - public void write(Writer writer) throws IOException { - BeanBrowseResource.this.writeHtml(writer); - } - }; + ViewModel viewModel = new ViewModel(); + viewModel.put("model", makeDataModel()); + return render("Beans.ftl", viewModel); } - // TODO: remove if not necessary in future? - representation.setCharacterSet(CharacterSet.UTF_8); - return representation; } /** @@ -207,28 +194,4 @@ public class BeanBrowseResource extends JobRelatedResource { nestedNames); } - - protected void writeHtml(Writer writer) { - String baseRef = getRequest().getResourceRef().getBaseRef().toString(); - if(!baseRef.endsWith("/")) { - baseRef += "/"; - } - Configuration tmpltCfg = getApplication().getTemplateConfiguration(); - - ViewModel viewModel = new ViewModel(); - viewModel.setFlashes(Flash.getFlashes(getRequest())); - viewModel.put("baseRef",baseRef); - viewModel.put("model",makeDataModel()); - - try { - Template template = tmpltCfg.getTemplate("Beans.ftl"); - template.process(viewModel, writer); - writer.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (TemplateException e) { - throw new RuntimeException(e); - } - - } } 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 588b271f..1ae8d891 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java @@ -25,14 +25,13 @@ import java.io.Writer; import java.util.HashMap; import java.util.Map; +import freemarker.template.ObjectWrapper; import org.archive.crawler.framework.CrawlJob; -import org.archive.crawler.framework.Engine; import org.archive.crawler.restlet.models.EngineModel; import org.archive.crawler.restlet.models.ViewModel; import org.restlet.Context; import org.restlet.Request; import org.restlet.Response; -import org.restlet.data.CharacterSet; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.representation.EmptyRepresentation; @@ -41,11 +40,6 @@ import org.restlet.representation.WriterRepresentation; import org.restlet.resource.ResourceException; import org.restlet.representation.Variant; -import freemarker.template.Configuration; -import freemarker.template.DefaultObjectWrapper; -import freemarker.template.Template; -import freemarker.template.TemplateException; - import static org.restlet.data.MediaType.APPLICATION_XML; /** @@ -67,23 +61,18 @@ public class EngineResource extends BaseResource { @Override protected Representation get(Variant variant) throws ResourceException { - Representation representation; if (variant.getMediaType() == APPLICATION_XML) { - representation = new WriterRepresentation(APPLICATION_XML) { + return new WriterRepresentation(APPLICATION_XML) { public void write(Writer writer) throws IOException { XmlMarshaller.marshalDocument(writer, "engine", makeDataModel()); } }; } else { - representation = new WriterRepresentation(MediaType.TEXT_HTML) { - public void write(Writer writer) throws IOException { - EngineResource.this.writeHtml(writer); - } - }; + ViewModel viewModel = new ViewModel(); + viewModel.put("fileSeparator", File.separator); + viewModel.put("engine", makeDataModel()); + return render("Engine.ftl", viewModel, ObjectWrapper.DEFAULT_WRAPPER); } - // TODO: remove if not necessary in future? - representation.setCharacterSet(CharacterSet.UTF_8); - return representation; } @Override @@ -212,31 +201,6 @@ public class EngineResource extends BaseResource { return new EngineModel(getEngine(), baseRef); } - - protected void writeHtml(Writer writer) { - EngineModel model = makeDataModel(); - String baseRef = getRequest().getResourceRef().getBaseRef().toString(); - if(!baseRef.endsWith("/")) { - baseRef += "/"; - } - Configuration tmpltCfg = getApplication().getTemplateConfiguration(); - - ViewModel viewModel = new ViewModel(); - viewModel.setFlashes(Flash.getFlashes(getRequest())); - viewModel.put("baseRef",baseRef); - viewModel.put("fileSeparator", File.separator); - viewModel.put("engine", model); - - try { - Template template = tmpltCfg.getTemplate("Engine.ftl"); - template.process(viewModel, writer); - writer.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (TemplateException e) { - throw new RuntimeException(e); - } - } protected Engine getEngine() { return ((EngineApplication)getApplication()).getEngine(); 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 54bceb15..3df3f0f8 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/JobResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/JobResource.java @@ -84,9 +84,8 @@ public class JobResource extends BaseResource { throw new ResourceException(404); } - Representation representation = null; if (variant.getMediaType() == MediaType.APPLICATION_XML) { - representation = new WriterRepresentation(MediaType.APPLICATION_XML) { + return new WriterRepresentation(MediaType.APPLICATION_XML) { public void write(Writer writer) throws IOException { CrawlJobModel model = makeDataModel(); model.put("heapReport", getEngine().heapReportData()); @@ -94,17 +93,11 @@ public class JobResource extends BaseResource { } }; } else { - representation = new WriterRepresentation(MediaType.TEXT_HTML) { - public void write(Writer writer) throws IOException { - JobResource.this.writeHtml(writer); - } - }; + ViewModel viewModel = new ViewModel(); + viewModel.put("heapReport", getEngine().heapReportData()); + viewModel.put("job", makeDataModel()); + return render("Job.ftl", viewModel); } - - // TODO: remove if not necessary in future? - // honor requested charset? - representation.setCharacterSet(CharacterSet.UTF_8); - return representation; } /** @@ -122,31 +115,6 @@ public class JobResource extends BaseResource { return new CrawlJobModel(cj,baseRef); } - protected void writeHtml(Writer writer) { - String baseRef = getRequest().getResourceRef().getBaseRef().toString(); - if(!baseRef.endsWith("/")) { - baseRef += "/"; - } - Configuration tmpltCfg = getApplication().getTemplateConfiguration(); - - ViewModel viewModel = new ViewModel(); - viewModel.setFlashes(Flash.getFlashes(getRequest())); - viewModel.put("baseRef",baseRef); - viewModel.put("job", makeDataModel()); - viewModel.put("heapReport", getEngine().heapReportData()); - - try { - Template template = tmpltCfg.getTemplate("Job.ftl"); - template.process(viewModel, writer); - writer.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (TemplateException e) { - throw new RuntimeException(e); - } - - } - /** * Get a usable HrefPath, relative to the JobResource, for the given file. * Assumes usual helper resources ('jobdir/', 'anypath/') at the usual diff --git a/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java b/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java index 26cd4129..adb86f77 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/ScriptResource.java @@ -19,39 +19,26 @@ package org.archive.crawler.restlet; -import java.io.IOException; -import java.io.Writer; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import javax.script.ScriptEngine; -import javax.script.ScriptEngineFactory; -import javax.script.ScriptEngineManager; - import org.apache.commons.lang.StringUtils; import org.archive.crawler.restlet.models.ScriptModel; import org.archive.crawler.restlet.models.ViewModel; import org.restlet.Context; -import org.restlet.data.CharacterSet; +import org.restlet.Request; +import org.restlet.Response; import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.data.Reference; -import org.restlet.Request; -import org.restlet.Response; import org.restlet.representation.Representation; +import org.restlet.representation.Variant; import org.restlet.representation.WriterRepresentation; import org.restlet.resource.ResourceException; -import org.restlet.representation.Variant; -import freemarker.template.Configuration; -import freemarker.template.ObjectWrapper; -import freemarker.template.Template; -import freemarker.template.TemplateException; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineFactory; +import javax.script.ScriptEngineManager; +import java.io.IOException; +import java.io.Writer; +import java.util.*; /** * Restlet Resource which runs an arbitrary script, which is supplied @@ -114,23 +101,20 @@ public class ScriptResource extends JobRelatedResource { @Override public Representation get(Variant variant) throws ResourceException { - Representation representation; if (variant.getMediaType() == MediaType.APPLICATION_XML) { - representation = new WriterRepresentation(MediaType.APPLICATION_XML) { + return new WriterRepresentation(MediaType.APPLICATION_XML) { public void write(Writer writer) throws IOException { XmlMarshaller.marshalDocument(writer,"script", makeDataModel()); } }; } else { - representation = new WriterRepresentation(MediaType.TEXT_HTML) { - public void write(Writer writer) throws IOException { - ScriptResource.this.writeHtml(writer); - } - }; + ViewModel viewModel = new ViewModel(); + viewModel.put("baseResourceRef", getRequest().getRootRef().toString() + "/engine/static/"); + viewModel.put("model", makeDataModel()); + viewModel.put("selectedEngine", chosenEngine); + viewModel.put("staticRef", getStaticRef("")); + return render("Script.ftl", viewModel); } - // TODO: remove if not necessary in future? - representation.setCharacterSet(CharacterSet.UTF_8); - return representation; } protected Collection> getAvailableScriptEngines() { @@ -165,32 +149,4 @@ public class ScriptResource extends JobRelatedResource { return model; } - - protected void writeHtml(Writer writer) { - - String baseRef = getRequest().getResourceRef().getBaseRef().toString(); - if(!baseRef.endsWith("/")) { - baseRef += "/"; - } - Configuration tmpltCfg = getApplication().getTemplateConfiguration(); - - ViewModel viewModel = new ViewModel(); - viewModel.setFlashes(Flash.getFlashes(getRequest())); - viewModel.put("baseRef",baseRef); - viewModel.put("staticRef", getStaticRef("")); - viewModel.put("baseResourceRef",getRequest().getRootRef().toString()+"/engine/static/"); - viewModel.put("model", makeDataModel()); - viewModel.put("selectedEngine", chosenEngine); - - try { - Template template = tmpltCfg.getTemplate("Script.ftl"); - template.process(viewModel, writer); - writer.flush(); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (TemplateException e) { - throw new RuntimeException(e); - } - - } } From ed13a2b0c51be516945f92642195613ae1a5789f Mon Sep 17 00:00:00 2001 From: Alex Osborne Date: Sun, 1 Aug 2021 16:02:15 +0900 Subject: [PATCH 3/3] UI: Pull duplicate getEngine() methods up to BaseResource Each direct subclass of BaseResource defines an identical getEngine() method so let's pull it up to BaseResource. We can also don't need the type cast anymore as BaseResource.getApplication() does it for us. --- .../main/java/org/archive/crawler/restlet/BaseResource.java | 5 +++++ .../java/org/archive/crawler/restlet/EngineResource.java | 4 ---- .../java/org/archive/crawler/restlet/JobRelatedResource.java | 4 ---- .../main/java/org/archive/crawler/restlet/JobResource.java | 4 ---- 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java b/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java index 800f9391..52ec8a1c 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/BaseResource.java @@ -22,6 +22,7 @@ package org.archive.crawler.restlet; import freemarker.template.ObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; +import org.archive.crawler.framework.Engine; import org.archive.crawler.restlet.models.ViewModel; import org.restlet.data.MediaType; import org.restlet.representation.Representation; @@ -43,6 +44,10 @@ public abstract class BaseResource extends ServerResource { return (EngineApplication) super.getApplication(); } + protected Engine getEngine() { + return getApplication().getEngine(); + } + protected String getStaticRef(String resource) { String rootRef = getRequest().getRootRef().toString(); return rootRef + "/engine/static/" + resource; 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 1ae8d891..524c3e48 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineResource.java @@ -201,8 +201,4 @@ public class EngineResource extends BaseResource { return new EngineModel(getEngine(), baseRef); } - - protected Engine getEngine() { - return ((EngineApplication)getApplication()).getEngine(); - } } diff --git a/engine/src/main/java/org/archive/crawler/restlet/JobRelatedResource.java b/engine/src/main/java/org/archive/crawler/restlet/JobRelatedResource.java index 25c6289a..20c1c409 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/JobRelatedResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/JobRelatedResource.java @@ -72,10 +72,6 @@ public abstract class JobRelatedResource extends BaseResource { } } - protected Engine getEngine() { - return ((EngineApplication)getApplication()).getEngine(); - } - /** * Starting at (and including) the given object, adds nested Map * representations of named beans to the {@code namedBeans} Collection. The 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 3df3f0f8..8ad04377 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/JobResource.java +++ b/engine/src/main/java/org/archive/crawler/restlet/JobResource.java @@ -138,10 +138,6 @@ public class JobResource extends BaseResource { return "../../anypath/" + fullPath; } - protected Engine getEngine() { - return ((EngineApplication) getApplication()).getEngine(); - } - @Override public Representation post(Representation entity, Variant variant) throws ResourceException {