*/
package org.opendaylight.controller.configpusherfeature.internal;
+import com.google.common.base.Optional;
+import com.google.common.collect.Sets;
+import java.util.Set;
+import org.apache.karaf.features.Feature;
import org.apache.karaf.features.FeaturesListener;
import org.apache.karaf.features.FeaturesService;
import org.opendaylight.controller.config.persist.api.ConfigPusher;
+import org.opendaylight.controller.config.persist.storage.file.xml.FeatureListProvider;
+import org.opendaylight.controller.config.persist.storage.file.xml.XmlFileStorageAdapter;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
public class FeatureServiceCustomizer implements ServiceTrackerCustomizer<FeaturesService, FeaturesService>, AutoCloseable {
private ConfigPusher configPusher = null;
- private ConfigFeaturesListener configFeaturesListener = null;
private ServiceRegistration<?> registration;
FeatureServiceCustomizer(ConfigPusher c) {
configPusher = c;
}
-
@Override
public FeaturesService addingService(ServiceReference<FeaturesService> reference) {
BundleContext bc = reference.getBundle().getBundleContext();
- FeaturesService featureService = bc.getService(reference);
- configFeaturesListener = new ConfigFeaturesListener(configPusher,featureService);
+ final FeaturesService featureService = bc.getService(reference);
+ final Optional<XmlFileStorageAdapter> currentPersister = XmlFileStorageAdapter.getInstance();
+
+ if(XmlFileStorageAdapter.getInstance().isPresent()) {
+ final Set<String> installedFeatureIds = Sets.newHashSet();
+ for (final Feature installedFeature : featureService.listInstalledFeatures()) {
+ installedFeatureIds.add(installedFeature.getId());
+ }
+
+ currentPersister.get().setFeaturesService(new FeatureListProvider() {
+ @Override
+ public Set<String> listFeatures() {
+ return installedFeatureIds;
+ }
+ });
+ }
+ ConfigFeaturesListener configFeaturesListener = new ConfigFeaturesListener(configPusher, featureService);
registration = bc.registerService(FeaturesListener.class.getCanonicalName(), configFeaturesListener, null);
return featureService;
}
public void modifiedService(ServiceReference<FeaturesService> reference,
FeaturesService service) {
// we don't care if the properties change
-
}
@Override
registration = null;
}
}
-
}