Skip to content

Instantly share code, notes, and snippets.

@isurugiu
Last active February 18, 2016 10:12
Show Gist options
  • Save isurugiu/cf4175ce19987924e1a6 to your computer and use it in GitHub Desktop.
Save isurugiu/cf4175ce19987924e1a6 to your computer and use it in GitHub Desktop.
SDS router v0.0.1
import org.jumpmind.db.sql.ISqlTemplate;
import org.jumpmind.symmetric.ClientSymmetricEngine;
import org.jumpmind.symmetric.model.Node;
import java.lang.String;
import java.util.*;
import org.jumpmind.db.sql.Row;
import org.apache.commons.lang.StringUtils;
import com.eclipsesource.json.*;
// DETAILS is the field of the row that comes from SymmetricDS
log.info("MPRT: Routing SDS for passes : " + DETAILS);
log.info("MPRT: Parsing JSON");
JsonObject object = Json.parse(DETAILS).asObject();
JsonObject locationScopeJson = object.get("location-scope").asObject();
String locationScopeType = locationScopeJson.get("$type").asString();
List parkCodes = new ArrayList(0);
Boolean isGlobal = false;
log.info("MPRT: locationScopeType : " + locationScopeType);
switch(locationScopeType){
case "parks-based":
JsonArray parksArray = locationScopeJson.get("parks").asArray();
for(int i = 0; i < parksArray.size(); i++){
parkCodes.add(parksArray.get(i).asString().toUpperCase());
}
break;
case "groups-based":
JsonArray groupsArray = locationScopeJson.get("groups").asArray();
List groupCodes = new ArrayList(1);
for(int i = 0; i < groupsArray.size(); i++){
groupCodes.add(groupsArray.get(i).asString().toUpperCase());
}
String strParks = "'" + StringUtils.join(groupCodes, "','") + "'";
// SELECT park_code FROM park_x_group WHERE group_code=ANY(ARRAY['ZZZY','FOO']);
String sql = "SELECT DISTINCT(park_code) FROM park_x_group WHERE group_code ilike ANY(ARRAY[?]) GROUP BY park_code";
ISqlTemplate sqlTemplate = engine.getDatabasePlatform().getSqlTemplate();
List rows = sqlTemplate.query(sql, new Object[] { strParks });
for(Row r : rows){
parkCodes.add(r.stringValue().toUpperCase());
}
break;
case "global":
isGlobal = true;
break;
default:
//return false;
}
log.info("MPRT: Node groups to replicate to: " + parkCodes);
Set targetNodes = new HashSet();
for (String park : parkCodes){
String sql = "SELECT node_id FROM sym_node WHERE node_group_id = ?";
log.info("MPRT: " + sql);
ISqlTemplate sqlTemplate = engine.getDatabasePlatform().getSqlTemplate();
String node_id = dataMetaData.getData().getAttribute("node_id");
List rows = sqlTemplate.query(sql, new Object[] { park.toLowerCase() });
for (Row r : rows) {
log.info("MPRT: Adding node: " + r.stringValue());
targetNodes.add(r.stringValue());
}
}
log.info("MPRT: Replicating specifically to: " + targetNodes);
return targetNodes;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment