public FeaturePackBuilder addFeatureGroup(FeatureGroup featureGroup) throws ProvisioningDescriptionException { if (featureGroups.isEmpty()) { featureGroups = new HashMap<>(); } if (featureGroups.put(featureGroup.getName(), featureGroup) != null) { throw new ProvisioningDescriptionException("Feature-pack " + fpBuilder.getFPID() + ": duplicate feature-group name " + featureGroup.getName()); } return this; }
FeatureGroup getFeatureGroupSpec(String name) throws ProvisioningException { if(fgSpecs != null) { final FeatureGroup fgSpec = fgSpecs.get(name); if(fgSpec != null) { return fgSpec; } } final Path specXml = dir.resolve(Constants.FEATURE_GROUPS).resolve(name + ".xml"); if (!Files.exists(specXml)) { return null; } try (BufferedReader reader = Files.newBufferedReader(specXml)) { final FeatureGroup fgSpec = FeatureGroupXmlParser.getInstance().parse(reader); if(!fgSpec.getName().equals(name)) { throw new ProvisioningDescriptionException("Feature-pack " + getFPID() + " feature group " + fgSpec.getName() + " does not match the requested feature group name " + name); } if (fgSpecs == null) { fgSpecs = new HashMap<>(); } fgSpecs.put(name, fgSpec); return fgSpec; } catch (Exception e) { throw new ProvisioningException(Errors.parseXml(specXml), e); } }
protected ElementNode toElement(FeatureGroup featureGroup, String ns) { final ElementNode fgE = addElement(null, Element.FEATURE_GROUP_SPEC.getLocalName(), ns); if(featureGroup.getName() != null) { addAttribute(fgE, Attribute.NAME, featureGroup.getName()); } //addFeatureGroupIncludeExclude(featureGroup, ns, fgE); writeFeatureGroupSpecBody(fgE, featureGroup, ns); if(featureGroup.hasPackageDeps()) { PackageXmlWriter.writePackageDeps(featureGroup, addElement(fgE, Element.PACKAGES.getLocalName(), ns)); } return fgE; }
final FeatureGroupXmlWriter fgWriter = FeatureGroupXmlWriter.getInstance(); for(FeatureGroup fg : featureGroups.values()) { fgWriter.write(fg, fgsDir.resolve(fg.getName() + ".xml"));
private void processConfigItemContainer(ConfigItemContainer ciContainer) throws ProvisioningException { if(!ciContainer.hasItems()) { return; } final FeaturePackRuntimeBuilder prevFpOrigin = ciContainer.isResetFeaturePackOrigin() ? setThisOrigin(currentOrigin) : null; for (ConfigItem item : ciContainer.getItems()) { final FeaturePackRuntimeBuilder originalFp = setOrigin(item.getOrigin()); try { if (item.isGroup()) { processFeatureGroup((FeatureGroup) item); } else { resolveFeature(configStack, (FeatureConfig) item); } } catch (ProvisioningException e) { if (currentOrigin == null) { throw e; } throw new ProvisioningException( item.isGroup() ? Errors.failedToProcess(currentOrigin.producer.getLocation().getFPID(), ((FeatureGroup) item).getName()) : Errors.failedToProcess(currentOrigin.producer.getLocation().getFPID(), (FeatureConfig) item), e); } finally { setOrigin(originalFp); } } if(prevFpOrigin != null) { setThisOrigin(prevFpOrigin); } }