From 53d3709b52d81f666c6a330282fd72d14f4b26a4 Mon Sep 17 00:00:00 2001 From: evan-miller-jumpmind <70151986+evan-miller-jumpmind@users.noreply.github.com> Date: Wed, 11 Oct 2023 08:54:59 -0400 Subject: [PATCH] 0006013: Added :SOURCE_NODE_ID, :SOURCE_EXTERNAL_ID, and :SOURCE_NODE_GROUP_ID variables to column match routers --- .../asciidoc/configuration/routers/column.ad | 3 ++ .../symmetric/common/TokenConstants.java | 3 ++ .../route/ColumnMatchDataRouter.java | 32 +++++++++++++++---- .../symmetric/service/impl/RouterService.java | 3 +- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/symmetric-assemble/src/asciidoc/configuration/routers/column.ad b/symmetric-assemble/src/asciidoc/configuration/routers/column.ad index 28b71f91c3..cb36d9bd6c 100644 --- a/symmetric-assemble/src/asciidoc/configuration/routers/column.ad +++ b/symmetric-assemble/src/asciidoc/configuration/routers/column.ad @@ -64,8 +64,11 @@ endif::pro[] ==== * :NODE_ID +* :SOURCE_NODE_ID * :EXTERNAL_ID +* :SOURCE_EXTERNAL_ID * :NODE_GROUP_ID +* :SOURCE_NODE_GROUP_ID * :REDIRECT_NODE ==== diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TokenConstants.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TokenConstants.java index 23765a89ac..c03091a56a 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TokenConstants.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/TokenConstants.java @@ -25,8 +25,11 @@ private TokenConstants() { } public static final String NODE_ID = ":NODE_ID"; + public static final String SOURCE_NODE_ID = ":SOURCE_NODE_ID"; public static final String EXTERNAL_ID = ":EXTERNAL_ID"; + public static final String SOURCE_EXTERNAL_ID = ":SOURCE_EXTERNAL_ID"; public static final String NODE_GROUP_ID = ":NODE_GROUP_ID"; + public static final String SOURCE_NODE_GROUP_ID = ":SOURCE_NODE_GROUP_ID"; public static final String REDIRECT_NODE = ":REDIRECT_NODE"; public static final String EXTERNAL_DATA = ":EXTERNAL_DATA"; } \ No newline at end of file diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ColumnMatchDataRouter.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ColumnMatchDataRouter.java index f59e905f2a..857b3b4066 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ColumnMatchDataRouter.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ColumnMatchDataRouter.java @@ -29,6 +29,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.jumpmind.extension.IBuiltInExtensionPoint; +import org.jumpmind.symmetric.ISymmetricEngine; import org.jumpmind.symmetric.SyntaxParsingException; import org.jumpmind.symmetric.common.TokenConstants; import org.jumpmind.symmetric.db.ISymmetricDialect; @@ -69,17 +70,15 @@ */ public class ColumnMatchDataRouter extends AbstractDataRouter implements IDataRouter, IBuiltInExtensionPoint { private static final String NULL_VALUE = "NULL"; - private IConfigurationService configurationService; - private ISymmetricDialect symmetricDialect; + private ISymmetricEngine engine; final static String EXPRESSION_KEY = String.format("%s.Expression.", ColumnMatchDataRouter.class .getName()); public ColumnMatchDataRouter() { } - public ColumnMatchDataRouter(IConfigurationService configurationService, ISymmetricDialect symmetricDialect) { - this.configurationService = configurationService; - this.symmetricDialect = symmetricDialect; + public ColumnMatchDataRouter(ISymmetricEngine engine) { + this.engine = engine; } public Set routeToNodes(SimpleRouterContext routingContext, @@ -89,8 +88,9 @@ public Set routeToNodes(SimpleRouterContext routingContext, nodeIds = toNodeIds(nodes, null); } else { List expressions = getExpressions(dataMetaData.getRouter(), routingContext); - Map columnValues = getDataMap(dataMetaData, symmetricDialect); + Map columnValues = getDataMap(dataMetaData, engine.getSymmetricDialect()); if (columnValues != null) { + Node identity = engine.getNodeService().findIdentity(); for (Expression e : expressions) { String column = e.tokens[0].trim(); String value = e.tokens[1]; @@ -100,16 +100,34 @@ public Set routeToNodes(SimpleRouterContext routingContext, nodeIds = runExpression(e, columnValue, node.getNodeId(), nodes, nodeIds, node); } + } else if (value.equalsIgnoreCase(TokenConstants.SOURCE_NODE_ID)) { + String sourceNodeId = identity.getNodeId(); + for (Node node : nodes) { + nodeIds = runExpression(e, columnValue, sourceNodeId, nodes, + nodeIds, node); + } } else if (value.equalsIgnoreCase(TokenConstants.EXTERNAL_ID)) { for (Node node : nodes) { nodeIds = runExpression(e, columnValue, node.getExternalId(), nodes, nodeIds, node); } + } else if (value.equalsIgnoreCase(TokenConstants.SOURCE_EXTERNAL_ID)) { + String sourceExternalId = identity.getExternalId(); + for (Node node : nodes) { + nodeIds = runExpression(e, columnValue, sourceExternalId, nodes, + nodeIds, node); + } } else if (value.equalsIgnoreCase(TokenConstants.NODE_GROUP_ID)) { for (Node node : nodes) { nodeIds = runExpression(e, columnValue, node.getNodeGroupId(), nodes, nodeIds, node); } + } else if (value.equalsIgnoreCase(TokenConstants.SOURCE_NODE_GROUP_ID)) { + String sourceNodeGroupId = identity.getNodeGroupId(); + for (Node node : nodes) { + nodeIds = runExpression(e, columnValue, sourceNodeGroupId, nodes, + nodeIds, node); + } } else if (e.hasEquals && value.equalsIgnoreCase(TokenConstants.REDIRECT_NODE)) { Map redirectMap = getRedirectMap(routingContext); String nodeId = redirectMap.get(columnValue); @@ -247,7 +265,7 @@ protected Map getRedirectMap(SimpleRouterContext ctx) { Map redirectMap = (Map) ctx.getContextCache().get( CTX_CACHE_KEY); if (redirectMap == null) { - redirectMap = configurationService.getRegistrationRedirectMap(); + redirectMap = engine.getConfigurationService().getRegistrationRedirectMap(); ctx.getContextCache().put(CTX_CACHE_KEY, redirectMap); } return redirectMap; diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java index 7a476bf31f..6597acbbb6 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java @@ -138,8 +138,7 @@ public RouterService(ISymmetricEngine engine) { extensionService.addExtensionPoint("lookuptable", new LookupTableDataRouter(symmetricDialect)); extensionService.addExtensionPoint("default", new DefaultDataRouter()); extensionService.addExtensionPoint("audit", new AuditTableDataRouter(engine)); - extensionService.addExtensionPoint("column", new ColumnMatchDataRouter(engine.getConfigurationService(), - engine.getSymmetricDialect())); + extensionService.addExtensionPoint("column", new ColumnMatchDataRouter(engine)); extensionService.addExtensionPoint(FileSyncDataRouter.ROUTER_TYPE, new FileSyncDataRouter(engine)); extensionService.addExtensionPoint("dbf", new DBFRouter(engine)); extensionService.addExtensionPoint("tps", new TPSRouter(engine));