/** * 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); } } } } }
@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()); } } } }
@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 public void process(NodeGroup instance) { final ArchiveRoot archiveRoot = (ArchiveRoot) ParsingContextExecution.getRoot().getWrappedInstance(); // ensure that member groups exists and add the group to the nodes. Iterator<String> groupMembers = instance.getMembers().iterator(); while (groupMembers.hasNext()) { String nodeTemplateId = groupMembers.next(); NodeTemplate nodeTemplate = archiveRoot.getTopology().getNodeTemplates().get(nodeTemplateId); if (nodeTemplate == null) { Node node = ParsingContextExecution.getObjectToNodeMap().get(instance); // add an error to the context ParsingContextExecution.getParsingErrors().add(new ParsingError(ParsingErrorLevel.WARNING, ErrorCode.UNKOWN_GROUP_MEMBER, null, node.getStartMark(), null, node.getEndMark(), nodeTemplateId)); // and remove the member groupMembers.remove(); } else { Set<String> groups = nodeTemplate.getGroups(); if (groups == null) { groups = Sets.newHashSet(); nodeTemplate.setGroups(groups); } groups.add(instance.getName()); } } } }
Map<String, NodeTemplate> nodeTemplates = TopologyUtils.getNodeTemplates(topology); for (NodeTemplate nodeTemplate : nodeTemplates.values()) { if (nodeTemplate.getGroups() != null) { if (nodeTemplate.getGroups().remove(operation.getGroupName())) { nodeTemplate.getGroups().add(operation.getNewGroupName());
@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)); } }