From 3be4761541321d12bdc696f55987c6a17e476b9d Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Thu, 30 May 2024 08:30:29 +0200 Subject: [PATCH] Added ability to defer component template setting until after construction. --- .../view/component/AbstractViewComponent.java | 30 +++++++++++-------- .../groowt/view/component/ViewComponent.java | 3 ++ .../web/AbstractWebViewComponent.java | 2 +- .../compiler/AnonymousWebViewComponent.java | 11 +++++++ 4 files changed, 32 insertions(+), 14 deletions(-) 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 94889d4..aa62d20 100644 --- a/view-components/src/main/java/groowt/view/component/AbstractViewComponent.java +++ b/view-components/src/main/java/groowt/view/component/AbstractViewComponent.java @@ -21,19 +21,17 @@ public abstract class AbstractViewComponent implements ViewComponent { } } - private final ComponentTemplate template; + private ComponentTemplate componentTemplate; private ComponentContext context; - public AbstractViewComponent() { - this.template = null; - } + public AbstractViewComponent() {} - public AbstractViewComponent(ComponentTemplate template) { - this.template = template; + public AbstractViewComponent(ComponentTemplate componentTemplate) { + this.componentTemplate = componentTemplate; } public AbstractViewComponent(Class templateClass) { - this.template = instantiateTemplate(templateClass); + this.componentTemplate = instantiateTemplate(templateClass); } public AbstractViewComponent( @@ -46,7 +44,17 @@ public abstract class AbstractViewComponent implements ViewComponent { throw new RuntimeException(e); } final var templateClass = templateClassFactory.getTemplateClass(compileResult); - this.template = instantiateTemplate(templateClass); + this.componentTemplate = instantiateTemplate(templateClass); + } + + @Override + public ComponentTemplate getComponentTemplate() { + return this.componentTemplate; + } + + @Override + public void setComponentTemplate(ComponentTemplate componentTemplate) { + this.componentTemplate = componentTemplate; } @Override @@ -59,10 +67,6 @@ public abstract class AbstractViewComponent implements ViewComponent { return Objects.requireNonNull(this.context); } - protected ComponentTemplate getTemplate() { - return Objects.requireNonNull(template); - } - protected void beforeRender() {} protected void afterRender() {} @@ -76,7 +80,7 @@ public abstract class AbstractViewComponent implements ViewComponent { */ @Override public void renderTo(Writer out) throws IOException { - final Closure closure = this.getTemplate().getRenderer(); + final Closure closure = this.getComponentTemplate().getRenderer(); closure.setDelegate(this); closure.setResolveStrategy(Closure.DELEGATE_FIRST); this.beforeRender(); 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 713a2fc..d8eb958 100644 --- a/view-components/src/main/java/groowt/view/component/ViewComponent.java +++ b/view-components/src/main/java/groowt/view/component/ViewComponent.java @@ -5,6 +5,9 @@ import groowt.view.component.context.ComponentContext; public interface ViewComponent extends View { + ComponentTemplate getComponentTemplate(); + void setComponentTemplate(ComponentTemplate componentTemplate); + /** * Note: compiled templates are required to automatically * call this method after the component is constructed. One diff --git a/web-view-components/src/main/java/groowt/view/component/web/AbstractWebViewComponent.java b/web-view-components/src/main/java/groowt/view/component/web/AbstractWebViewComponent.java index cb34305..7b9637b 100644 --- a/web-view-components/src/main/java/groowt/view/component/web/AbstractWebViewComponent.java +++ b/web-view-components/src/main/java/groowt/view/component/web/AbstractWebViewComponent.java @@ -89,7 +89,7 @@ public abstract class AbstractWebViewComponent extends AbstractViewComponent imp @Override public void renderTo(Writer out) throws IOException { final ComponentWriter webWriter = new DefaultComponentWriter(out); - final Closure renderer = this.getTemplate().getRenderer(); + final Closure renderer = this.getComponentTemplate().getRenderer(); renderer.setDelegate(this); renderer.setResolveStrategy(Closure.DELEGATE_FIRST); this.beforeRender(); diff --git a/web-view-components/src/main/java/groowt/view/component/web/compiler/AnonymousWebViewComponent.java b/web-view-components/src/main/java/groowt/view/component/web/compiler/AnonymousWebViewComponent.java index 243ced5..62fb284 100644 --- a/web-view-components/src/main/java/groowt/view/component/web/compiler/AnonymousWebViewComponent.java +++ b/web-view-components/src/main/java/groowt/view/component/web/compiler/AnonymousWebViewComponent.java @@ -1,5 +1,6 @@ package groowt.view.component.web.compiler; +import groowt.view.component.ComponentTemplate; import groowt.view.component.context.ComponentContext; import groowt.view.component.runtime.ComponentWriter; import groowt.view.component.web.WebViewComponent; @@ -11,6 +12,16 @@ import java.util.List; @ApiStatus.Internal public final class AnonymousWebViewComponent implements WebViewComponent { + @Override + public ComponentTemplate getComponentTemplate() { + throw new UnsupportedOperationException(); + } + + @Override + public void setComponentTemplate(ComponentTemplate componentTemplate) { + throw new UnsupportedOperationException(); + } + @Override public void setContext(ComponentContext context) { throw new UnsupportedOperationException();