2 * Copyright Tata Consultancy Services, 2015. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.neutron.transcriber;
11 import java.lang.reflect.Method;
12 import java.util.ArrayList;
13 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Map.Entry;
17 import java.util.concurrent.ConcurrentHashMap;
18 import java.util.concurrent.ConcurrentMap;
20 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
21 import org.opendaylight.neutron.spi.INeutronVPNServiceCRUD;
22 import org.opendaylight.neutron.spi.NeutronVPNService;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.VpnServices;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.vpn.services.VpnService;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.vpn.services.VpnServiceBuilder;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
30 public class NeutronVPNServiceInterface extends AbstractNeutronInterface<VpnService,NeutronVPNService> implements INeutronVPNServiceCRUD {
31 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronVPNServiceInterface.class);
32 private ConcurrentMap<String, NeutronVPNService> VPNServiceDB = new ConcurrentHashMap<String, NeutronVPNService>();
35 NeutronVPNServiceInterface(ProviderContext providerContext) {
36 super(providerContext);
39 // this method uses reflection to update an object from it's delta.
41 private boolean overwrite(Object target, Object delta) {
42 Method[] methods = target.getClass().getMethods();
44 for (Method toMethod : methods) {
45 if (toMethod.getDeclaringClass().equals(target.getClass()) && toMethod.getName().startsWith("set")) {
47 String toName = toMethod.getName();
48 String fromName = toName.replace("set", "get");
51 Method fromMethod = delta.getClass().getMethod(fromName);
52 Object value = fromMethod.invoke(delta, (Object[]) null);
54 toMethod.invoke(target, value);
56 } catch (Exception e) {
57 LOGGER.error(e.getMessage());
66 public boolean neutronVPNServiceExists(String uuid) {
67 return VPNServiceDB.containsKey(uuid);
71 public NeutronVPNService getVPNService(String uuid) {
72 if (!neutronVPNServiceExists(uuid)) {
73 LOGGER.debug("No VPNService Have Been Defined");
76 return VPNServiceDB.get(uuid);
80 public List<NeutronVPNService> getAllVPNService() {
81 Set<NeutronVPNService> allVPNService = new HashSet<NeutronVPNService>();
82 for (Entry<String, NeutronVPNService> entry : VPNServiceDB.entrySet()) {
83 NeutronVPNService VPNService = entry.getValue();
84 allVPNService.add(VPNService);
86 LOGGER.debug("Exiting getVPNService, Found {} OpenStackVPNService", allVPNService.size());
87 List<NeutronVPNService> ans = new ArrayList<NeutronVPNService>();
88 ans.addAll(allVPNService);
93 public boolean addVPNService(NeutronVPNService input) {
94 if (neutronVPNServiceExists(input.getID())) {
97 VPNServiceDB.putIfAbsent(input.getID(), input);
103 public boolean removeVPNService(String uuid) {
104 if (!neutronVPNServiceExists(uuid)) {
107 VPNServiceDB.remove(uuid);
108 removeMd(toMd(uuid));
113 public boolean updateVPNService(String uuid, NeutronVPNService delta) {
114 if (!neutronVPNServiceExists(uuid)) {
117 NeutronVPNService target = VPNServiceDB.get(uuid);
118 boolean rc = overwrite(target, delta);
120 updateMd(VPNServiceDB.get(uuid));
126 public boolean neutronVPNServiceInUse(String uuid) {
127 return !neutronVPNServiceExists(uuid);
131 protected VpnService toMd(NeutronVPNService vpnService) {
132 VpnServiceBuilder vpnServiceBuilder = new VpnServiceBuilder();
133 if (vpnService.getName() != null) {
134 vpnServiceBuilder.setName(vpnService.getName());
136 if (vpnService.getTenantID() != null) {
137 vpnServiceBuilder.setTenantId(toUuid(vpnService.getTenantID()));
139 if (vpnService.getStatus() != null) {
140 vpnServiceBuilder.setStatus(vpnService.getStatus());
142 if (vpnService.getDescription() != null) {
143 vpnServiceBuilder.setDescr(vpnService.getDescription());
145 if (vpnService.getSubnetUUID() != null) {
146 vpnServiceBuilder.setSubnetId(toUuid(vpnService.getSubnetUUID()));
148 if (vpnService.getRouterUUID() != null) {
149 vpnServiceBuilder.setRouterId(toUuid(vpnService.getRouterUUID()));
151 vpnServiceBuilder.setAdminStateUp(vpnService.getAdminStateUp());
152 if (vpnService.getID() != null) {
153 vpnServiceBuilder.setUuid(toUuid(vpnService.getID()));
155 LOGGER.warn("Attempting to write neutron vpnService without UUID");
157 return vpnServiceBuilder.build();
161 protected InstanceIdentifier<VpnService> createInstanceIdentifier(VpnService vpnService) {
162 return InstanceIdentifier.create(VpnServices.class).child(VpnService.class, vpnService.getKey());
166 protected VpnService toMd(String uuid) {
167 VpnServiceBuilder vpnServiceBuilder = new VpnServiceBuilder();
168 vpnServiceBuilder.setUuid(toUuid(uuid));
169 return vpnServiceBuilder.build();