- // Get names of the members of the service group
- List<NodeTemplate> members = csarHelper.getMembersOfVfModule(serviceNode, groupDefinition);
- if (members != null && !members.isEmpty()) {
- List<String> memberNames = members.stream().map(NodeTemplate::getName).collect(Collectors.toList());
- groupModel.setMembers(memberNames);
- for (NodeTemplate member : members) {
- processGroupMembers(groupModel, member);
+ for (NodeTemplate resourceNodeTemplate : resourceNodeTemplates) {
+ String nodeTypeName = normaliseNodeTypeName(resourceNodeTemplate);
+ Metadata metaData = resourceNodeTemplate.getMetaData();
+ String metaDataType = Optional.ofNullable(metaData).map(m -> m.getValue("type")).orElse(nodeTypeName);
+ Model resourceNode = Model.getModelFor(nodeTypeName, metaDataType);
+ foundProvidingService |=
+ processModel(resourceModel, metaData, resourceNode, resourceNodeTemplate.getProperties());
+ }
+
+ if (resourceModel instanceof AllotedResource && !foundProvidingService) {
+ final String modelInvariantId = resourceModel.getModelId();
+ throw new IllegalArgumentException(String.format(GENERATOR_AAI_PROVIDING_SERVICE_MISSING,
+ modelInvariantId == null ? "<null ID>" : modelInvariantId));
+ }
+ }
+
+ /**
+ * Create an Instance Group Model and populate it with the supplied data.
+ *
+ * @param resourceModel
+ * the Resource node template Model
+ * @param memberNodes
+ * the Resources and Widgets belonging to the Group
+ * @param metaProperties
+ * the metadata of the Group
+ * @param properties
+ * the properties of the Group
+ * @return the Instance Group and Member resource models
+ */
+ private List<Resource> processInstanceGroup(Model resourceModel, ArrayList<NodeTemplate> memberNodes,
+ Map<String, String> metaProperties, Map<String, Property> properties) {
+ Resource groupModel = createInstanceGroupModel(mergeProperties(metaProperties, properties));
+ resourceModel.addResource(groupModel);
+ List<Resource> resources = Stream.of(groupModel).collect(Collectors.toList());
+
+ if (memberNodes != null && !memberNodes.isEmpty()) {
+ resources.addAll(generateResourcesAndWidgets(memberNodes, groupModel));
+ }
+
+ return resources;
+ }
+
+ /**
+ * @param memberNodes
+ * @param groupModel
+ * @return
+ */
+ private List<Resource> generateResourcesAndWidgets(final ArrayList<NodeTemplate> memberNodes,
+ final Resource groupModel) {
+ List<Resource> resources = new ArrayList<>();
+ for (NodeTemplate nodeTemplate : memberNodes) {
+ String nodeTypeName = normaliseNodeTypeName(nodeTemplate);
+ Model memberModel = Model.getModelFor(nodeTypeName, nodeTemplate.getMetaData().getValue("type"));
+ memberModel.populateModelIdentificationInformation(nodeTemplate.getMetaData().getAllProperties());
+
+ log.debug(String.format("Generating grouped %s (%s) from TOSCA type %s",
+ memberModel.getClass().getSuperclass().getSimpleName(), memberModel.getClass(), nodeTypeName));
+
+ addRelatedModel(groupModel, memberModel);
+ if (memberModel instanceof Resource) {
+ resources.add((Resource) memberModel);