private static void mergeChange(NodeBuilder parent, PropertyState ours, PropertyState theirs, Set<String> base) { PropertyBuilder<String> merged = PropertyBuilder.array(Type.STRING); merged.setName(UserConstants.REP_MEMBERS); Set<String> theirMembers = Sets.newHashSet(theirs.getValue(Type.STRINGS)); Set<String> ourMembers = Sets.newHashSet(ours.getValue(Type.STRINGS)); // merge ours and theirs to a de-duplicated set Set<String> combined = Sets.newHashSet(Sets.intersection(ourMembers, theirMembers)); for (String m : Sets.difference(ourMembers, theirMembers)) { if (!base.contains(m)) { combined.add(m); } } for (String m : Sets.difference(theirMembers, ourMembers)) { if (!base.contains(m)) { combined.add(m); } } merged.addValues(combined); parent.setProperty(merged.getPropertyState()); }
private static void mergeChange(NodeBuilder parent, PropertyState ours, PropertyState theirs, Set<String> base) { PropertyBuilder<String> merged = PropertyBuilder.array(Type.STRING); merged.setName(UserConstants.REP_MEMBERS); Set<String> theirMembers = Sets.newHashSet(theirs.getValue(Type.STRINGS)); Set<String> ourMembers = Sets.newHashSet(ours.getValue(Type.STRINGS)); // merge ours and theirs to a de-duplicated set Set<String> combined = Sets.newHashSet(Sets.intersection(ourMembers, theirMembers)); for (String m : Sets.difference(ourMembers, theirMembers)) { if (!base.contains(m)) { combined.add(m); } } for (String m : Sets.difference(theirMembers, ourMembers)) { if (!base.contains(m)) { combined.add(m); } } merged.addValues(combined); parent.setProperty(merged.getPropertyState()); }
private static void mergeChange(NodeBuilder parent, PropertyState ours, PropertyState theirs, Set<String> base) { PropertyBuilder<String> merged = PropertyBuilder.array(Type.STRING); merged.setName(UserConstants.REP_MEMBERS); Set<String> theirMembers = Sets.newHashSet(theirs.getValue(Type.STRINGS)); Set<String> ourMembers = Sets.newHashSet(ours.getValue(Type.STRINGS)); // merge ours and theirs to a de-duplicated set Set<String> combined = Sets.newHashSet(Sets.intersection(ourMembers, theirMembers)); for (String m : Sets.difference(ourMembers, theirMembers)) { if (!base.contains(m)) { combined.add(m); } } for (String m : Sets.difference(theirMembers, ourMembers)) { if (!base.contains(m)) { combined.add(m); } } merged.addValues(combined); parent.setProperty(merged.getPropertyState()); }
private static int removeNestedCugPath(@NotNull NodeBuilder parentBuilder, @NotNull String toRemove, @NotNull Iterable<String> toReconnect) { PropertyState ps = parentBuilder.getProperty(HIDDEN_NESTED_CUGS); PropertyBuilder<String> pb = getHiddenPropertyBuilder(ps); if (pb.hasValue(toRemove)) { pb.removeValue(toRemove); pb.addValues(toReconnect); if (pb.isEmpty()) { parentBuilder.removeProperty(HIDDEN_NESTED_CUGS); return 0; } else { parentBuilder.setProperty(pb.getPropertyState()); return pb.count(); } } else { log.debug("Parent CUG doesn't contain expected entry for removed nested CUG"); return -1; } }
private static int removeNestedCugPath(@NotNull NodeBuilder parentBuilder, @NotNull String toRemove, @NotNull Iterable<String> toReconnect) { PropertyState ps = parentBuilder.getProperty(HIDDEN_NESTED_CUGS); PropertyBuilder<String> pb = getHiddenPropertyBuilder(ps); if (pb.hasValue(toRemove)) { pb.removeValue(toRemove); pb.addValues(toReconnect); if (pb.isEmpty()) { parentBuilder.removeProperty(HIDDEN_NESTED_CUGS); return 0; } else { parentBuilder.setProperty(pb.getPropertyState()); return pb.count(); } } else { log.debug("Parent CUG doesn't contain expected entry for removed nested CUG"); return -1; } }
private static long addNestedCugPath(@NotNull NodeBuilder parentBuilder, @NotNull NodeBuilder builder, @NotNull String pathWithNewCug) { PropertyState ps = parentBuilder.getProperty(HIDDEN_NESTED_CUGS); PropertyBuilder<String> pb = getHiddenPropertyBuilder(ps); if (ps != null) { List<String> moveToNestedCug = Lists.newArrayList(); for (String p : ps.getValue(Type.STRINGS)) { if (Text.isDescendant(pathWithNewCug, p)) { pb.removeValue(p); moveToNestedCug.add(p); } else if (p.equals(pathWithNewCug)) { // already present with parent -> remove to avoid duplicate entries log.debug("Path of node holding a new nested CUG is already listed with the parent CUG."); pb.removeValue(p); } } if (!moveToNestedCug.isEmpty()) { PropertyBuilder<String> pb2 = getHiddenPropertyBuilder(builder.getProperty(HIDDEN_NESTED_CUGS)); pb2.addValues(moveToNestedCug); builder.setProperty(pb2.getPropertyState()); } } // update the nested-cug property of the parent pb.addValue(pathWithNewCug); parentBuilder.setProperty(pb.getPropertyState()); return pb.count(); }
private static long addNestedCugPath(@NotNull NodeBuilder parentBuilder, @NotNull NodeBuilder builder, @NotNull String pathWithNewCug) { PropertyState ps = parentBuilder.getProperty(HIDDEN_NESTED_CUGS); PropertyBuilder<String> pb = getHiddenPropertyBuilder(ps); if (ps != null) { List<String> moveToNestedCug = Lists.newArrayList(); for (String p : ps.getValue(Type.STRINGS)) { if (Text.isDescendant(pathWithNewCug, p)) { pb.removeValue(p); moveToNestedCug.add(p); } else if (p.equals(pathWithNewCug)) { // already present with parent -> remove to avoid duplicate entries log.debug("Path of node holding a new nested CUG is already listed with the parent CUG."); pb.removeValue(p); } } if (!moveToNestedCug.isEmpty()) { PropertyBuilder<String> pb2 = getHiddenPropertyBuilder(builder.getProperty(HIDDEN_NESTED_CUGS)); pb2.addValues(moveToNestedCug); builder.setProperty(pb2.getPropertyState()); } } // update the nested-cug property of the parent pb.addValue(pathWithNewCug); parentBuilder.setProperty(pb.getPropertyState()); return pb.count(); }