public static int getAvailableGroupIndex(Topology topology) { if (topology == null || topology.getGroups() == null) { return 0; } Collection<NodeGroup> nodeGroups = topology.getGroups().values(); LinkedHashSet<Integer> indexSet = new LinkedHashSet<>(nodeGroups.size()); for (int i = 0; i < nodeGroups.size(); i++) { indexSet.add(i); } for (NodeGroup nodeGroup : nodeGroups) { indexSet.remove(nodeGroup.getIndex()); } if (indexSet.isEmpty()) { return nodeGroups.size(); } return indexSet.iterator().next(); }
@Override public void process(Csar csar, Topology topology, DeleteGroupOperation operation) { NodeGroup nodeGroup = topology.getGroups() == null ? null : topology.getGroups().remove(operation.getGroupName()); if (nodeGroup == null) { throw new NotFoundException("Group " + operation.getGroupName() + " does not exists"); } for (NodeTemplate nodeTemplate : safe(topology.getNodeTemplates()).values()) { if (nodeTemplate.getGroups() != null) { nodeTemplate.getGroups().remove(operation.getGroupName()); } } } }
/** * Manage node group members when a node name is removed or its name has changed. * * @param newName : the new name of the node or <code>null</code> if the node has been removed. */ public static void updateGroupMembers(Topology topology, NodeTemplate template, String nodeName, String newName) { Map<String, NodeGroup> topologyGroups = topology.getGroups(); if (template.getGroups() != null && !template.getGroups().isEmpty() && topologyGroups != null) { for (String groupId : template.getGroups()) { NodeGroup nodeGroup = topologyGroups.get(groupId); if (nodeGroup != null && nodeGroup.getMembers() != null) { boolean removed = nodeGroup.getMembers().remove(nodeName); if (removed && newName != null) { nodeGroup.getMembers().add(newName); } } } } }
if (topology.getGroups() != null) { Set<String> nodeGroups = Sets.newHashSet(); for (Map.Entry<String, NodeGroup> groupEntry : topology.getGroups().entrySet()) { if (groupEntry.getValue().getMembers() != null && groupEntry.getValue().getMembers().contains(templateEntry.getKey())) { nodeGroups.add(groupEntry.getKey());
if (topology.getGroups() == null) { throw new NotFoundException("Group with name [" + operation.getGroupName() + "] does not exists and cannot be renamed."); if (topology.getGroups().containsKey(operation.getNewGroupName())) { throw new AlreadyExistException("Group with name [" + operation.getNewGroupName() + "] already exists, please choose another name"); NodeGroup nodeGroup = topology.getGroups().remove(operation.getGroupName()); if (nodeGroup == null) { throw new NotFoundException("Group with name [" + operation.getGroupName() + "] does not exists and cannot be renamed."); topology.getGroups().put(operation.getNewGroupName(), nodeGroup);
@Override protected void processNodeOperation(Csar csar, Topology topology, RemoveGroupMemberOperation operation, NodeTemplate nodeTemplate) { NodeGroup nodeGroup = topology.getGroups().get(operation.getGroupName()); if (nodeGroup != null && nodeGroup.getMembers() != null) { boolean removed = nodeGroup.getMembers().remove(operation.getNodeName()); if (!removed) { throw new NotFoundException("Node <" + operation.getNodeName() + "> is not part of group <" + operation.getGroupName() + ">."); } } if (nodeTemplate != null && nodeTemplate.getGroups() != null) { nodeTemplate.getGroups().remove(operation.getGroupName()); } } }
@Override protected void processNodeOperation(Csar csar, Topology topology, AddGroupMemberOperation operation, NodeTemplate nodeTemplate) { Map<String, NodeGroup> groups = topology.getGroups(); if (groups == null) { groups = Maps.newHashMap();
for (NodeGroup nodeGroup : safe(instance.getGroups()).values()) { nodeGroup.setIndex(groupIndex++); groupPostProcessor.process(nodeGroup);
@Then("^The RestResponse should not contain any group$") public void The_RestResponse_should_not_contain_any_group() throws Throwable { String topologyResponseText = Context.getInstance().getRestResponse(); RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper()); Map<String, NodeGroup> groups = topologyResponse.getData().getTopology().getGroups(); Assert.assertTrue(groups == null || groups.isEmpty()); }
@And("^The RestResponse should contain a group named \"([^\"]*)\" whose members are \"([^\"]*)\" and policy is \"([^\"]*)\"$") public void The_RestResponse_should_contain_a_group_named_whose_members_are_and_policy_is(String groupName, String members, String policy) throws Throwable { String topologyResponseText = Context.getInstance().getRestResponse(); RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper()); Assert.assertNotNull(topologyResponse.getData().getTopology().getGroups()); NodeGroup nodeGroup = topologyResponse.getData().getTopology().getGroups().get(groupName); Set<String> expectedMembers = Sets.newHashSet(members.split(",")); Assert.assertNotNull(nodeGroup); Assert.assertEquals(nodeGroup.getMembers(), expectedMembers); Assert.assertEquals(nodeGroup.getPolicies().iterator().next().getType(), policy); for (String expectedMember : expectedMembers) { NodeTemplate nodeTemplate = topologyResponse.getData().getTopology().getNodeTemplates().get(expectedMember); Assert.assertNotNull(nodeTemplate); Assert.assertTrue(nodeTemplate.getGroups().contains(groupName)); } }