+ /**
+ * @param substitutionMappings
+ * @param vfModuleInvariantUuid
+ * @return all serviceNode child Node Templates which are members of the first VF Module Group
+ */
+ private List<NodeTemplate> getVfModuleMembers(SubstitutionMappings substitutionMappings,
+ String vfModuleInvariantUuid) {
+ return Optional.ofNullable(substitutionMappings.getGroups()) //
+ .map(groups -> groups.stream() //
+ .filter(filterByVfModuleInvariantUuid(vfModuleInvariantUuid)) //
+ .findFirst().map(module -> Optional.ofNullable(module.getMembers()).orElse(new ArrayList<>()))
+ .orElse(new ArrayList<>()))
+ .map(members -> substitutionMappings.getNodeTemplates().stream()
+ .filter(nt -> members.contains(nt.getName())) //
+ .collect(Collectors.toList()))
+ .orElse(Collections.emptyList());
+ }
+
+ private Predicate<? super Group> filterByVfModuleInvariantUuid(String vfModuleInvariantUuid) {
+ return nt -> (nt.getMetadata() != null && vfModuleInvariantUuid
+ .equals(nt.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)));
+ }
+
+ /**
+ * @param groupModel
+ * @param members
+ * @throws XmlArtifactGenerationException
+ * if the configured widget mappings do not support the widget type of a member
+ */