Merge "Clean up overlong start method in Activator"
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronVPNIPSECSiteConnectionsInterface.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 package org.opendaylight.neutron.transcriber;
9
10 import java.util.ArrayList;
11 import java.util.HashSet;
12 import java.util.List;
13 import java.util.Map.Entry;
14 import java.util.Set;
15 import java.util.concurrent.ConcurrentHashMap;
16 import java.util.concurrent.ConcurrentMap;
17
18 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
19 import org.opendaylight.neutron.spi.INeutronVPNIPSECSiteConnectionsCRUD;
20 import org.opendaylight.neutron.spi.NeutronVPNDeadPeerDetection;
21 import org.opendaylight.neutron.spi.NeutronVPNIPSECSiteConnection;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.ipsecconnection.attrs.DpdBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.IpsecSiteConnections;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.site.connections.IpsecSiteConnection;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.site.connections.IpsecSiteConnectionBuilder;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.osgi.framework.BundleContext;
28 import org.osgi.framework.ServiceRegistration;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 public class NeutronVPNIPSECSiteConnectionsInterface extends AbstractNeutronInterface<IpsecSiteConnection, NeutronVPNIPSECSiteConnection> implements INeutronVPNIPSECSiteConnectionsCRUD {
33     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronVPNIKEPolicyInterface.class);
34     private ConcurrentMap<String, NeutronVPNIPSECSiteConnection> neutronVPNIPSECSiteConnectionDB = new ConcurrentHashMap<String, NeutronVPNIPSECSiteConnection>();
35
36
37     NeutronVPNIPSECSiteConnectionsInterface(ProviderContext providerContext) {
38         super(providerContext);
39     }
40
41     // INeutronVPNIPSECSiteConnectionsCRUD methods
42
43     @Override
44     public boolean neutronVPNIPSECSiteConnectionsExists(String policyID) {
45         return neutronVPNIPSECSiteConnectionDB.containsKey(policyID);
46     }
47
48     @Override
49     public NeutronVPNIPSECSiteConnection getNeutronVPNIPSECSiteConnections(String policyID) {
50         if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
51             return null;
52         }
53         return neutronVPNIPSECSiteConnectionDB.get(policyID);
54     }
55
56     @Override
57     public List<NeutronVPNIPSECSiteConnection> getAllNeutronVPNIPSECSiteConnections() {
58         Set<NeutronVPNIPSECSiteConnection> allNeutronVPNIPSECSiteConnections = new HashSet<NeutronVPNIPSECSiteConnection>();
59         for (Entry<String, NeutronVPNIPSECSiteConnection> entry : neutronVPNIPSECSiteConnectionDB.entrySet()) {
60             NeutronVPNIPSECSiteConnection meteringLabelRule = entry.getValue();
61             allNeutronVPNIPSECSiteConnections.add(meteringLabelRule);
62         }
63         LOGGER.debug("Exiting getAllNeutronVPNIPSECSiteConnections, Found {} OpenStackVPNIPSECSiteConnections", allNeutronVPNIPSECSiteConnections.size());
64         List<NeutronVPNIPSECSiteConnection> ans = new ArrayList<NeutronVPNIPSECSiteConnection>();
65         ans.addAll(allNeutronVPNIPSECSiteConnections);
66         return ans;
67     }
68
69     @Override
70     public boolean addNeutronVPNIPSECSiteConnections(NeutronVPNIPSECSiteConnection input) {
71         if (neutronVPNIPSECSiteConnectionsExists(input.getID())) {
72             return false;
73         }
74         neutronVPNIPSECSiteConnectionDB.putIfAbsent(input.getID(), input);
75         addMd(input);
76         return true;
77     }
78
79     @Override
80     public boolean removeNeutronVPNIPSECSiteConnections(String policyID) {
81         if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
82             return false;
83         }
84         neutronVPNIPSECSiteConnectionDB.remove(policyID);
85         removeMd(toMd(policyID));
86         return true;
87     }
88
89     @Override
90     public boolean updateNeutronVPNIPSECSiteConnections(String policyID, NeutronVPNIPSECSiteConnection delta) {
91         if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
92             return false;
93         }
94         NeutronVPNIPSECSiteConnection target = neutronVPNIPSECSiteConnectionDB.get(policyID);
95         boolean rc = overwrite(target, delta);
96         if (rc) {
97             updateMd(neutronVPNIPSECSiteConnectionDB.get(policyID));
98         }
99         return rc;
100     }
101
102     @Override
103     public boolean neutronVPNIPSECSiteConnectionsInUse(String policyID) {
104         if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
105             return true;
106         }
107         return false;
108     }
109
110     @Override
111     protected IpsecSiteConnection toMd(NeutronVPNIPSECSiteConnection ipsecSiteConnection) {
112         IpsecSiteConnectionBuilder ipsecSiteConnectionBuilder = new IpsecSiteConnectionBuilder();
113         if (ipsecSiteConnection.getName() != null) {
114             ipsecSiteConnectionBuilder.setName(ipsecSiteConnection.getName());
115         }
116         if (ipsecSiteConnection.getTenantID() != null) {
117             ipsecSiteConnectionBuilder.setTenantId(toUuid(ipsecSiteConnection.getTenantID()));
118         }
119         ipsecSiteConnectionBuilder.setStatus(ipsecSiteConnection.getStatus());
120         if (ipsecSiteConnection.getAdminStateUp() != null) {
121             ipsecSiteConnectionBuilder.setAdminStateUp(ipsecSiteConnection.getAdminStateUp());
122         }
123         if (ipsecSiteConnection.getDescription() != null) {
124             ipsecSiteConnectionBuilder.setDescr(ipsecSiteConnection.getDescription());
125         }
126         if (ipsecSiteConnection.getPeerAddress() != null) {
127             ipsecSiteConnectionBuilder.setPeerAddress(ipsecSiteConnection.getPeerAddress());
128         }
129         if (ipsecSiteConnection.getPeerCidrs() != null) {
130             List<String> peerCidrs = new ArrayList<String>();
131             for( String peerCidr : ipsecSiteConnection.getPeerCidrs()) {
132                 peerCidrs.add(peerCidr);
133             }
134             ipsecSiteConnectionBuilder.setPeerCidrs(peerCidrs);
135         }
136         if (ipsecSiteConnection.getPeerID() != null) {
137             ipsecSiteConnectionBuilder.setPeerId(ipsecSiteConnection.getPeerID());
138         }
139         if (ipsecSiteConnection.getRouteMode() != null) {
140             ipsecSiteConnectionBuilder.setRouteMode(ipsecSiteConnection.getRouteMode());
141         }
142         if (ipsecSiteConnection.getMtu() != null) {
143             ipsecSiteConnectionBuilder.setMtu((ipsecSiteConnection.getMtu()).shortValue());
144         }
145         if (ipsecSiteConnection.getAuthMode() != null) {
146             ipsecSiteConnectionBuilder.setAuthMode(ipsecSiteConnection.getAuthMode());
147         }
148         if (ipsecSiteConnection.getPreSharedKey() != null) {
149             ipsecSiteConnectionBuilder.setPsk(ipsecSiteConnection.getPreSharedKey());
150         }
151         if (ipsecSiteConnection.getInitiator() != null) {
152             ipsecSiteConnectionBuilder.setInitiator(ipsecSiteConnection.getInitiator());
153         }
154         if (ipsecSiteConnection.getIkePolicyID() != null) {
155             ipsecSiteConnectionBuilder.setIkepolicyId(toUuid(ipsecSiteConnection.getIkePolicyID()));
156         }
157         if (ipsecSiteConnection.getIpsecPolicyID() != null) {
158             ipsecSiteConnectionBuilder.setIpsecpolicyId(toUuid(ipsecSiteConnection.getIpsecPolicyID()));
159         }
160         if (ipsecSiteConnection.getVpnServiceID() != null) {
161             ipsecSiteConnectionBuilder.setVpnserviceId(toUuid(ipsecSiteConnection.getVpnServiceID()));
162         }
163         if (ipsecSiteConnection.getDeadPeerDetection() != null) {
164             NeutronVPNDeadPeerDetection deadPeerDetection = ipsecSiteConnection.getDeadPeerDetection();
165             DpdBuilder dpdBuilder = new DpdBuilder();
166             dpdBuilder.setAction(deadPeerDetection.getAction());
167             dpdBuilder.setInterval(deadPeerDetection.getInterval());
168             dpdBuilder.setTimeout(deadPeerDetection.getTimeout());
169             ipsecSiteConnectionBuilder.setDpd(dpdBuilder.build());
170         }
171         if (ipsecSiteConnection.getID() != null) {
172             ipsecSiteConnectionBuilder.setUuid(toUuid(ipsecSiteConnection.getID()));
173         } else {
174             LOGGER.warn("Attempting to write neutron vpnIPSECSiteConnection without UUID");
175         }
176         return ipsecSiteConnectionBuilder.build();
177     }
178
179     @Override
180     protected InstanceIdentifier<IpsecSiteConnection> createInstanceIdentifier(IpsecSiteConnection ipsecSiteConnection) {
181         return InstanceIdentifier.create(IpsecSiteConnections.class).child(IpsecSiteConnection.class, ipsecSiteConnection.getKey());
182     }
183
184     @Override
185     protected IpsecSiteConnection toMd(String uuid) {
186         IpsecSiteConnectionBuilder ipsecSiteConnectionBuilder = new IpsecSiteConnectionBuilder();
187         ipsecSiteConnectionBuilder.setUuid(toUuid(uuid));
188         return ipsecSiteConnectionBuilder.build();
189     }
190
191     public static void registerNewInterface(BundleContext context,
192                                             ProviderContext providerContext,
193                                             List<ServiceRegistration<?>> registrations) throws Exception {
194         NeutronVPNIPSECSiteConnectionsInterface neutronVPNIPSECSiteConnectionsInterface = new NeutronVPNIPSECSiteConnectionsInterface(providerContext);
195         ServiceRegistration<INeutronVPNIPSECSiteConnectionsCRUD> neutronVPNIPSECSiteConnectionsInterfaceRegistration = context.registerService(INeutronVPNIPSECSiteConnectionsCRUD.class, neutronVPNIPSECSiteConnectionsInterface, null);
196         if (neutronVPNIPSECSiteConnectionsInterfaceRegistration != null) {
197             registrations.add(neutronVPNIPSECSiteConnectionsInterfaceRegistration);
198         }
199     }
200 }