Merge "Fix for Bug 2396"
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronVPNServiceInterface.java
1 /*
2  * Copyright Tata Consultancy Services, 2015.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.neutron.transcriber;
10
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.Set;
16 import java.util.Map.Entry;
17 import java.util.concurrent.ConcurrentHashMap;
18 import java.util.concurrent.ConcurrentMap;
19
20 import org.opendaylight.neutron.spi.INeutronVPNServiceCRUD;
21 import org.opendaylight.neutron.spi.NeutronVPNService;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 public class NeutronVPNServiceInterface implements INeutronVPNServiceCRUD {
26     private static final Logger logger = LoggerFactory.getLogger(NeutronVPNServiceInterface.class);
27     private ConcurrentMap<String, NeutronVPNService> VPNServiceDB = new ConcurrentHashMap<String, NeutronVPNService>();
28
29     // this method uses reflection to update an object from it's delta.
30
31     private boolean overwrite(Object target, Object delta) {
32         Method[] methods = target.getClass().getMethods();
33
34         for (Method toMethod : methods) {
35             if (toMethod.getDeclaringClass().equals(target.getClass()) && toMethod.getName().startsWith("set")) {
36
37                 String toName = toMethod.getName();
38                 String fromName = toName.replace("set", "get");
39
40                 try {
41                     Method fromMethod = delta.getClass().getMethod(fromName);
42                     Object value = fromMethod.invoke(delta, (Object[]) null);
43                     if (value != null) {
44                         toMethod.invoke(target, value);
45                     }
46                 } catch (Exception e) {
47                     e.printStackTrace();
48                     return false;
49                 }
50             }
51         }
52         return true;
53     }
54
55     @Override
56     public boolean neutronVPNServiceExists(String uuid) {
57         return VPNServiceDB.containsKey(uuid);
58     }
59
60     @Override
61     public NeutronVPNService getVPNService(String uuid) {
62         if (!neutronVPNServiceExists(uuid)) {
63             logger.debug("No VPNService Have Been Defined");
64             return null;
65         }
66         return VPNServiceDB.get(uuid);
67     }
68
69     @Override
70     public List<NeutronVPNService> getAllVPNService() {
71         Set<NeutronVPNService> allVPNService = new HashSet<NeutronVPNService>();
72         for (Entry<String, NeutronVPNService> entry : VPNServiceDB.entrySet()) {
73             NeutronVPNService VPNService = entry.getValue();
74             allVPNService.add(VPNService);
75         }
76         logger.debug("Exiting getVPNService, Found {} OpenStackVPNService", allVPNService.size());
77         List<NeutronVPNService> ans = new ArrayList<NeutronVPNService>();
78         ans.addAll(allVPNService);
79         return ans;
80     }
81
82     @Override
83     public boolean addVPNService(NeutronVPNService input) {
84         if (neutronVPNServiceExists(input.getID())) {
85             return false;
86         }
87         VPNServiceDB.putIfAbsent(input.getID(), input);
88         return true;
89     }
90
91     @Override
92     public boolean removeVPNService(String uuid) {
93         if (!neutronVPNServiceExists(uuid)) {
94             return false;
95         }
96         VPNServiceDB.remove(uuid);
97         return true;
98     }
99
100     @Override
101     public boolean updateVPNService(String uuid, NeutronVPNService delta) {
102         if (!neutronVPNServiceExists(uuid)) {
103             return false;
104         }
105         NeutronVPNService target = VPNServiceDB.get(uuid);
106         return overwrite(target, delta);
107     }
108
109     @Override
110     public boolean neutronVPNServiceInUse(String uuid) {
111         return !neutronVPNServiceExists(uuid);
112     }
113
114 }