diff --git a/README.md b/README.md index 2ddb2d3..0ce7986 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Minimum dependencies that you need to provide in your application: #### Vanilla setup -Create an instance of `Loader` (concrete class `com.eclecticlogic.pedal.loader.impl.LoaderImpl`) and give it a reference to an `EntityManager`. +For classpath-based loading, create an instance of `Loader` (concrete class `com.eclecticlogic.pedal.loader.impl.LoaderImpl`) and give it a reference to an `EntityManager`. For filesystem-based loading, create an instance of `com.eclecticlogic.pedal.loader.impl.FileSystemLoaderImpl` instead of `com.eclecticlogic.pedal.loader.impl.LoaderImpl`. #### Spring @@ -62,7 +62,7 @@ The Loader interface provides a number of methods to specify your script and inp ``` loader.withScriptDirectory("myScripts").load("basicdata.groovy"); ``` -This specifies that the loader should read the script basicdata.groovy contained within a classpath directory called myScripts. The file could just as well have been specified with the directory as `myScripts\basicdata.groovy`. However, the withScriptDirectory allows you to setup a well known directory and have all other calls simply reference the script by name without worry about relative paths. +This specifies that the loader should read the script basicdata.groovy contained within a classpath or filesystem directory called myScripts. The file could just as well have been specified with the directory as `myScripts\basicdata.groovy`. However, the withScriptDirectory allows you to setup a well known directory and have all other calls simply reference the script by name without worry about relative paths. ### Script Format diff --git a/src/main/java/com/eclecticlogic/pedal/loader/impl/AbstractLoaderImpl.java b/src/main/java/com/eclecticlogic/pedal/loader/impl/AbstractLoaderImpl.java new file mode 100644 index 0000000..5a339ae --- /dev/null +++ b/src/main/java/com/eclecticlogic/pedal/loader/impl/AbstractLoaderImpl.java @@ -0,0 +1,85 @@ +package com.eclecticlogic.pedal.loader.impl; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import com.eclecticlogic.pedal.loader.Loader; +import com.eclecticlogic.pedal.loader.LoaderExecutor; +import com.eclecticlogic.pedal.loader.Script; + +import groovy.lang.Closure; + +/** + * + * Abstract implementation for all of the {@link Loader} implementations + * + * @author kabram. + * @author Craig Setera + * + */ +public abstract class AbstractLoaderImpl implements Loader { + + public AbstractLoaderImpl() { + super(); + } + + public AbstractLoaderImpl(EntityManager entityManager) { + super(); + this.entityManager = entityManager; + } + + protected String scriptDirectory; + protected Map> customMethods = new HashMap<>(); + + @PersistenceContext + protected EntityManager entityManager; + + public void setEntityManager(EntityManager entityManager) { + this.entityManager = entityManager; + } + + @Override + public Loader withScriptDirectory(String directory) { + scriptDirectory = directory; + return this; + } + + @Override + public Loader withCustomMethod(String methodName, Closure closure) { + customMethods.put(methodName, closure); + return this; + } + + @Override + public LoaderExecutor withInputs(Map inputs) { + AbstractScriptExecutor executor = createScriptExecutor(); + executor.setInputs(inputs); + return executor; + } + + @Override + public Map load(String loadScript, String... additionalScripts) { + return createScriptExecutor().load(loadScript, additionalScripts); + } + + @Override + public Map load(Script script, Script... additionalScripts) { + return createScriptExecutor().load(script, additionalScripts); + } + + @Override + public Map load(Collection loadScripts) { + return createScriptExecutor().load(loadScripts); + } + + @Override + public Map loadNamespaced(Collection