From 9fe8d0a0ca99bf6413a97c91e2cd9ca2f1e000fd Mon Sep 17 00:00:00 2001 From: werner daehn Date: Sun, 28 Aug 2022 11:07:24 +0200 Subject: [PATCH] support initial load where clause --- pom.xml | 6 +- .../bigdata/s4hanaconnector/S4HanaBrowse.java | 9 ++ .../s4hanaconnector/S4HanaTableMapping.java | 16 +- .../rest/SourceTableService.java | 150 +++++++++--------- src/main/resources/ui5/view/AddTables.view | 64 ++++---- .../s4hanaconnector/PerformanceIT.java | 1 + 6 files changed, 138 insertions(+), 108 deletions(-) diff --git a/pom.xml b/pom.xml index 1bcc7ac..6ced133 100644 --- a/pom.xml +++ b/pom.xml @@ -4,11 +4,11 @@ 4.0.0 io.rtdi.bigdata.connector s4hanaconnector - 0.9.35 + 0.9.36 war UTF-8 - 0.10.16 + 0.10.18 ${project.artifactId} @@ -51,7 +51,7 @@ com.sap.cloud.db.jdbc ngdbc - 2.11.14 + 2.13.9 junit diff --git a/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaBrowse.java b/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaBrowse.java index 736f760..a086e4d 100644 --- a/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaBrowse.java +++ b/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaBrowse.java @@ -109,6 +109,7 @@ public static class TableImport { private String tablename; private String schemaname; private boolean imported; + private String initialloadwhere; public TableImport() { super(); @@ -140,6 +141,14 @@ public String getSchemaname() { public void setSchemaname(String schemaname) { this.schemaname = schemaname; } + + public String getInitialloadwhere() { + return initialloadwhere; + } + + public void setInitialloadwhere(String initialloadwhere) { + this.initialloadwhere = initialloadwhere; + } } @Override diff --git a/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaTableMapping.java b/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaTableMapping.java index 8be8ac2..253ab44 100644 --- a/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaTableMapping.java +++ b/src/main/java/io/rtdi/bigdata/s4hanaconnector/S4HanaTableMapping.java @@ -44,12 +44,13 @@ public class S4HanaTableMapping { private String name; private String deltaselect; private StringBuffer initialselectprojection; + private String initialloadwhere; public S4HanaTableMapping() { super(); } - public S4HanaTableMapping(String name, String username, String sourcedbschema, String mastertable, String alias, Connection conn) throws ConnectorRuntimeException { + public S4HanaTableMapping(String name, String username, String sourcedbschema, String mastertable, String alias, String initialloadwhere, Connection conn) throws ConnectorRuntimeException { super(); this.mastertable = mastertable; this.alias = alias; @@ -57,6 +58,7 @@ public S4HanaTableMapping(String name, String username, String sourcedbschema, S this.username = username; this.conn = conn; this.name = name; + this.initialloadwhere = initialloadwhere; addColumns(); } @@ -248,6 +250,7 @@ protected void parseValues(S4HanaTableMapping data) throws ConnectorRuntimeExcep this.columnmappings = data.getColumnmappings(); this.pkcolumns = data.getPKColumns(); this.alias = data.getAlias(); + this.initialloadwhere = data.getInitialloadwhere(); } public void setMastertable(String mastertable) { @@ -751,6 +754,9 @@ public String getInitialSelect(Integer partition) { select.append(") "); } select.append(" as ").append(getAliasIdentifier()); + if (initialloadwhere != null) { + select.append(" where ").append(initialloadwhere); + } return select.toString(); } @@ -759,5 +765,13 @@ public String toString() { return mastertable; } + public String getInitialloadwhere() { + return initialloadwhere; + } + + public void setInitialloadwhere(String initialloadwhere) { + this.initialloadwhere = initialloadwhere; + } + } diff --git a/src/main/java/io/rtdi/bigdata/s4hanaconnector/rest/SourceTableService.java b/src/main/java/io/rtdi/bigdata/s4hanaconnector/rest/SourceTableService.java index 6bc0dd5..9e60b86 100644 --- a/src/main/java/io/rtdi/bigdata/s4hanaconnector/rest/SourceTableService.java +++ b/src/main/java/io/rtdi/bigdata/s4hanaconnector/rest/SourceTableService.java @@ -1,76 +1,76 @@ -package io.rtdi.bigdata.s4hanaconnector.rest; - -import java.util.List; - -import jakarta.annotation.security.RolesAllowed; -import jakarta.servlet.ServletContext; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Configuration; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import io.rtdi.bigdata.connector.connectorframework.WebAppController; -import io.rtdi.bigdata.connector.connectorframework.controller.ConnectionController; -import io.rtdi.bigdata.connector.connectorframework.controller.ConnectorController; -import io.rtdi.bigdata.connector.connectorframework.rest.JAXBErrorResponseBuilder; -import io.rtdi.bigdata.connector.connectorframework.rest.JAXBSuccessResponseBuilder; -import io.rtdi.bigdata.connector.connectorframework.servlet.ServletSecurityConstants; -import io.rtdi.bigdata.s4hanaconnector.S4HanaTableMapping; -import io.rtdi.bigdata.s4hanaconnector.S4HanaBrowse; -import io.rtdi.bigdata.s4hanaconnector.S4HanaBrowse.TableImport; -import io.rtdi.bigdata.s4hanaconnector.S4HanaConnectionProperties; - -@Path("/") -public class SourceTableService { - @Context - private Configuration configuration; - - @Context - private ServletContext servletContext; - - public SourceTableService() { - } - - @GET - @Path("/connections/{connectionname}/sourcetables") - @Produces(MediaType.APPLICATION_JSON) - @RolesAllowed({ServletSecurityConstants.ROLE_VIEW}) - public Response getFiles(@PathParam("connectionname") String connectionname, @PathParam("name") String name) { - try { - ConnectorController connector = WebAppController.getConnectorOrFail(servletContext); - ConnectionController connection = connector.getConnectionOrFail(connectionname); - S4HanaBrowse browser = (S4HanaBrowse) connection.getBrowser(); - return Response.ok(browser.getHanaTables()).build(); - } catch (Exception e) { - return JAXBErrorResponseBuilder.getJAXBResponse(e); - } - } - - @POST - @Path("/connections/{connectionname}/sourcetables") - @Produces(MediaType.APPLICATION_JSON) - @RolesAllowed({ServletSecurityConstants.ROLE_VIEW}) - public Response getFiles(@PathParam("connectionname") String connectionname, List data) { - try { - ConnectorController connector = WebAppController.getConnectorOrFail(servletContext); - ConnectionController connection = connector.getConnectionOrFail(connectionname); - S4HanaConnectionProperties props = (S4HanaConnectionProperties) connection.getConnectionProperties(); - String dbuser = props.getUsername(); - String dbschema = props.getSourceSchema(); - S4HanaBrowse browser = (S4HanaBrowse) connection.getBrowser(); - for (TableImport t : data) { - S4HanaTableMapping entity = new S4HanaTableMapping(t.getSchemaname(), dbuser, dbschema, t.getTablename(), "L1", browser.getConnection()); - entity.write(browser.getBusinessObjectDirectory()); - } - return JAXBSuccessResponseBuilder.getJAXBResponse("Saved " + data.size() + " table schemas"); - } catch (Exception e) { - return JAXBErrorResponseBuilder.getJAXBResponse(e); - } - } - +package io.rtdi.bigdata.s4hanaconnector.rest; + +import java.util.List; + +import jakarta.annotation.security.RolesAllowed; +import jakarta.servlet.ServletContext; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Configuration; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import io.rtdi.bigdata.connector.connectorframework.WebAppController; +import io.rtdi.bigdata.connector.connectorframework.controller.ConnectionController; +import io.rtdi.bigdata.connector.connectorframework.controller.ConnectorController; +import io.rtdi.bigdata.connector.connectorframework.rest.JAXBErrorResponseBuilder; +import io.rtdi.bigdata.connector.connectorframework.rest.JAXBSuccessResponseBuilder; +import io.rtdi.bigdata.connector.connectorframework.servlet.ServletSecurityConstants; +import io.rtdi.bigdata.s4hanaconnector.S4HanaTableMapping; +import io.rtdi.bigdata.s4hanaconnector.S4HanaBrowse; +import io.rtdi.bigdata.s4hanaconnector.S4HanaBrowse.TableImport; +import io.rtdi.bigdata.s4hanaconnector.S4HanaConnectionProperties; + +@Path("/") +public class SourceTableService { + @Context + private Configuration configuration; + + @Context + private ServletContext servletContext; + + public SourceTableService() { + } + + @GET + @Path("/connections/{connectionname}/sourcetables") + @Produces(MediaType.APPLICATION_JSON) + @RolesAllowed({ServletSecurityConstants.ROLE_VIEW}) + public Response getFiles(@PathParam("connectionname") String connectionname, @PathParam("name") String name) { + try { + ConnectorController connector = WebAppController.getConnectorOrFail(servletContext); + ConnectionController connection = connector.getConnectionOrFail(connectionname); + S4HanaBrowse browser = (S4HanaBrowse) connection.getBrowser(); + return Response.ok(browser.getHanaTables()).build(); + } catch (Exception e) { + return JAXBErrorResponseBuilder.getJAXBResponse(e); + } + } + + @POST + @Path("/connections/{connectionname}/sourcetables") + @Produces(MediaType.APPLICATION_JSON) + @RolesAllowed({ServletSecurityConstants.ROLE_VIEW}) + public Response getFiles(@PathParam("connectionname") String connectionname, List data) { + try { + ConnectorController connector = WebAppController.getConnectorOrFail(servletContext); + ConnectionController connection = connector.getConnectionOrFail(connectionname); + S4HanaConnectionProperties props = (S4HanaConnectionProperties) connection.getConnectionProperties(); + String dbuser = props.getUsername(); + String dbschema = props.getSourceSchema(); + S4HanaBrowse browser = (S4HanaBrowse) connection.getBrowser(); + for (TableImport t : data) { + S4HanaTableMapping entity = new S4HanaTableMapping(t.getSchemaname(), dbuser, dbschema, t.getTablename(), "L1", t.getInitialloadwhere(), browser.getConnection()); + entity.write(browser.getBusinessObjectDirectory()); + } + return JAXBSuccessResponseBuilder.getJAXBResponse("Saved " + data.size() + " table schemas"); + } catch (Exception e) { + return JAXBErrorResponseBuilder.getJAXBResponse(e); + } + } + } \ No newline at end of file diff --git a/src/main/resources/ui5/view/AddTables.view b/src/main/resources/ui5/view/AddTables.view index 38aa95d..4f10d32 100644 --- a/src/main/resources/ui5/view/AddTables.view +++ b/src/main/resources/ui5/view/AddTables.view @@ -1,29 +1,35 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/src/test/java/io/rtdi/bigdata/s4hanaconnector/PerformanceIT.java b/src/test/java/io/rtdi/bigdata/s4hanaconnector/PerformanceIT.java index 33e3daf..09cf772 100644 --- a/src/test/java/io/rtdi/bigdata/s4hanaconnector/PerformanceIT.java +++ b/src/test/java/io/rtdi/bigdata/s4hanaconnector/PerformanceIT.java @@ -69,6 +69,7 @@ public void setUp() throws Exception { connprops.getSourceSchema(), TABLENAME, "L1", + connprops.getSourceSchema(), browser.getConnection()); entity.write(browser.getBusinessObjectDirectory()); logger.info("setup of environment is completed");