Merge "Fixed possible NPE in TopologyManager FlowCapableTopologyExporter"
[controller.git] / opendaylight / configuration / implementation / src / main / java / org / opendaylight / controller / configuration / internal / ConfigurationService.java
index 4c0f3a2da5f08b409e6c751e9e8828359ce7e850..de7621110e21637b93d1b3531fbe579470b2e6f1 100644 (file)
@@ -44,13 +44,13 @@ import org.slf4j.LoggerFactory;
  *
  */
 
-public class ConfigurationService implements IConfigurationService, ICacheUpdateAware<ConfigurationEvent, String> {
+public class ConfigurationService implements IConfigurationService, ICacheUpdateAware<String, String> {
     private static final Logger logger = LoggerFactory
             .getLogger(ConfigurationService.class);
     public static final String SAVE_EVENT_CACHE = "config.event.save";
     private static final String ROOT = GlobalConstants.STARTUPHOME.toString();
     private IClusterGlobalServices clusterServices;
-    private ConcurrentMap <ConfigurationEvent, String> configEvent;
+    private ConcurrentMap<String, String> configEvent;
     private Set<IConfigurationAware> configurationAwareList = Collections
             .synchronizedSet(new HashSet<IConfigurationAware>());
     private ObjectReader objReader;
@@ -85,6 +85,9 @@ public class ConfigurationService implements IConfigurationService, ICacheUpdate
 
     public void init() {
         logger.info("ConfigurationService Manager init");
+
+        // Create the default startup directory, so that container unaware apps can initiate save
+        createContainerDirectory(ROOT + GlobalConstants.DEFAULT.toString());
     }
 
     public void start() {
@@ -102,7 +105,7 @@ public class ConfigurationService implements IConfigurationService, ICacheUpdate
     @Override
     public Status saveConfigurations() {
         if (configEvent != null) {
-            configEvent.put(ConfigurationEvent.SAVE, "");
+            configEvent.put(ConfigurationEvent.SAVE.toString(), "");
         }
         return saveConfigurationsInternal();
     }
@@ -112,7 +115,7 @@ public class ConfigurationService implements IConfigurationService, ICacheUpdate
         List<String> containerList = new ArrayList<String>();
         for (IConfigurationAware configurationAware : this.configurationAwareList) {
             if (configurationAware instanceof IConfigurationContainerService) {
-                String containerFilePath = ((ContainerConfigurationService)configurationAware).getConfigurationRoot();
+                String containerFilePath = ((IConfigurationContainerService)configurationAware).getConfigurationRoot();
                 containerList.add(containerFilePath);
             }
         }
@@ -120,12 +123,21 @@ public class ConfigurationService implements IConfigurationService, ICacheUpdate
     }
 
     private void createContainerDirectory(IConfigurationAware configurationAware) {
-        String containerFilePath = ((ContainerConfigurationService) configurationAware).getConfigurationRoot();
-        if (!new File(containerFilePath).exists()) {
-            boolean created = new File(containerFilePath).mkdir();
-            if (!created) {
-               logger.error("Failed to create startup config directory: {}", containerFilePath);
+        String containerFilePath = ((IConfigurationContainerService) configurationAware).getConfigurationRoot();
+        createContainerDirectory(containerFilePath);
+    }
+
+    private void createContainerDirectory(String containerFilePath) {
+
+        try {
+            if (!new File(containerFilePath).exists()) {
+                boolean created = new File(containerFilePath).mkdir();
+                if (!created) {
+                    logger.error("Failed to create config directory: {}", containerFilePath);
+                }
             }
+        } catch (Exception e) {
+            logger.error("Failed to create config directory: {} ({})", containerFilePath, e.getMessage());
         }
     }
 
@@ -171,7 +183,7 @@ public class ConfigurationService implements IConfigurationService, ICacheUpdate
     }
 
     @Override
-    public void entryCreated(ConfigurationEvent key, String cacheName,
+    public void entryCreated(String key, String cacheName,
             boolean originLocal) {
         if (originLocal) {
             return;
@@ -179,18 +191,18 @@ public class ConfigurationService implements IConfigurationService, ICacheUpdate
     }
 
     @Override
-    public void entryUpdated(ConfigurationEvent key, String new_value,
+    public void entryUpdated(String key, String new_value,
             String cacheName, boolean originLocal) {
         if (originLocal) {
             return;
         }
-        if (key == ConfigurationEvent.SAVE) {
+        if (key.equals(ConfigurationEvent.SAVE.toString())) {
             saveConfigurationsInternal();
         }
     }
 
     @Override
-    public void entryDeleted(ConfigurationEvent key, String cacheName,
+    public void entryDeleted(String key, String cacheName,
             boolean originLocal) {
         if (originLocal) {
             return;
@@ -218,7 +230,7 @@ public class ConfigurationService implements IConfigurationService, ICacheUpdate
             logger.error("uninitialized clusterServices, can't retrieve cache");
             return;
         }
-        configEvent = (ConcurrentMap<ConfigurationEvent, String>) this.clusterServices.getCache(SAVE_EVENT_CACHE);
+        configEvent = (ConcurrentMap<String, String>) this.clusterServices.getCache(SAVE_EVENT_CACHE);
         if (configEvent == null) {
             logger.error("Failed to retrieve configuration Cache");
         }