static void writeFeatureGroupSpecBody(final ElementNode configE, ConfigItemContainer featureGroup, String ns) { if(!featureGroup.hasItems()) { return; } String currentOrigin = null; ElementNode parent = configE; for(ConfigItem item : featureGroup.getItems()) { final String itemOrigin = item.getOrigin(); if(itemOrigin != null) { if (!itemOrigin.equals(currentOrigin)) { parent = addElement(configE, Element.ORIGIN.getLocalName(), ns); addAttribute(parent, Attribute.NAME, itemOrigin); currentOrigin = itemOrigin; } } else if(currentOrigin != null) { currentOrigin = null; parent = configE; } if(item.isGroup()) { writeFeatureGroupDependency(parent, (FeatureGroup) item, ns); } else { addFeatureConfig(parent, (FeatureConfig) item, ns); } } }
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); } }