From e3639ef805f1e525415c43cbda80ed71cc43a70c Mon Sep 17 00:00:00 2001 From: Thomas <> Date: Sun, 9 Jan 2022 15:01:28 +0100 Subject: feature(core): add synch. and asynch. GUI builder implementation that use Spring MVC architecture --- .../impl/gui/builder/AsynchGuiFormBuilderImpl.java | 72 ++++++++++++++++++++++ .../gui/builder/SpringMvcGuiFormBuilderImpl.java | 57 +++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/AsynchGuiFormBuilderImpl.java create mode 100644 eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/SpringMvcGuiFormBuilderImpl.java (limited to 'eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder') diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/AsynchGuiFormBuilderImpl.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/AsynchGuiFormBuilderImpl.java new file mode 100644 index 00000000..6ed50955 --- /dev/null +++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/AsynchGuiFormBuilderImpl.java @@ -0,0 +1,72 @@ +package at.gv.egiz.eaaf.core.impl.gui.builder; + + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.ViewResolver; + +import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration; +import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; +import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; +import at.gv.egiz.eaaf.core.impl.gui.utils.MvcGuiRenderUtils; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class AsynchGuiFormBuilderImpl implements ISpringMvcGuiFormBuilder { + + private @Autowired(required = false) ViewResolver[] viewResolvers; + private @Autowired(required = false) LocaleResolver localeResolver; + + @Override + public void build(final HttpServletRequest httpReq, final HttpServletResponse httpResp, + final IGuiBuilderConfiguration config, final String loggerName) throws GuiBuildException { + build(httpReq, httpResp, config, null, loggerName); + + } + + @Override + public void build(final HttpServletRequest httpReq, final HttpServletResponse httpResp, + final IGuiBuilderConfiguration config, final String contentType, final String loggerName) + throws GuiBuildException { + if (config.isWriteAsynch()) { + log.debug("{} injects GUI model: {} for asynch. rendering", loggerName, config.getViewName()); + MvcGuiRenderUtils.setMvcForAsynchRendering(httpReq, config); + + } else { + renderGuiDirectly(httpReq, httpResp, config, loggerName); + + } + + } + + @Override + public String evaluateResponseContentType(HttpServletRequest httpReq, IGuiBuilderConfiguration config, + String loggerName) throws GuiBuildException { + try { + return MvcGuiRenderUtils.evaluateResponseContentType(httpReq, config, viewResolvers, localeResolver); + + } catch (final Exception e) { + log.info("Can NOT evaluate contentType for response GUI: {}", loggerName, e); + throw new GuiBuildException(e.getMessage(), e); + + } + } + + private void renderGuiDirectly(final HttpServletRequest httpReq, final HttpServletResponse httpResp, + final IGuiBuilderConfiguration config, final String loggerName) throws GuiBuildException { + try { + MvcGuiRenderUtils.render(MvcGuiRenderUtils.prepareSpringGuiModel(config), + httpReq, httpResp, viewResolvers, localeResolver); + + } catch (final Exception e) { + log.info("Can NOT generate GUI for: {}", loggerName, e); + throw new GuiBuildException(e.getMessage(), e); + + } + + } + +} diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/SpringMvcGuiFormBuilderImpl.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/SpringMvcGuiFormBuilderImpl.java new file mode 100644 index 00000000..9fae07e2 --- /dev/null +++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/gui/builder/SpringMvcGuiFormBuilderImpl.java @@ -0,0 +1,57 @@ +package at.gv.egiz.eaaf.core.impl.gui.builder; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.ViewResolver; + +import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration; +import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; +import at.gv.egiz.eaaf.core.exceptions.GuiBuildException; +import at.gv.egiz.eaaf.core.impl.gui.utils.MvcGuiRenderUtils; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class SpringMvcGuiFormBuilderImpl implements ISpringMvcGuiFormBuilder { + + private @Autowired(required = false) ViewResolver[] viewResolvers; + private @Autowired(required = false) LocaleResolver localeResolver; + + @Override + public void build(final HttpServletRequest httpReq, final HttpServletResponse httpResp, + final IGuiBuilderConfiguration config, final String loggerName) throws GuiBuildException { + build(httpReq, httpResp, config, null, loggerName); + + } + + @Override + public void build(final HttpServletRequest httpReq, final HttpServletResponse httpResp, + final IGuiBuilderConfiguration config, final String contentType, final String loggerName) + throws GuiBuildException { + try { + MvcGuiRenderUtils.render(MvcGuiRenderUtils.prepareSpringGuiModel(config), + httpReq, httpResp, viewResolvers, localeResolver); + + } catch (final Exception e) { + log.info("Can NOT generate GUI for: {}", loggerName, e); + throw new GuiBuildException(e.getMessage(), e); + + } + } + + @Override + public String evaluateResponseContentType(HttpServletRequest httpReq, IGuiBuilderConfiguration config, + String loggerName) throws GuiBuildException { + try { + return MvcGuiRenderUtils.evaluateResponseContentType(httpReq, config, viewResolvers, localeResolver); + + } catch (final Exception e) { + log.info("Can NOT evaluate contentType for response GUI: {}", loggerName, e); + throw new GuiBuildException(e.getMessage(), e); + + } + } + +} -- cgit v1.2.3