*/
package org.opendaylight.controller.configpusherfeature.internal;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
import java.util.LinkedHashSet;
import java.util.List;
-
-import javax.xml.bind.JAXBException;
-
import org.apache.felix.utils.version.VersionRange;
import org.apache.felix.utils.version.VersionTable;
import org.apache.karaf.features.Dependency;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Preconditions;
-
/*
* Wrap a Feature for the purposes of extracting the FeatureConfigSnapshotHolders from
* its underlying ConfigFileInfo's and those of its children recursively
* Delegates the the contained feature and provides additional methods.
*/
public class ChildAwareFeatureWrapper extends AbstractFeatureWrapper implements Feature {
- private static final Logger LOGGER = LoggerFactory.getLogger(ChildAwareFeatureWrapper.class);
+ private static final Logger LOG = LoggerFactory.getLogger(ChildAwareFeatureWrapper.class);
private FeaturesService featuresService= null;
protected ChildAwareFeatureWrapper(Feature f) {
*/
public LinkedHashSet <? extends ChildAwareFeatureWrapper> getChildFeatures() throws Exception {
List<Dependency> dependencies = feature.getDependencies();
- LinkedHashSet <ChildAwareFeatureWrapper> childFeatures = new LinkedHashSet<ChildAwareFeatureWrapper>();
+ LinkedHashSet <ChildAwareFeatureWrapper> childFeatures = new LinkedHashSet<>();
if(dependencies != null) {
for(Dependency dependency: dependencies) {
Feature fi = extractFeatureFromDependency(dependency);
- if(fi != null){
- ChildAwareFeatureWrapper wrappedFeature = new ChildAwareFeatureWrapper(fi,featuresService);
- childFeatures.add(wrappedFeature);
+ if(fi != null) {
+ if(featuresService.getFeature(fi.getName(), fi.getVersion()) == null) {
+ LOG.warn("Feature: {}, {} is missing from features service. Skipping", fi.getName(), fi.getVersion());
+ } else {
+ ChildAwareFeatureWrapper wrappedFeature = new ChildAwareFeatureWrapper(fi,featuresService);
+ childFeatures.add(wrappedFeature);
+ }
}
}
}
return childFeatures;
}
+ @Override
public LinkedHashSet<FeatureConfigSnapshotHolder> getFeatureConfigSnapshotHolders() throws Exception {
- LinkedHashSet <FeatureConfigSnapshotHolder> snapShotHolders = new LinkedHashSet<FeatureConfigSnapshotHolder>();
+ LinkedHashSet <FeatureConfigSnapshotHolder> snapShotHolders = new LinkedHashSet<>();
for(ChildAwareFeatureWrapper c: getChildFeatures()) {
for(FeatureConfigSnapshotHolder h: c.getFeatureConfigSnapshotHolders()) {
- FeatureConfigSnapshotHolder f;
- try {
- f = new FeatureConfigSnapshotHolder(h,this);
- snapShotHolders.add(f);
- } catch (JAXBException e) {
- LOGGER.debug("{} is not a config subsystem config file",h.getFileInfo().getFinalname());
+ final Optional<FeatureConfigSnapshotHolder> featureConfigSnapshotHolder = getFeatureConfigSnapshotHolder(h.getFileInfo());
+ if(featureConfigSnapshotHolder.isPresent()) {
+ snapShotHolders.add(featureConfigSnapshotHolder.get());
}
}
}
Version v = VersionTable.getVersion(f.getVersion());
if (range.contains(v) &&
(fi == null || VersionTable.getVersion(fi.getVersion()).compareTo(v) < 0)) {
- fi = f;
- break;
+ fi = f;
+ break;
}
}
}