@Test public void testMergeRemoteProcessGroups() throws Exception { final NodeIdentifier node1 = new NodeIdentifier("node-1", "host-1", 8080, "host-1", 19998, null, null, null, false); final NodeIdentifier node2 = new NodeIdentifier("node-2", "host-2", 8081, "host-2", 19999, null, null, null, false); final PermissionsDTO permissed = new PermissionsDTO(); permissed.setCanRead(true); permissed.setCanWrite(true); final RemoteProcessGroupStatusDTO status = new RemoteProcessGroupStatusDTO(); status.setAggregateSnapshot(new RemoteProcessGroupStatusSnapshotDTO()); final RemoteProcessGroupPortDTO in1_1 = new RemoteProcessGroupPortDTO(); in1_1.setName("in1"); final RemoteProcessGroupPortDTO in1_2 = new RemoteProcessGroupPortDTO(); in1_2.setName("in2"); final Set<RemoteProcessGroupPortDTO> inputs1 = new HashSet<>(); inputs1.add(in1_1); inputs1.add(in1_2); final RemoteProcessGroupPortDTO out1_1 = new RemoteProcessGroupPortDTO(); out1_1.setName("out1"); final Set<RemoteProcessGroupPortDTO> outputs1 = new HashSet<>(); outputs1.add(out1_1); final RemoteProcessGroupContentsDTO contents1 = new RemoteProcessGroupContentsDTO(); contents1.setInputPorts(inputs1); contents1.setOutputPorts(outputs1); final RemoteProcessGroupDTO rpg1 = new RemoteProcessGroupDTO(); rpg1.setContents(contents1); final RemoteProcessGroupEntity entity1 = new RemoteProcessGroupEntity(); entity1.setPermissions(permissed); entity1.setStatus(status); entity1.setComponent(rpg1); final RemoteProcessGroupPortDTO in2_1 = new RemoteProcessGroupPortDTO(); in2_1.setName("in1"); final Set<RemoteProcessGroupPortDTO> inputs2 = new HashSet<>(); inputs2.add(in2_1); final RemoteProcessGroupPortDTO out2_1 = new RemoteProcessGroupPortDTO(); out2_1.setName("out1"); final RemoteProcessGroupPortDTO out2_2 = new RemoteProcessGroupPortDTO(); out2_2.setName("out2"); final Set<RemoteProcessGroupPortDTO> outputs2 = new HashSet<>(); outputs2.add(out2_1); outputs2.add(out2_2); final RemoteProcessGroupContentsDTO contents2 = new RemoteProcessGroupContentsDTO(); contents2.setInputPorts(inputs2); contents2.setOutputPorts(outputs2); final RemoteProcessGroupDTO rpg2 = new RemoteProcessGroupDTO(); rpg2.setContents(contents2); final RemoteProcessGroupEntity entity2 = new RemoteProcessGroupEntity(); entity2.setPermissions(permissed); entity2.setStatus(status); entity2.setComponent(rpg2); final Map<NodeIdentifier, RemoteProcessGroupEntity> nodeMap = new HashMap<>(); nodeMap.put(node1, entity1); nodeMap.put(node2, entity2); final RemoteProcessGroupEntityMerger merger = new RemoteProcessGroupEntityMerger(); merger.merge(entity1, nodeMap); assertEquals(1, entity1.getComponent().getContents().getInputPorts().size()); assertEquals("in1", entity1.getComponent().getContents().getInputPorts().iterator().next().getName()); assertEquals(1, entity1.getComponent().getContents().getOutputPorts().size()); assertEquals("out1", entity1.getComponent().getContents().getOutputPorts().iterator().next().getName()); }
@Override public void merge(RemoteProcessGroupEntity clientEntity, Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap) { ComponentEntityMerger.super.merge(clientEntity, entityMap); for (Map.Entry<NodeIdentifier, RemoteProcessGroupEntity> entry : entityMap.entrySet()) { final RemoteProcessGroupEntity entityStatus = entry.getValue(); if (entityStatus != clientEntity) { mergeStatus(clientEntity.getStatus(), clientEntity.getPermissions().getCanRead(), entry.getValue().getStatus(), entry.getValue().getPermissions().getCanRead(), entry.getKey()); } } }
RemoteProcessGroupEntityMerger implements ComponentEntityMerger<RemoteProcessGroupEntity>, ComponentEntityStatusMerger<RemoteProcessGroupStatusDTO> { @Override public void merge(RemoteProcessGroupEntity clientEntity, Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap) { ComponentEntityMerger.super.merge(clientEntity, entityMap); for (Map.Entry<NodeIdentifier, RemoteProcessGroupEntity> entry : entityMap.entrySet()) { final RemoteProcessGroupEntity entityStatus = entry.getValue(); if (entityStatus != clientEntity) { mergeStatus(clientEntity.getStatus(), clientEntity.getPermissions().getCanRead(), entry.getValue().getStatus(), entry.getValue().getPermissions().getCanRead(), entry.getKey()); } } } }
RemoteProcessGroupEntityMerger implements ComponentEntityMerger<RemoteProcessGroupEntity>, ComponentEntityStatusMerger<RemoteProcessGroupStatusDTO> { @Override public void merge(RemoteProcessGroupEntity clientEntity, Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap) { ComponentEntityMerger.super.merge(clientEntity, entityMap); for (Map.Entry<NodeIdentifier, RemoteProcessGroupEntity> entry : entityMap.entrySet()) { final RemoteProcessGroupEntity entityStatus = entry.getValue(); if (entityStatus != clientEntity) { mergeStatus(clientEntity.getStatus(), clientEntity.getPermissions().getCanRead(), entry.getValue().getStatus(), entry.getValue().getPermissions().getCanRead(), entry.getKey()); } } }  }
RemoteProcessGroupEntityMerger implements ComponentEntityMerger<RemoteProcessGroupEntity>, ComponentEntityStatusMerger<RemoteProcessGroupStatusDTO> { @Override public void merge(RemoteProcessGroupEntity clientEntity, Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap) { ComponentEntityMerger.super.merge(clientEntity, entityMap); for (Map.Entry<NodeIdentifier, RemoteProcessGroupEntity> entry : entityMap.entrySet()) { final RemoteProcessGroupEntity entityStatus = entry.getValue(); if (entityStatus != clientEntity) { mergeStatus(clientEntity.getStatus(), clientEntity.getPermissions().getCanRead(), entry.getValue().getStatus(), entry.getValue().getPermissions().getCanRead(), entry.getKey()); } } }  @Override void merge(RemoteProcessGroupEntity clientEntity, Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap); @Override void mergeComponents(final RemoteProcessGroupEntity clientEntity, final Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap); @Override void mergeStatus(RemoteProcessGroupStatusDTO clientStatus, boolean clientStatusReadablePermission, RemoteProcessGroupStatusDTO status,
                            boolean statusReadablePermission, NodeIdentifier statusNodeIdentifier); }
RemoteProcessGroupEntityMerger implements ComponentEntityMerger<RemoteProcessGroupEntity>, ComponentEntityStatusMerger<RemoteProcessGroupStatusDTO> { @Override public void merge(RemoteProcessGroupEntity clientEntity, Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap) { ComponentEntityMerger.super.merge(clientEntity, entityMap); for (Map.Entry<NodeIdentifier, RemoteProcessGroupEntity> entry : entityMap.entrySet()) { final RemoteProcessGroupEntity entityStatus = entry.getValue(); if (entityStatus != clientEntity) { mergeStatus(clientEntity.getStatus(), clientEntity.getPermissions().getCanRead(), entry.getValue().getStatus(), entry.getValue().getPermissions().getCanRead(), entry.getKey()); } } }  @Override void merge(RemoteProcessGroupEntity clientEntity, Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap); @Override void mergeComponents(final RemoteProcessGroupEntity clientEntity, final Map<NodeIdentifier, RemoteProcessGroupEntity> entityMap); @Override void mergeStatus(RemoteProcessGroupStatusDTO clientStatus, boolean clientStatusReadablePermission, RemoteProcessGroupStatusDTO status,
                            boolean statusReadablePermission, NodeIdentifier statusNodeIdentifier);  }