X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-persister-feature4-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfigpusherfeature%2Finternal%2FFeatureServiceCustomizer.java;fp=opendaylight%2Fconfig%2Fconfig-persister-feature4-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfigpusherfeature%2Finternal%2FFeatureServiceCustomizer.java;h=0b3493c7d3e38ac59f70f3b5d244269037eb12f3;hp=0000000000000000000000000000000000000000;hb=3354f45e32faaab5452f95f9931274a3580de912;hpb=d9688431165f3ceaec76b18acc18af61d7e12593 diff --git a/opendaylight/config/config-persister-feature4-adapter/src/main/java/org/opendaylight/controller/configpusherfeature/internal/FeatureServiceCustomizer.java b/opendaylight/config/config-persister-feature4-adapter/src/main/java/org/opendaylight/controller/configpusherfeature/internal/FeatureServiceCustomizer.java new file mode 100644 index 0000000000..0b3493c7d3 --- /dev/null +++ b/opendaylight/config/config-persister-feature4-adapter/src/main/java/org/opendaylight/controller/configpusherfeature/internal/FeatureServiceCustomizer.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +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; +import org.osgi.util.tracker.ServiceTrackerCustomizer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FeatureServiceCustomizer implements ServiceTrackerCustomizer, AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(FeatureServiceCustomizer.class); + private ConfigPusher configPusher = null; + private ServiceRegistration registration; + + FeatureServiceCustomizer(ConfigPusher c) { + configPusher = c; + } + + @Override + public FeaturesService addingService(ServiceReference reference) { + BundleContext bc = reference.getBundle().getBundleContext(); + final FeaturesService featureService = bc.getService(reference); + final Optional currentPersister = XmlFileStorageAdapter.getInstance(); + + if (XmlFileStorageAdapter.getInstance().isPresent()) { + final Set installedFeatureIds = Sets.newHashSet(); + try { + for (final Feature installedFeature : featureService.listInstalledFeatures()) { + installedFeatureIds.add(installedFeature.getId()); + } + } catch (Exception e) { + LOG.error("Error listing installed features", e); + } + + currentPersister.get().setFeaturesService(new FeatureListProvider() { + @Override + public Set listFeatures() { + return installedFeatureIds; + } + }); + } + ConfigFeaturesListener configFeaturesListener = new ConfigFeaturesListener(configPusher, featureService); + registration = bc.registerService(FeaturesListener.class.getCanonicalName(), configFeaturesListener, null); + return featureService; + } + + @Override + public void modifiedService(ServiceReference reference, + FeaturesService service) { + // we don't care if the properties change + } + + @Override + public void removedService(ServiceReference reference, + FeaturesService service) { + close(); + } + + @Override + public void close() { + if (registration != null) { + registration.unregister(); + registration = null; + } + } +}