From 3926be1443026a3f6f51155f37d8ab951e05bd83 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Sun, 5 May 2024 20:23:30 +0200 Subject: [PATCH] Organized view-components into subpackages. --- .../view/component/AbstractViewComponent.java | 7 ++- .../component/ComponentTemplateCompiler.java | 5 -- .../groowt/view/component/TemplateSource.java | 55 ------------------- .../groowt/view/component/ViewComponent.java | 2 +- .../AbstractComponentTemplateCompiler.java | 11 ++-- .../CachingComponentTemplateCompiler.java | 10 +++- .../ComponentTemplateCompileException.java} | 12 ++-- .../compiler/ComponentTemplateCompiler.java | 9 +++ .../{ => context}/ComponentContext.java | 4 +- .../ComponentCreateException.java | 4 +- .../{ => context}/ComponentScope.java | 4 +- .../DefaultComponentContext.java | 4 +- .../{ => context}/DefaultComponentScope.java | 4 +- .../MissingClassTypeException.java | 4 +- .../MissingComponentException.java | 8 ++- .../MissingFragmentTypeException.java | 4 +- .../MissingStringTypeException.java | 4 +- .../NoFactoryMissingException.java | 2 +- .../ClosureComponentFactory.java | 6 +- .../{ => factory}/ComponentFactory.java | 4 +- .../{ => factory}/ComponentFactoryBase.java | 4 +- .../{ => factory}/ComponentFactoryUtil.java | 7 +-- .../factory/ComponentTemplateSource.java | 55 +++++++++++++++++++ .../SupplierComponentFactory.java | 5 +- .../view/web/DefaultWebViewComponent.groovy | 16 +++--- .../web/DefaultWebViewComponentContext.groovy | 4 +- .../view/web/WebViewComponentFactories.groovy | 2 +- .../groowt/view/web/WebViewScope.groovy | 5 +- .../groovy/groowt/view/web/lib/Echo.groovy | 4 +- .../view/web/AbstractWebViewComponent.java | 6 +- ...faultWebViewComponentTemplateCompiler.java | 11 ++-- .../view/web/WebViewComponentContext.java | 2 +- .../web/WebViewComponentTemplateCompiler.java | 2 +- .../transpile/DefaultComponentTranspiler.java | 1 + .../view/web/transpile/TranspilerUtil.java | 2 +- .../web/DefaultWebViewComponentTests.groovy | 2 +- .../groowt/view/web/lib/FragmentTests.groovy | 7 +-- .../lib/AbstractWebViewComponentTests.groovy | 2 +- .../web/transpiler/GroovyTranspilerTests.java | 2 +- .../groowt/view/web/tools/RunTemplate.groovy | 2 +- 40 files changed, 172 insertions(+), 132 deletions(-) delete mode 100644 view-components/src/main/java/groowt/view/component/ComponentTemplateCompiler.java delete mode 100644 view-components/src/main/java/groowt/view/component/TemplateSource.java rename view-components/src/main/java/groowt/view/component/{ => compiler}/AbstractComponentTemplateCompiler.java (81%) rename view-components/src/main/java/groowt/view/component/{ => compiler}/CachingComponentTemplateCompiler.java (70%) rename view-components/src/main/java/groowt/view/component/{ComponentTemplateCreateException.java => compiler/ComponentTemplateCompileException.java} (79%) create mode 100644 view-components/src/main/java/groowt/view/component/compiler/ComponentTemplateCompiler.java rename view-components/src/main/java/groowt/view/component/{ => context}/ComponentContext.java (93%) rename view-components/src/main/java/groowt/view/component/{ => context}/ComponentCreateException.java (91%) rename view-components/src/main/java/groowt/view/component/{ => context}/ComponentScope.java (91%) rename view-components/src/main/java/groowt/view/component/{ => context}/DefaultComponentContext.java (97%) rename view-components/src/main/java/groowt/view/component/{ => context}/DefaultComponentScope.java (87%) rename view-components/src/main/java/groowt/view/component/{ => context}/MissingClassTypeException.java (83%) rename view-components/src/main/java/groowt/view/component/{ => context}/MissingComponentException.java (67%) rename view-components/src/main/java/groowt/view/component/{ => context}/MissingFragmentTypeException.java (79%) rename view-components/src/main/java/groowt/view/component/{ => context}/MissingStringTypeException.java (83%) rename view-components/src/main/java/groowt/view/component/{ => context}/NoFactoryMissingException.java (91%) rename view-components/src/main/java/groowt/view/component/{ => factory}/ClosureComponentFactory.java (93%) rename view-components/src/main/java/groowt/view/component/{ => factory}/ComponentFactory.java (83%) rename view-components/src/main/java/groowt/view/component/{ => factory}/ComponentFactoryBase.java (96%) rename view-components/src/main/java/groowt/view/component/{ => factory}/ComponentFactoryUtil.java (88%) create mode 100644 view-components/src/main/java/groowt/view/component/factory/ComponentTemplateSource.java rename view-components/src/main/java/groowt/view/component/{ => factory}/SupplierComponentFactory.java (74%) diff --git a/view-components/src/main/java/groowt/view/component/AbstractViewComponent.java b/view-components/src/main/java/groowt/view/component/AbstractViewComponent.java index 9d8344d..ad1b99b 100644 --- a/view-components/src/main/java/groowt/view/component/AbstractViewComponent.java +++ b/view-components/src/main/java/groowt/view/component/AbstractViewComponent.java @@ -1,6 +1,9 @@ package groowt.view.component; import groovy.lang.Closure; +import groowt.view.component.compiler.ComponentTemplateCompiler; +import groowt.view.component.context.ComponentContext; +import groowt.view.component.factory.ComponentTemplateSource; import java.io.IOException; import java.io.Writer; @@ -26,12 +29,12 @@ public abstract class AbstractViewComponent implements ViewComponent { } } - protected AbstractViewComponent(TemplateSource source, Function getCompiler) { + protected AbstractViewComponent(ComponentTemplateSource source, Function getCompiler) { final Class selfClass = this.getSelfClass(); this.template = getCompiler.apply(selfClass.getPackageName()).compile(selfClass, source); } - protected AbstractViewComponent(TemplateSource source, ComponentTemplateCompiler compiler) { + protected AbstractViewComponent(ComponentTemplateSource source, ComponentTemplateCompiler compiler) { this.template = compiler.compile(this.getSelfClass(), source); } diff --git a/view-components/src/main/java/groowt/view/component/ComponentTemplateCompiler.java b/view-components/src/main/java/groowt/view/component/ComponentTemplateCompiler.java deleted file mode 100644 index 2363bff..0000000 --- a/view-components/src/main/java/groowt/view/component/ComponentTemplateCompiler.java +++ /dev/null @@ -1,5 +0,0 @@ -package groowt.view.component; - -public interface ComponentTemplateCompiler { - ComponentTemplate compile(Class forClass, TemplateSource source); -} diff --git a/view-components/src/main/java/groowt/view/component/TemplateSource.java b/view-components/src/main/java/groowt/view/component/TemplateSource.java deleted file mode 100644 index 8dae0c4..0000000 --- a/view-components/src/main/java/groowt/view/component/TemplateSource.java +++ /dev/null @@ -1,55 +0,0 @@ -package groowt.view.component; - -import java.io.File; -import java.io.InputStream; -import java.io.Reader; -import java.net.URI; -import java.net.URL; - -public sealed interface TemplateSource { - - static TemplateSource of(String template) { - return new StringSource(template); - } - - static TemplateSource of(File templateFile) { - return new FileSource(templateFile); - } - - static TemplateSource of(URI templateURI) { - return new URISource(templateURI); - } - - static TemplateSource of(URL url) { - return new URLSource(url); - } - - static TemplateSource of(InputStream templateInputStream) { - return new InputStreamSource(templateInputStream); - } - - static TemplateSource of(Reader templateReader) { - return new ReaderSource(templateReader); - } - - /** - * @param resourceName An absolute path resource name. - * @return A template source - */ - static TemplateSource fromResource(String resourceName) { - return of(TemplateSource.class.getClassLoader().getResource(resourceName)); - } - - record StringSource(String template) implements TemplateSource {} - - record FileSource(File templateFile) implements TemplateSource {} - - record URISource(URI templateURI) implements TemplateSource {} - - record URLSource(URL templateURL) implements TemplateSource {} - - record InputStreamSource(InputStream templateInputStream) implements TemplateSource {} - - record ReaderSource(Reader templateReader) implements TemplateSource {} - -} diff --git a/view-components/src/main/java/groowt/view/component/ViewComponent.java b/view-components/src/main/java/groowt/view/component/ViewComponent.java index 66c8941..bdcda41 100644 --- a/view-components/src/main/java/groowt/view/component/ViewComponent.java +++ b/view-components/src/main/java/groowt/view/component/ViewComponent.java @@ -1,7 +1,7 @@ package groowt.view.component; import groowt.view.View; -import org.jetbrains.annotations.ApiStatus; +import groowt.view.component.context.ComponentContext; public interface ViewComponent extends View { diff --git a/view-components/src/main/java/groowt/view/component/AbstractComponentTemplateCompiler.java b/view-components/src/main/java/groowt/view/component/compiler/AbstractComponentTemplateCompiler.java similarity index 81% rename from view-components/src/main/java/groowt/view/component/AbstractComponentTemplateCompiler.java rename to view-components/src/main/java/groowt/view/component/compiler/AbstractComponentTemplateCompiler.java index f9c7ba5..e7d279c 100644 --- a/view-components/src/main/java/groowt/view/component/AbstractComponentTemplateCompiler.java +++ b/view-components/src/main/java/groowt/view/component/compiler/AbstractComponentTemplateCompiler.java @@ -1,6 +1,9 @@ -package groowt.view.component; +package groowt.view.component.compiler; -import groowt.view.component.TemplateSource.*; +import groowt.view.component.ComponentTemplate; +import groowt.view.component.ViewComponent; +import groowt.view.component.factory.ComponentTemplateSource; +import groowt.view.component.factory.ComponentTemplateSource.*; import java.io.*; import java.net.URI; @@ -9,13 +12,13 @@ import java.net.URL; public abstract class AbstractComponentTemplateCompiler implements ComponentTemplateCompiler { protected abstract ComponentTemplate compile( - TemplateSource templateSource, + ComponentTemplateSource componentTemplateSource, Class forClass, Reader actualSource ); @Override - public ComponentTemplate compile(Class forClass, TemplateSource source) { + public ComponentTemplate compile(Class forClass, ComponentTemplateSource source) { return switch (source) { case FileSource(File file) -> { try { diff --git a/view-components/src/main/java/groowt/view/component/CachingComponentTemplateCompiler.java b/view-components/src/main/java/groowt/view/component/compiler/CachingComponentTemplateCompiler.java similarity index 70% rename from view-components/src/main/java/groowt/view/component/CachingComponentTemplateCompiler.java rename to view-components/src/main/java/groowt/view/component/compiler/CachingComponentTemplateCompiler.java index 3f183ce..ebc32aa 100644 --- a/view-components/src/main/java/groowt/view/component/CachingComponentTemplateCompiler.java +++ b/view-components/src/main/java/groowt/view/component/compiler/CachingComponentTemplateCompiler.java @@ -1,4 +1,8 @@ -package groowt.view.component; +package groowt.view.component.compiler; + +import groowt.view.component.ComponentTemplate; +import groowt.view.component.ViewComponent; +import groowt.view.component.factory.ComponentTemplateSource; import java.io.Reader; import java.util.HashMap; @@ -10,7 +14,7 @@ public abstract class CachingComponentTemplateCompiler extends AbstractComponent @Override protected final ComponentTemplate compile( - TemplateSource source, + ComponentTemplateSource source, Class forClass, Reader sourceReader ) { @@ -18,7 +22,7 @@ public abstract class CachingComponentTemplateCompiler extends AbstractComponent } protected abstract ComponentTemplate doCompile( - TemplateSource source, + ComponentTemplateSource source, Class forClass, Reader sourceReader ); diff --git a/view-components/src/main/java/groowt/view/component/ComponentTemplateCreateException.java b/view-components/src/main/java/groowt/view/component/compiler/ComponentTemplateCompileException.java similarity index 79% rename from view-components/src/main/java/groowt/view/component/ComponentTemplateCreateException.java rename to view-components/src/main/java/groowt/view/component/compiler/ComponentTemplateCompileException.java index eff73b4..56a3c7e 100644 --- a/view-components/src/main/java/groowt/view/component/ComponentTemplateCreateException.java +++ b/view-components/src/main/java/groowt/view/component/compiler/ComponentTemplateCompileException.java @@ -1,16 +1,16 @@ -package groowt.view.component; +package groowt.view.component.compiler; -import java.io.Reader; +import groowt.view.component.ViewComponent; /** * Represents an exception thrown while attempting to instantiate a ComponentTemplate during compilation. */ -public class ComponentTemplateCreateException extends RuntimeException { +public class ComponentTemplateCompileException extends RuntimeException { private final Class forClass; private final Object templateSource; - public ComponentTemplateCreateException( + public ComponentTemplateCompileException( String message, Class forClass, Object templateSource @@ -20,7 +20,7 @@ public class ComponentTemplateCreateException extends RuntimeException { this.templateSource = templateSource; } - public ComponentTemplateCreateException( + public ComponentTemplateCompileException( String message, Throwable cause, Class forClass, @@ -31,7 +31,7 @@ public class ComponentTemplateCreateException extends RuntimeException { this.templateSource = templateSource; } - public ComponentTemplateCreateException( + public ComponentTemplateCompileException( Throwable cause, Class forClass, Object templateSource diff --git a/view-components/src/main/java/groowt/view/component/compiler/ComponentTemplateCompiler.java b/view-components/src/main/java/groowt/view/component/compiler/ComponentTemplateCompiler.java new file mode 100644 index 0000000..23f0599 --- /dev/null +++ b/view-components/src/main/java/groowt/view/component/compiler/ComponentTemplateCompiler.java @@ -0,0 +1,9 @@ +package groowt.view.component.compiler; + +import groowt.view.component.ComponentTemplate; +import groowt.view.component.ViewComponent; +import groowt.view.component.factory.ComponentTemplateSource; + +public interface ComponentTemplateCompiler { + ComponentTemplate compile(Class forClass, ComponentTemplateSource source); +} diff --git a/view-components/src/main/java/groowt/view/component/ComponentContext.java b/view-components/src/main/java/groowt/view/component/context/ComponentContext.java similarity index 93% rename from view-components/src/main/java/groowt/view/component/ComponentContext.java rename to view-components/src/main/java/groowt/view/component/context/ComponentContext.java index a5a3a0f..30c0ff6 100644 --- a/view-components/src/main/java/groowt/view/component/ComponentContext.java +++ b/view-components/src/main/java/groowt/view/component/context/ComponentContext.java @@ -1,5 +1,7 @@ -package groowt.view.component; +package groowt.view.component.context; +import groowt.view.component.ViewComponent; +import groowt.view.component.factory.ComponentFactory; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; diff --git a/view-components/src/main/java/groowt/view/component/ComponentCreateException.java b/view-components/src/main/java/groowt/view/component/context/ComponentCreateException.java similarity index 91% rename from view-components/src/main/java/groowt/view/component/ComponentCreateException.java rename to view-components/src/main/java/groowt/view/component/context/ComponentCreateException.java index c4508d5..41a864c 100644 --- a/view-components/src/main/java/groowt/view/component/ComponentCreateException.java +++ b/view-components/src/main/java/groowt/view/component/context/ComponentCreateException.java @@ -1,4 +1,6 @@ -package groowt.view.component; +package groowt.view.component.context; + +import groowt.view.component.ComponentTemplate; /** * An exception which signals that a component of the given type diff --git a/view-components/src/main/java/groowt/view/component/ComponentScope.java b/view-components/src/main/java/groowt/view/component/context/ComponentScope.java similarity index 91% rename from view-components/src/main/java/groowt/view/component/ComponentScope.java rename to view-components/src/main/java/groowt/view/component/context/ComponentScope.java index 0209c9a..bcba8ab 100644 --- a/view-components/src/main/java/groowt/view/component/ComponentScope.java +++ b/view-components/src/main/java/groowt/view/component/context/ComponentScope.java @@ -1,6 +1,8 @@ -package groowt.view.component; +package groowt.view.component.context; import groovy.lang.Closure; +import groowt.view.component.ViewComponent; +import groowt.view.component.factory.ComponentFactory; public interface ComponentScope { diff --git a/view-components/src/main/java/groowt/view/component/DefaultComponentContext.java b/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java similarity index 97% rename from view-components/src/main/java/groowt/view/component/DefaultComponentContext.java rename to view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java index a88853b..9ccd803 100644 --- a/view-components/src/main/java/groowt/view/component/DefaultComponentContext.java +++ b/view-components/src/main/java/groowt/view/component/context/DefaultComponentContext.java @@ -1,5 +1,7 @@ -package groowt.view.component; +package groowt.view.component.context; +import groowt.view.component.ViewComponent; +import groowt.view.component.factory.ComponentFactory; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; diff --git a/view-components/src/main/java/groowt/view/component/DefaultComponentScope.java b/view-components/src/main/java/groowt/view/component/context/DefaultComponentScope.java similarity index 87% rename from view-components/src/main/java/groowt/view/component/DefaultComponentScope.java rename to view-components/src/main/java/groowt/view/component/context/DefaultComponentScope.java index 36eea68..c92347c 100644 --- a/view-components/src/main/java/groowt/view/component/DefaultComponentScope.java +++ b/view-components/src/main/java/groowt/view/component/context/DefaultComponentScope.java @@ -1,4 +1,6 @@ -package groowt.view.component; +package groowt.view.component.context; + +import groowt.view.component.factory.ComponentFactory; import java.util.HashMap; import java.util.Map; diff --git a/view-components/src/main/java/groowt/view/component/MissingClassTypeException.java b/view-components/src/main/java/groowt/view/component/context/MissingClassTypeException.java similarity index 83% rename from view-components/src/main/java/groowt/view/component/MissingClassTypeException.java rename to view-components/src/main/java/groowt/view/component/context/MissingClassTypeException.java index 9204aa8..58b128f 100644 --- a/view-components/src/main/java/groowt/view/component/MissingClassTypeException.java +++ b/view-components/src/main/java/groowt/view/component/context/MissingClassTypeException.java @@ -1,4 +1,6 @@ -package groowt.view.component; +package groowt.view.component.context; + +import groowt.view.component.ComponentTemplate; public class MissingClassTypeException extends MissingComponentException { diff --git a/view-components/src/main/java/groowt/view/component/MissingComponentException.java b/view-components/src/main/java/groowt/view/component/context/MissingComponentException.java similarity index 67% rename from view-components/src/main/java/groowt/view/component/MissingComponentException.java rename to view-components/src/main/java/groowt/view/component/context/MissingComponentException.java index e32a0de..21f9c74 100644 --- a/view-components/src/main/java/groowt/view/component/MissingComponentException.java +++ b/view-components/src/main/java/groowt/view/component/context/MissingComponentException.java @@ -1,4 +1,7 @@ -package groowt.view.component; +package groowt.view.component.context; + +import groowt.view.component.ComponentTemplate; +import groowt.view.component.context.ComponentContext; /** * An exception which represents that a component type could not be @@ -21,7 +24,8 @@ public abstract class MissingComponentException extends RuntimeException { @Override public String getMessage() { - return "Missing " + this.getMissingKeyName() + " on line " + this.line + ", column " + this.col + "."; + return "In " + this.template + " missing " + this.getMissingKeyName() + + " on line " + this.line + ", column " + this.col + "."; } } diff --git a/view-components/src/main/java/groowt/view/component/MissingFragmentTypeException.java b/view-components/src/main/java/groowt/view/component/context/MissingFragmentTypeException.java similarity index 79% rename from view-components/src/main/java/groowt/view/component/MissingFragmentTypeException.java rename to view-components/src/main/java/groowt/view/component/context/MissingFragmentTypeException.java index afbdb15..d6c2718 100644 --- a/view-components/src/main/java/groowt/view/component/MissingFragmentTypeException.java +++ b/view-components/src/main/java/groowt/view/component/context/MissingFragmentTypeException.java @@ -1,4 +1,6 @@ -package groowt.view.component; +package groowt.view.component.context; + +import groowt.view.component.ComponentTemplate; public class MissingFragmentTypeException extends MissingComponentException { diff --git a/view-components/src/main/java/groowt/view/component/MissingStringTypeException.java b/view-components/src/main/java/groowt/view/component/context/MissingStringTypeException.java similarity index 83% rename from view-components/src/main/java/groowt/view/component/MissingStringTypeException.java rename to view-components/src/main/java/groowt/view/component/context/MissingStringTypeException.java index b729804..d213bd1 100644 --- a/view-components/src/main/java/groowt/view/component/MissingStringTypeException.java +++ b/view-components/src/main/java/groowt/view/component/context/MissingStringTypeException.java @@ -1,4 +1,6 @@ -package groowt.view.component; +package groowt.view.component.context; + +import groowt.view.component.ComponentTemplate; public abstract class MissingStringTypeException extends MissingComponentException { diff --git a/view-components/src/main/java/groowt/view/component/NoFactoryMissingException.java b/view-components/src/main/java/groowt/view/component/context/NoFactoryMissingException.java similarity index 91% rename from view-components/src/main/java/groowt/view/component/NoFactoryMissingException.java rename to view-components/src/main/java/groowt/view/component/context/NoFactoryMissingException.java index 8fcf1cc..8b1fa01 100644 --- a/view-components/src/main/java/groowt/view/component/NoFactoryMissingException.java +++ b/view-components/src/main/java/groowt/view/component/context/NoFactoryMissingException.java @@ -1,4 +1,4 @@ -package groowt.view.component; +package groowt.view.component.context; public class NoFactoryMissingException extends UnsupportedOperationException { diff --git a/view-components/src/main/java/groowt/view/component/ClosureComponentFactory.java b/view-components/src/main/java/groowt/view/component/factory/ClosureComponentFactory.java similarity index 93% rename from view-components/src/main/java/groowt/view/component/ClosureComponentFactory.java rename to view-components/src/main/java/groowt/view/component/factory/ClosureComponentFactory.java index abbd8ab..fcc2ac4 100644 --- a/view-components/src/main/java/groowt/view/component/ClosureComponentFactory.java +++ b/view-components/src/main/java/groowt/view/component/factory/ClosureComponentFactory.java @@ -1,8 +1,10 @@ -package groowt.view.component; +package groowt.view.component.factory; import groovy.lang.Closure; +import groowt.view.component.context.ComponentContext; +import groowt.view.component.ViewComponent; -import static groowt.view.component.ComponentFactoryUtil.flatten; +import static groowt.view.component.factory.ComponentFactoryUtil.flatten; final class ClosureComponentFactory implements ComponentFactory { diff --git a/view-components/src/main/java/groowt/view/component/ComponentFactory.java b/view-components/src/main/java/groowt/view/component/factory/ComponentFactory.java similarity index 83% rename from view-components/src/main/java/groowt/view/component/ComponentFactory.java rename to view-components/src/main/java/groowt/view/component/factory/ComponentFactory.java index 1478d91..2c0009b 100644 --- a/view-components/src/main/java/groowt/view/component/ComponentFactory.java +++ b/view-components/src/main/java/groowt/view/component/factory/ComponentFactory.java @@ -1,6 +1,8 @@ -package groowt.view.component; +package groowt.view.component.factory; import groovy.lang.Closure; +import groowt.view.component.context.ComponentContext; +import groowt.view.component.ViewComponent; import java.util.function.Supplier; diff --git a/view-components/src/main/java/groowt/view/component/ComponentFactoryBase.java b/view-components/src/main/java/groowt/view/component/factory/ComponentFactoryBase.java similarity index 96% rename from view-components/src/main/java/groowt/view/component/ComponentFactoryBase.java rename to view-components/src/main/java/groowt/view/component/factory/ComponentFactoryBase.java index d41aa27..88ec06e 100644 --- a/view-components/src/main/java/groowt/view/component/ComponentFactoryBase.java +++ b/view-components/src/main/java/groowt/view/component/factory/ComponentFactoryBase.java @@ -1,9 +1,11 @@ -package groowt.view.component; +package groowt.view.component.factory; import groovy.lang.GroovyObjectSupport; import groovy.lang.MetaClass; import groovy.lang.MetaMethod; import groovy.lang.MissingMethodException; +import groowt.view.component.context.ComponentContext; +import groowt.view.component.ViewComponent; import java.util.HashMap; import java.util.Map; diff --git a/view-components/src/main/java/groowt/view/component/ComponentFactoryUtil.java b/view-components/src/main/java/groowt/view/component/factory/ComponentFactoryUtil.java similarity index 88% rename from view-components/src/main/java/groowt/view/component/ComponentFactoryUtil.java rename to view-components/src/main/java/groowt/view/component/factory/ComponentFactoryUtil.java index 7520667..2d5ed56 100644 --- a/view-components/src/main/java/groowt/view/component/ComponentFactoryUtil.java +++ b/view-components/src/main/java/groowt/view/component/factory/ComponentFactoryUtil.java @@ -1,9 +1,4 @@ -package groowt.view.component; - -import groovy.lang.GroovyObject; -import groovy.lang.MetaClass; -import groovy.lang.MetaMethod; -import org.jetbrains.annotations.Nullable; +package groowt.view.component.factory; import java.util.ArrayList; import java.util.Arrays; diff --git a/view-components/src/main/java/groowt/view/component/factory/ComponentTemplateSource.java b/view-components/src/main/java/groowt/view/component/factory/ComponentTemplateSource.java new file mode 100644 index 0000000..8f86323 --- /dev/null +++ b/view-components/src/main/java/groowt/view/component/factory/ComponentTemplateSource.java @@ -0,0 +1,55 @@ +package groowt.view.component.factory; + +import java.io.File; +import java.io.InputStream; +import java.io.Reader; +import java.net.URI; +import java.net.URL; + +public sealed interface ComponentTemplateSource { + + static ComponentTemplateSource of(String template) { + return new StringSource(template); + } + + static ComponentTemplateSource of(File templateFile) { + return new FileSource(templateFile); + } + + static ComponentTemplateSource of(URI templateURI) { + return new URISource(templateURI); + } + + static ComponentTemplateSource of(URL url) { + return new URLSource(url); + } + + static ComponentTemplateSource of(InputStream templateInputStream) { + return new InputStreamSource(templateInputStream); + } + + static ComponentTemplateSource of(Reader templateReader) { + return new ReaderSource(templateReader); + } + + /** + * @param resourceName An absolute path resource name. + * @return A template source + */ + static ComponentTemplateSource fromResource(String resourceName) { + return of(ComponentTemplateSource.class.getClassLoader().getResource(resourceName)); + } + + record StringSource(String template) implements ComponentTemplateSource {} + + record FileSource(File templateFile) implements ComponentTemplateSource {} + + record URISource(URI templateURI) implements ComponentTemplateSource {} + + record URLSource(URL templateURL) implements ComponentTemplateSource {} + + record InputStreamSource(InputStream templateInputStream) implements ComponentTemplateSource {} + + record ReaderSource(Reader templateReader) implements ComponentTemplateSource {} + +} diff --git a/view-components/src/main/java/groowt/view/component/SupplierComponentFactory.java b/view-components/src/main/java/groowt/view/component/factory/SupplierComponentFactory.java similarity index 74% rename from view-components/src/main/java/groowt/view/component/SupplierComponentFactory.java rename to view-components/src/main/java/groowt/view/component/factory/SupplierComponentFactory.java index a975ef8..c52dd66 100644 --- a/view-components/src/main/java/groowt/view/component/SupplierComponentFactory.java +++ b/view-components/src/main/java/groowt/view/component/factory/SupplierComponentFactory.java @@ -1,4 +1,7 @@ -package groowt.view.component; +package groowt.view.component.factory; + +import groowt.view.component.context.ComponentContext; +import groowt.view.component.ViewComponent; import java.util.function.Supplier; diff --git a/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponent.groovy b/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponent.groovy index 905cd50..9a33c71 100644 --- a/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponent.groovy +++ b/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponent.groovy @@ -2,7 +2,7 @@ package groowt.view.web import groowt.view.component.AbstractViewComponent import groowt.view.component.ComponentTemplate -import groowt.view.component.TemplateSource +import groowt.view.component.factory.ComponentTemplateSource class DefaultWebViewComponent extends AbstractWebViewComponent { @@ -16,26 +16,26 @@ class DefaultWebViewComponent extends AbstractWebViewComponent { super(templateType) } - DefaultWebViewComponent(TemplateSource source) { + DefaultWebViewComponent(ComponentTemplateSource source) { super(source) } - DefaultWebViewComponent(TemplateSource source, WebViewComponentTemplateCompiler compiler) { + DefaultWebViewComponent(ComponentTemplateSource source, WebViewComponentTemplateCompiler compiler) { super(source, compiler) } /** - * A convenience constructor which creates a {@link TemplateSource} + * A convenience constructor which creates a {@link ComponentTemplateSource} * from the given {@code source} parameter and passes it to super. See - * {@link TemplateSource} for possible types. + * {@link ComponentTemplateSource} for possible types. * - * @param source the object passed to {@link TemplateSource#of} + * @param source the object passed to {@link ComponentTemplateSource#of} * - * @see TemplateSource + * @see ComponentTemplateSource */ @SuppressWarnings('GroovyAssignabilityCheck') DefaultWebViewComponent(Object source) { - super(TemplateSource.of(source)) + super(ComponentTemplateSource.of(source)) } @Override diff --git a/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponentContext.groovy b/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponentContext.groovy index a823102..a3b83db 100644 --- a/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponentContext.groovy +++ b/web-views/src/main/groovy/groowt/view/web/DefaultWebViewComponentContext.groovy @@ -1,7 +1,7 @@ package groowt.view.web -import groowt.view.component.ComponentScope -import groowt.view.component.DefaultComponentContext +import groowt.view.component.context.ComponentScope +import groowt.view.component.context.DefaultComponentContext import groowt.view.component.ViewComponent import groowt.view.web.lib.Fragment import groowt.view.web.runtime.DefaultWebViewComponentChildCollection diff --git a/web-views/src/main/groovy/groowt/view/web/WebViewComponentFactories.groovy b/web-views/src/main/groovy/groowt/view/web/WebViewComponentFactories.groovy index 62ca2c1..0b649c8 100644 --- a/web-views/src/main/groovy/groowt/view/web/WebViewComponentFactories.groovy +++ b/web-views/src/main/groovy/groowt/view/web/WebViewComponentFactories.groovy @@ -2,7 +2,7 @@ package groowt.view.web import groovy.transform.stc.ClosureParams import groovy.transform.stc.FromString -import groowt.view.component.ComponentFactory +import groowt.view.component.factory.ComponentFactory import java.util.function.Function diff --git a/web-views/src/main/groovy/groowt/view/web/WebViewScope.groovy b/web-views/src/main/groovy/groowt/view/web/WebViewScope.groovy index fb4b36d..ec68379 100644 --- a/web-views/src/main/groovy/groowt/view/web/WebViewScope.groovy +++ b/web-views/src/main/groovy/groowt/view/web/WebViewScope.groovy @@ -1,9 +1,8 @@ package groowt.view.web -import groowt.view.component.ComponentFactory -import groowt.view.component.DefaultComponentScope +import groowt.view.component.factory.ComponentFactory +import groowt.view.component.context.DefaultComponentScope import groowt.view.web.lib.Echo -import groowt.view.web.lib.Echo.EchoFactory class WebViewScope extends DefaultComponentScope { diff --git a/web-views/src/main/groovy/groowt/view/web/lib/Echo.groovy b/web-views/src/main/groovy/groowt/view/web/lib/Echo.groovy index 5c93ee2..3161ef2 100644 --- a/web-views/src/main/groovy/groowt/view/web/lib/Echo.groovy +++ b/web-views/src/main/groovy/groowt/view/web/lib/Echo.groovy @@ -1,8 +1,8 @@ package groowt.view.web.lib import groowt.view.View -import groowt.view.component.ComponentContext -import groowt.view.component.ComponentFactory +import groowt.view.component.context.ComponentContext +import groowt.view.component.factory.ComponentFactory import groowt.view.component.ComponentRenderException import groowt.view.web.WebViewChildComponentRenderer diff --git a/web-views/src/main/java/groowt/view/web/AbstractWebViewComponent.java b/web-views/src/main/java/groowt/view/web/AbstractWebViewComponent.java index 6c23896..07d76fe 100644 --- a/web-views/src/main/java/groowt/view/web/AbstractWebViewComponent.java +++ b/web-views/src/main/java/groowt/view/web/AbstractWebViewComponent.java @@ -3,7 +3,7 @@ package groowt.view.web; import groovy.lang.Closure; import groowt.view.component.AbstractViewComponent; import groowt.view.component.ComponentTemplate; -import groowt.view.component.TemplateSource; +import groowt.view.component.factory.ComponentTemplateSource; import groowt.view.web.runtime.DefaultWebViewComponentWriter; import groowt.view.web.runtime.WebViewComponentWriter; import org.codehaus.groovy.control.CompilerConfiguration; @@ -27,14 +27,14 @@ public abstract class AbstractWebViewComponent extends AbstractViewComponent imp super(templateClass); } - protected AbstractWebViewComponent(TemplateSource source) { + protected AbstractWebViewComponent(ComponentTemplateSource source) { super(source, packageName -> new DefaultWebViewComponentTemplateCompiler( CompilerConfiguration.DEFAULT, packageName )); } - protected AbstractWebViewComponent(TemplateSource source, WebViewComponentTemplateCompiler compiler) { + protected AbstractWebViewComponent(ComponentTemplateSource source, WebViewComponentTemplateCompiler compiler) { super(source, compiler); } diff --git a/web-views/src/main/java/groowt/view/web/DefaultWebViewComponentTemplateCompiler.java b/web-views/src/main/java/groowt/view/web/DefaultWebViewComponentTemplateCompiler.java index 52697ac..1815624 100644 --- a/web-views/src/main/java/groowt/view/web/DefaultWebViewComponentTemplateCompiler.java +++ b/web-views/src/main/java/groowt/view/web/DefaultWebViewComponentTemplateCompiler.java @@ -2,6 +2,9 @@ package groowt.view.web; import groovy.lang.GroovyClassLoader; import groowt.view.component.*; +import groowt.view.component.compiler.CachingComponentTemplateCompiler; +import groowt.view.component.compiler.ComponentTemplateCompileException; +import groowt.view.component.factory.ComponentTemplateSource; import groowt.view.web.antlr.CompilationUnitParseResult; import groowt.view.web.antlr.ParserUtil; import groowt.view.web.antlr.TokenList; @@ -65,13 +68,13 @@ public class DefaultWebViewComponentTemplateCompiler extends CachingComponentTem @Override protected ComponentTemplate doCompile( - @Nullable TemplateSource source, + @Nullable ComponentTemplateSource source, @Nullable Class forClass, Reader sourceReader ) { - if (source instanceof TemplateSource.URISource uriSource) { + if (source instanceof ComponentTemplateSource.URISource uriSource) { return this.doCompile(forClass, sourceReader, uriSource.templateURI()); - } else if (source instanceof TemplateSource.URLSource urlSource) { + } else if (source instanceof ComponentTemplateSource.URLSource urlSource) { try { return this.doCompile(forClass, sourceReader, urlSource.templateURL().toURI()); } catch (URISyntaxException e) { @@ -160,7 +163,7 @@ public class DefaultWebViewComponentTemplateCompiler extends CachingComponentTem try { return (ComponentTemplate) templateClass.getConstructor().newInstance(); } catch (Exception e) { - throw new ComponentTemplateCreateException(e, forClass, reader); + throw new ComponentTemplateCompileException(e, forClass, reader); } } diff --git a/web-views/src/main/java/groowt/view/web/WebViewComponentContext.java b/web-views/src/main/java/groowt/view/web/WebViewComponentContext.java index b51324c..bdcfdc8 100644 --- a/web-views/src/main/java/groowt/view/web/WebViewComponentContext.java +++ b/web-views/src/main/java/groowt/view/web/WebViewComponentContext.java @@ -1,7 +1,7 @@ package groowt.view.web; import groovy.lang.Closure; -import groowt.view.component.ComponentContext; +import groowt.view.component.context.ComponentContext; import groowt.view.component.ViewComponent; import org.jetbrains.annotations.ApiStatus; diff --git a/web-views/src/main/java/groowt/view/web/WebViewComponentTemplateCompiler.java b/web-views/src/main/java/groowt/view/web/WebViewComponentTemplateCompiler.java index 0e38806..fca82a7 100644 --- a/web-views/src/main/java/groowt/view/web/WebViewComponentTemplateCompiler.java +++ b/web-views/src/main/java/groowt/view/web/WebViewComponentTemplateCompiler.java @@ -1,7 +1,7 @@ package groowt.view.web; import groowt.view.component.ComponentTemplate; -import groowt.view.component.ComponentTemplateCompiler; +import groowt.view.component.compiler.ComponentTemplateCompiler; import java.io.Reader; diff --git a/web-views/src/main/java/groowt/view/web/transpile/DefaultComponentTranspiler.java b/web-views/src/main/java/groowt/view/web/transpile/DefaultComponentTranspiler.java index 57128ba..c363ef9 100644 --- a/web-views/src/main/java/groowt/view/web/transpile/DefaultComponentTranspiler.java +++ b/web-views/src/main/java/groowt/view/web/transpile/DefaultComponentTranspiler.java @@ -2,6 +2,7 @@ package groowt.view.web.transpile; import groovy.lang.Tuple2; import groowt.view.component.*; +import groowt.view.component.context.*; import groowt.view.web.ast.node.*; import groowt.view.web.runtime.WebViewComponentChildCollection; import groowt.view.web.transpile.util.GroovyUtil; diff --git a/web-views/src/main/java/groowt/view/web/transpile/TranspilerUtil.java b/web-views/src/main/java/groowt/view/web/transpile/TranspilerUtil.java index 19fbb42..98773b1 100644 --- a/web-views/src/main/java/groowt/view/web/transpile/TranspilerUtil.java +++ b/web-views/src/main/java/groowt/view/web/transpile/TranspilerUtil.java @@ -2,7 +2,7 @@ package groowt.view.web.transpile; import groovy.lang.Tuple2; import groovy.transform.Field; -import groowt.view.component.ComponentContext; +import groowt.view.component.context.ComponentContext; import groowt.view.component.ComponentTemplate; import groowt.view.web.runtime.WebViewComponentWriter; import groowt.view.web.util.SourcePosition; diff --git a/web-views/src/test/groovy/groowt/view/web/DefaultWebViewComponentTests.groovy b/web-views/src/test/groovy/groowt/view/web/DefaultWebViewComponentTests.groovy index c033c08..30b82bd 100644 --- a/web-views/src/test/groovy/groowt/view/web/DefaultWebViewComponentTests.groovy +++ b/web-views/src/test/groovy/groowt/view/web/DefaultWebViewComponentTests.groovy @@ -1,6 +1,6 @@ package groowt.view.web -import groowt.view.component.ComponentFactoryBase +import groowt.view.component.factory.ComponentFactoryBase import groowt.view.web.lib.WithContext import org.junit.jupiter.api.Test diff --git a/web-views/src/test/groovy/groowt/view/web/lib/FragmentTests.groovy b/web-views/src/test/groovy/groowt/view/web/lib/FragmentTests.groovy index ba78f9f..80b71f7 100644 --- a/web-views/src/test/groovy/groowt/view/web/lib/FragmentTests.groovy +++ b/web-views/src/test/groovy/groowt/view/web/lib/FragmentTests.groovy @@ -1,10 +1,9 @@ package groowt.view.web.lib -import groowt.view.component.ComponentContext -import groowt.view.component.ComponentFactory +import groowt.view.component.context.ComponentContext import groowt.view.web.DefaultWebViewComponent import groowt.view.web.DefaultWebViewComponentContext -import groowt.view.component.TemplateSource +import groowt.view.component.factory.ComponentTemplateSource import org.junit.jupiter.api.Test import static groowt.view.web.WebViewComponentFactories.withAttr @@ -16,7 +15,7 @@ class FragmentTests extends AbstractWebViewComponentTests { String greeting Greeter(Map attr) { - super(TemplateSource.of('$greeting')) + super(ComponentTemplateSource.of('$greeting')) greeting = attr.greeting } diff --git a/web-views/src/testFixtures/groovy/groowt/view/web/lib/AbstractWebViewComponentTests.groovy b/web-views/src/testFixtures/groovy/groowt/view/web/lib/AbstractWebViewComponentTests.groovy index 65defd5..df4007d 100644 --- a/web-views/src/testFixtures/groovy/groowt/view/web/lib/AbstractWebViewComponentTests.groovy +++ b/web-views/src/testFixtures/groovy/groowt/view/web/lib/AbstractWebViewComponentTests.groovy @@ -1,7 +1,7 @@ package groowt.view.web.lib -import groowt.view.component.ComponentContext +import groowt.view.component.context.ComponentContext import groowt.view.web.DefaultWebViewComponentTemplateCompiler import groowt.view.web.WebViewComponentTemplateCompiler import groowt.view.web.runtime.DefaultWebViewComponentWriter diff --git a/web-views/src/testFixtures/java/groowt/view/web/transpiler/GroovyTranspilerTests.java b/web-views/src/testFixtures/java/groowt/view/web/transpiler/GroovyTranspilerTests.java index 5989a68..994dff4 100644 --- a/web-views/src/testFixtures/java/groowt/view/web/transpiler/GroovyTranspilerTests.java +++ b/web-views/src/testFixtures/java/groowt/view/web/transpiler/GroovyTranspilerTests.java @@ -1,7 +1,7 @@ package groowt.view.web.transpiler; import groovy.lang.Tuple2; -import groowt.view.component.ComponentContext; +import groowt.view.component.context.ComponentContext; import groowt.view.web.antlr.ParserUtil; import groowt.view.web.antlr.TokenList; import groowt.view.web.ast.DefaultAstBuilder; diff --git a/web-views/src/tools/groovy/groowt/view/web/tools/RunTemplate.groovy b/web-views/src/tools/groovy/groowt/view/web/tools/RunTemplate.groovy index a87eaed..f4d1d3e 100644 --- a/web-views/src/tools/groovy/groowt/view/web/tools/RunTemplate.groovy +++ b/web-views/src/tools/groovy/groowt/view/web/tools/RunTemplate.groovy @@ -1,6 +1,6 @@ package groowt.view.web.tools -import groowt.view.component.DefaultComponentContext +import groowt.view.component.context.DefaultComponentContext import groowt.view.web.DefaultWebViewComponent import picocli.CommandLine import picocli.CommandLine.Command