OpenDaylight Controller functional modules.
[controller.git] / opendaylight / configuration / implementation / src / main / java / org / opendaylight / controller / configuration / internal / ConfigurationContainerImpl.java
1
2 /*
3  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
4  *
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7  * and is available at http://www.eclipse.org/legal/epl-v10.html
8  */
9
10 package org.opendaylight.controller.configuration.internal;
11
12 import java.util.Collections;
13 import java.util.HashSet;
14 import java.util.Set;
15
16 import org.opendaylight.controller.clustering.services.IClusterGlobalServices;
17 import org.opendaylight.controller.configuration.IConfigurationAware;
18 import org.opendaylight.controller.configuration.IConfigurationContainerAware;
19 import org.opendaylight.controller.configuration.IConfigurationContainerService;
20 import org.opendaylight.controller.sal.utils.StatusCode;
21 import org.opendaylight.controller.sal.utils.Status;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 /**
26  * @file   ConfigurationImpl.java
27  *
28  * @brief  Backend functionality for all Configuration related tasks.
29  *
30  *
31  */
32
33 public class ConfigurationContainerImpl implements
34         IConfigurationContainerService, IConfigurationAware {
35     private static final Logger logger = LoggerFactory
36             .getLogger(ConfigurationContainerImpl.class);
37     private IClusterGlobalServices clusterServices;
38     /*
39      * Collection containing the configuration objects.
40      * This is configuration world: container names (also the map key)
41      * are maintained as they were configured by user, same case
42      */
43     private Set<IConfigurationContainerAware> configurationAwareList = (Set<IConfigurationContainerAware>) Collections
44             .synchronizedSet(new HashSet<IConfigurationContainerAware>());
45
46     public void addConfigurationContainerAware(
47             IConfigurationContainerAware configurationAware) {
48         if (!this.configurationAwareList.contains(configurationAware)) {
49             this.configurationAwareList.add(configurationAware);
50         }
51     }
52
53     public int getConfigurationAwareListSize() {
54         return this.configurationAwareList.size();
55     }
56     
57     public void removeConfigurationContainerAware(
58             IConfigurationContainerAware configurationAware) {
59         this.configurationAwareList.remove(configurationAware);
60     }
61
62     public void setClusterServices(IClusterGlobalServices i) {
63         this.clusterServices = i;
64         logger.debug("IClusterServices set");
65     }
66
67     public void unsetClusterServices(IClusterGlobalServices i) {
68         if (this.clusterServices == i) {
69             this.clusterServices = null;
70             logger.debug("IClusterServices Unset");
71         }
72     }
73
74     public void init() {
75     }
76
77     public void destroy() {
78         // Clear local states
79         this.configurationAwareList.clear();
80     }
81
82     @Override
83     public Status saveConfiguration() {
84         boolean success = true;
85         for (IConfigurationContainerAware configurationAware : configurationAwareList) {
86             logger.info("Save Config triggered for "
87                     + configurationAware.getClass().getSimpleName());
88
89             Status status = configurationAware.saveConfiguration();
90             if (!status.isSuccess()) {
91                 success = false;
92                 logger.info("Failed to save config for "
93                                 + configurationAware.getClass().getSimpleName());
94             }
95         }
96         if (success) {
97             return new Status(StatusCode.SUCCESS, null);
98         } else {
99             return new Status(StatusCode.INTERNALERROR,
100                         "Failed to Save All Configurations");
101         }
102     }
103
104     @Override
105     public Status saveConfigurations() {
106         return saveConfiguration();
107     }
108 }