X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetworkconfiguration%2Fneutron%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetworkconfig%2Fneutron%2Fimplementation%2FNeutronRouterInterface.java;h=4e19d36fe0caa5978bdfbaed7b1ed02e4058892b;hp=0e64dc5a098284640bb9d242a68e3649e100cf5e;hb=405ea7ce68d22bd3d2501857c5253793b581b086;hpb=d542617f3486541cf9937009fb6aa1e3f2c9f0e2 diff --git a/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronRouterInterface.java b/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronRouterInterface.java index 0e64dc5a09..4e19d36fe0 100644 --- a/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronRouterInterface.java +++ b/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/NeutronRouterInterface.java @@ -8,14 +8,17 @@ package org.opendaylight.controller.networkconfig.neutron.implementation; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.ObjectInputStream; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Dictionary; import java.util.EnumSet; import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.ConcurrentMap; import org.apache.felix.dm.Component; @@ -23,16 +26,24 @@ import org.opendaylight.controller.clustering.services.CacheConfigException; import org.opendaylight.controller.clustering.services.CacheExistException; import org.opendaylight.controller.clustering.services.IClusterContainerServices; import org.opendaylight.controller.clustering.services.IClusterServices; +import org.opendaylight.controller.configuration.ConfigurationObject; +import org.opendaylight.controller.configuration.IConfigurationContainerAware; +import org.opendaylight.controller.configuration.IConfigurationContainerService; import org.opendaylight.controller.networkconfig.neutron.INeutronRouterCRUD; import org.opendaylight.controller.networkconfig.neutron.NeutronRouter; +import org.opendaylight.controller.sal.utils.IObjectReader; +import org.opendaylight.controller.sal.utils.Status; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class NeutronRouterInterface implements INeutronRouterCRUD { +public class NeutronRouterInterface implements INeutronRouterCRUD, IConfigurationContainerAware, + IObjectReader { private static final Logger logger = LoggerFactory.getLogger(NeutronRouterInterface.class); + private static final String FILE_NAME ="neutron.router.conf"; private String containerName = null; private IClusterContainerServices clusterContainerService = null; + private IConfigurationContainerService configurationService; private ConcurrentMap routerDB; // methods needed for creating caches @@ -48,7 +59,16 @@ public class NeutronRouterInterface implements INeutronRouterCRUD { } } - @SuppressWarnings("deprecation") + public void setConfigurationContainerService(IConfigurationContainerService service) { + logger.trace("Configuration service set: {}", service); + this.configurationService = service; + } + + public void unsetConfigurationContainerService(IConfigurationContainerService service) { + logger.trace("Configuration service removed: {}", service); + this.configurationService = null; + } + private void allocateCache() { if (this.clusterContainerService == null) { logger.error("un-initialized clusterContainerService, can't create cache"); @@ -67,7 +87,7 @@ public class NeutronRouterInterface implements INeutronRouterCRUD { logger.debug("Cache successfully created for Neutron Routers"); } - @SuppressWarnings({ "unchecked", "deprecation" }) + @SuppressWarnings({ "unchecked" }) private void retrieveCache() { if (this.clusterContainerService == null) { logger.error("un-initialized clusterContainerService, can't retrieve cache"); @@ -83,7 +103,6 @@ public class NeutronRouterInterface implements INeutronRouterCRUD { logger.debug("Cache was successfully retrieved for Neutron Routers"); } - @SuppressWarnings("deprecation") private void destroyCache() { if (this.clusterContainerService == null) { logger.error("un-initialized clusterMger, can't destroy cache"); @@ -96,6 +115,7 @@ public class NeutronRouterInterface implements INeutronRouterCRUD { private void startUp() { allocateCache(); retrieveCache(); + loadConfiguration(); } /** @@ -172,16 +192,20 @@ public class NeutronRouterInterface implements INeutronRouterCRUD { // IfNBRouterCRUD Interface methods + @Override public boolean routerExists(String uuid) { return routerDB.containsKey(uuid); } + @Override public NeutronRouter getRouter(String uuid) { - if (!routerExists(uuid)) + if (!routerExists(uuid)) { return null; + } return routerDB.get(uuid); } + @Override public List getAllRouters() { Set allRouters = new HashSet(); for (Entry entry : routerDB.entrySet()) { @@ -194,31 +218,58 @@ public class NeutronRouterInterface implements INeutronRouterCRUD { return ans; } + @Override public boolean addRouter(NeutronRouter input) { - if (routerExists(input.getID())) + if (routerExists(input.getID())) { return false; + } routerDB.putIfAbsent(input.getID(), input); return true; } + @Override public boolean removeRouter(String uuid) { - if (!routerExists(uuid)) + if (!routerExists(uuid)) { return false; + } routerDB.remove(uuid); return true; } + @Override public boolean updateRouter(String uuid, NeutronRouter delta) { - if (!routerExists(uuid)) + if (!routerExists(uuid)) { return false; + } NeutronRouter target = routerDB.get(uuid); return overwrite(target, delta); } + @Override public boolean routerInUse(String routerUUID) { - if (!routerExists(routerUUID)) + if (!routerExists(routerUUID)) { return true; + } NeutronRouter target = routerDB.get(routerUUID); return (target.getInterfaces().size() > 0); } + + private void loadConfiguration() { + for (ConfigurationObject conf : configurationService.retrieveConfiguration(this, FILE_NAME)) { + NeutronRouter nr = (NeutronRouter) conf; + routerDB.put(nr.getID(), nr); + } + } + + @Override + public Status saveConfiguration() { + return configurationService.persistConfiguration(new ArrayList(routerDB.values()), + FILE_NAME); + } + + @Override + public Object readObject(ObjectInputStream ois) throws FileNotFoundException, IOException, ClassNotFoundException { + return ois.readObject(); + } + }