use of org.jumpmind.symmetric.model.GroupletLink in project symmetric-ds by JumpMind.
the class GroupletService method getGrouplets.
public List<Grouplet> getGrouplets(boolean refreshCache) {
long maxCacheTime = parameterService.getLong(ParameterConstants.CACHE_TIMEOUT_GROUPLETS_IN_MS);
List<Grouplet> all = cache;
if (all == null || System.currentTimeMillis() - lastCacheTime >= maxCacheTime || lastCacheTime == 0 || refreshCache) {
ISqlTemplate sqlTemplate = platform.getSqlTemplate();
final Map<String, Grouplet> groupletMap = new HashMap<String, Grouplet>();
all = sqlTemplate.query(getSql("selectGroupletSql"), new ISqlRowMapper<Grouplet>() {
public Grouplet mapRow(Row rs) {
Grouplet grouplet = new Grouplet();
grouplet.setGroupletId(rs.getString("grouplet_id"));
grouplet.setDescription(rs.getString("description"));
grouplet.setGroupletLinkPolicy(GroupletLinkPolicy.valueOf(rs.getString("grouplet_link_policy")));
grouplet.setCreateTime(rs.getDateTime("create_time"));
grouplet.setLastUpdateBy(rs.getString("last_update_by"));
grouplet.setLastUpdateTime(rs.getDateTime("last_update_time"));
groupletMap.put(grouplet.getGroupletId(), grouplet);
return grouplet;
}
});
sqlTemplate.query(getSql("selectGroupletLinkSql"), new ISqlRowMapper<GroupletLink>() {
public GroupletLink mapRow(Row rs) {
GroupletLink groupletLink = new GroupletLink();
String groupletId = rs.getString("grouplet_id");
Grouplet grouplet = groupletMap.get(groupletId);
groupletLink.setExternalId(rs.getString("external_id"));
groupletLink.setCreateTime(rs.getDateTime("create_time"));
groupletLink.setLastUpdateBy(rs.getString("last_update_by"));
groupletLink.setLastUpdateTime(rs.getDateTime("last_update_time"));
if (grouplet != null) {
grouplet.getGroupletLinks().add(groupletLink);
}
return groupletLink;
}
});
sqlTemplate.query(getSql("selectTriggerRouterGroupletSql"), new ISqlRowMapper<TriggerRouterGrouplet>() {
public TriggerRouterGrouplet mapRow(Row rs) {
TriggerRouterGrouplet trGrouplet = new TriggerRouterGrouplet();
String groupletId = rs.getString("grouplet_id");
Grouplet grouplet = groupletMap.get(groupletId);
trGrouplet.setAppliesWhen(AppliesWhen.valueOf(rs.getString("applies_when")));
trGrouplet.setRouterId(rs.getString("router_id"));
trGrouplet.setTriggerId(rs.getString("trigger_id"));
trGrouplet.setCreateTime(rs.getDateTime("create_time"));
trGrouplet.setLastUpdateBy(rs.getString("last_update_by"));
trGrouplet.setLastUpdateTime(rs.getDateTime("last_update_time"));
if (grouplet != null) {
grouplet.getTriggerRouterGrouplets().add(trGrouplet);
}
return trGrouplet;
}
});
cache = all;
lastCacheTime = System.currentTimeMillis();
}
return all;
}
use of org.jumpmind.symmetric.model.GroupletLink in project symmetric-ds by JumpMind.
the class GroupletService method deleteGrouplet.
public void deleteGrouplet(Grouplet grouplet) {
List<GroupletLink> links = grouplet.getGroupletLinks();
for (GroupletLink link : links) {
deleteGroupletLink(grouplet, link);
}
List<TriggerRouterGrouplet> triggerRouters = grouplet.getTriggerRouterGrouplets();
for (TriggerRouterGrouplet triggerRouterGrouplet : triggerRouters) {
deleteTriggerRouterGrouplet(grouplet, triggerRouterGrouplet);
}
ISqlTemplate sqlTemplate = platform.getSqlTemplate();
sqlTemplate.update(getSql("deleteGroupletSql"), new Object[] { grouplet.getGroupletId() }, new int[] { Types.VARCHAR });
}
use of org.jumpmind.symmetric.model.GroupletLink in project symmetric-ds by JumpMind.
the class GroupletService method isSourceEnabled.
public boolean isSourceEnabled(TriggerRouter triggerRouter) {
boolean enabled = true;
Node node = engine.getNodeService().findIdentity();
if (node == null) {
enabled = false;
} else {
List<Grouplet> grouplets = getGroupletsFor(triggerRouter, AppliesWhen.S, false);
if (grouplets != null && grouplets.size() > 0) {
enabled = false;
for (Grouplet grouplet : grouplets) {
GroupletLinkPolicy policy = grouplet.getGroupletLinkPolicy();
List<GroupletLink> links = grouplet.getGroupletLinks();
boolean foundMatch = false;
for (GroupletLink groupletLink : links) {
if (groupletLink.getExternalId().equals(node.getExternalId())) {
foundMatch = true;
}
}
if ((foundMatch && policy == GroupletLinkPolicy.I) || (!foundMatch && policy == GroupletLinkPolicy.E)) {
enabled = true;
}
}
}
}
return enabled;
}
use of org.jumpmind.symmetric.model.GroupletLink in project symmetric-ds by JumpMind.
the class GroupletService method getTargetEnabled.
public Set<Node> getTargetEnabled(TriggerRouter triggerRouter, Set<Node> nodes) {
List<Grouplet> grouplets = getGroupletsFor(triggerRouter, AppliesWhen.T, false);
if (grouplets != null && grouplets.size() > 0) {
Set<Node> matchedNodes = new HashSet<Node>();
Set<Node> excludedNodes = new HashSet<Node>();
for (Grouplet grouplet : grouplets) {
GroupletLinkPolicy policy = grouplet.getGroupletLinkPolicy();
List<GroupletLink> links = grouplet.getGroupletLinks();
for (GroupletLink groupletLink : links) {
for (Node node : nodes) {
if (groupletLink.getExternalId().equals(node.getExternalId())) {
if (policy == GroupletLinkPolicy.I) {
matchedNodes.add(node);
} else {
excludedNodes.add(node);
}
}
}
}
}
Set<Node> toReturn = new HashSet<Node>();
excludedNodes.removeAll(matchedNodes);
if (excludedNodes.size() > 0) {
toReturn.addAll(nodes);
toReturn.removeAll(excludedNodes);
} else {
toReturn.addAll(matchedNodes);
}
return toReturn;
} else {
return nodes;
}
}
Aggregations