bgpvpn: simplify bgpvpn related code
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronBgpvpnInterface.java
1 /*
2  * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. 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 com.google.common.collect.ImmutableBiMap;
12
13 import java.util.ArrayList;
14 import java.util.HashSet;
15 import java.util.List;
16 import java.util.Set;
17
18 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
19 import org.opendaylight.neutron.spi.INeutronBgpvpnCRUD;
20 import org.opendaylight.neutron.spi.NeutronBgpvpn;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.bgpvpns.rev150903.BgpvpnTypeBase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.bgpvpns.rev150903.BgpvpnTypeL2;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.bgpvpns.rev150903.BgpvpnTypeL3;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.bgpvpns.rev150903.bgpvpns.attributes.Bgpvpns;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.bgpvpns.rev150903.bgpvpns.attributes.bgpvpns.Bgpvpn;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.bgpvpns.rev150903.bgpvpns.attributes.bgpvpns.BgpvpnBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.NetworkTypeBase;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.osgi.framework.BundleContext;
32 import org.osgi.framework.ServiceRegistration;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 public class NeutronBgpvpnInterface extends AbstractNeutronInterface<Bgpvpn, Bgpvpns, NeutronBgpvpn> implements INeutronBgpvpnCRUD {
37     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronBgpvpnInterface.class);
38
39     private static final ImmutableBiMap<Class<? extends BgpvpnTypeBase>,String> BGPVPN_TYPE_MAP
40             = new ImmutableBiMap.Builder<Class<? extends BgpvpnTypeBase>,String>()
41             .put(BgpvpnTypeL2.class,"l2")
42             .put(BgpvpnTypeL3.class,"l3")
43             .build();
44
45     NeutronBgpvpnInterface(ProviderContext providerContext) {
46         super(providerContext);
47     }
48
49     @Override
50     protected List<Bgpvpn> getDataObjectList(Bgpvpns bgpvpns) {
51         return bgpvpns.getBgpvpn();
52     }
53
54     @Override
55     public boolean inUse(String uuid) {
56         return !exists(uuid);
57     }
58
59     @Override
60     protected NeutronBgpvpn fromMd(Bgpvpn bgpvpn) {
61         NeutronBgpvpn result = new NeutronBgpvpn();
62         result.setAdminStateUp(bgpvpn.isAdminStateUp());
63         result.setBgpvpnName(bgpvpn.getName());
64         result.setAutoAggregate(bgpvpn.isAutoAggregate());
65         result.setStatus(bgpvpn.getStatus());
66         result.setTenantID(bgpvpn.getTenantId());
67         result.setID(bgpvpn.getUuid().getValue());
68         if(bgpvpn.getVnid() != null) {
69             result.setVnid(bgpvpn.getVnid());
70         }
71         if(bgpvpn.getType() != null) {
72             result.setType(BGPVPN_TYPE_MAP.get(bgpvpn.getType()));
73         }
74         if(bgpvpn.getTechnique() != null) {
75             result.setTechnique(bgpvpn.getTechnique());
76         }
77         if (bgpvpn.getRouteTargets() != null) {
78             List<String> routeTargets = new ArrayList<String>();
79             for( String routeTarget : bgpvpn.getRouteTargets()) {
80                 routeTargets.add(routeTarget);
81             }
82             result.setRouteTargets(routeTargets);
83         }
84         if (bgpvpn.getImportTargets() != null) {
85             List<String> importTargets = new ArrayList<String>();
86             for( String importTarget : bgpvpn.getImportTargets()) {
87                 importTargets.add(importTarget);
88             }
89             result.setImportTargets(importTargets);
90         }
91         if (bgpvpn.getExportTargets() != null) {
92             List<String> exportTargets = new ArrayList<String>();
93             for( String exportTarget : bgpvpn.getExportTargets()) {
94                 exportTargets.add(exportTarget);
95             }
96             result.setExportTargets(exportTargets);
97         }
98         if (bgpvpn.getRouteDistinguishers() != null) {
99             List<String> routeDistinguishers = new ArrayList<String>();
100             for( String routeDistinguisher : bgpvpn.getRouteDistinguishers()) {
101                 routeDistinguishers.add(routeDistinguisher);
102             }
103             result.setRouteDistinguishers(routeDistinguishers);
104         }
105         if (bgpvpn.getRouters() != null) {
106             List<String> routers = new ArrayList<String>();
107             for( Uuid router : bgpvpn.getRouters()) {
108                routers.add(router.getValue());
109             }
110             result.setRouters(routers);
111         }
112         if (bgpvpn.getNetworks() != null) {
113             List<String> networks = new ArrayList<String>();
114             for( Uuid network : bgpvpn.getNetworks()) {
115                networks.add(network.getValue());
116             }
117             result.setNetworks(networks);
118         }
119         return result;
120     }
121
122     @Override
123     protected Bgpvpn toMd(NeutronBgpvpn bgpvpn) {
124         BgpvpnBuilder bgpvpnBuilder = new BgpvpnBuilder();
125
126         bgpvpnBuilder.setAdminStateUp(bgpvpn.getAdminStateUp());
127         if (bgpvpn.getBgpvpnName() != null) {
128             bgpvpnBuilder.setName(bgpvpn.getBgpvpnName());
129         }
130         if (bgpvpn.getAutoAggregate() != null) {
131             bgpvpnBuilder.setAutoAggregate(bgpvpn.getAutoAggregate());
132         }
133         if (bgpvpn.getStatus() != null) {
134             bgpvpnBuilder.setStatus(bgpvpn.getStatus());
135         }
136         if (bgpvpn.getVnid() != null) {
137             bgpvpnBuilder.setVnid(bgpvpn.getVnid());
138         }
139         if (bgpvpn.getType() != null) {
140             ImmutableBiMap<String, Class<? extends BgpvpnTypeBase>> mapper = BGPVPN_TYPE_MAP.inverse();
141             bgpvpnBuilder.setType(mapper.get(bgpvpn.getType()));
142         }
143         if (bgpvpn.getTechnique() != null) {
144             bgpvpnBuilder.setTechnique(bgpvpn.getTechnique());
145         }
146         if (bgpvpn.getRouteTargets() != null) {
147             List<String> routeTargets = new ArrayList<String>();
148             for( String routeTarget : bgpvpn.getRouteTargets()) {
149                 routeTargets.add(routeTarget);
150             }
151             bgpvpnBuilder.setRouteTargets(routeTargets);
152         }
153         if (bgpvpn.getImportTargets() != null) {
154             List<String> importTargets = new ArrayList<String>();
155             for( String importTarget : bgpvpn.getImportTargets()) {
156                 importTargets.add(importTarget);
157             }
158             bgpvpnBuilder.setImportTargets(importTargets);
159         }
160         if (bgpvpn.getExportTargets() != null) {
161             List<String> exportTargets = new ArrayList<String>();
162             for( String exportTarget : bgpvpn.getExportTargets()) {
163                 exportTargets.add(exportTarget);
164             }
165             bgpvpnBuilder.setExportTargets(exportTargets);
166         }
167         if (bgpvpn.getRouteDistinguishers() != null) {
168             List<String> routeDistinguishers = new ArrayList<String>();
169             for( String routeDistinguisher : bgpvpn.getRouteDistinguishers()) {
170                 routeDistinguishers.add(routeDistinguisher);
171             }
172             bgpvpnBuilder.setRouteDistinguishers(routeDistinguishers);
173         }
174         if (bgpvpn.getRouters() != null) {
175             List<Uuid> routers = new ArrayList<Uuid>();
176             for( String router : bgpvpn.getRouters()) {
177                 routers.add(toUuid(router));
178             }
179             bgpvpnBuilder.setRouters(routers);
180         }
181         if (bgpvpn.getNetworks() != null) {
182             List<Uuid> networks = new ArrayList<Uuid>();
183             for( String network : bgpvpn.getNetworks()) {
184                 networks.add(toUuid(network));
185             }
186             bgpvpnBuilder.setNetworks(networks);
187         }
188         if (bgpvpn.getTenantID() != null) {
189             bgpvpnBuilder.setTenantId(toUuid(bgpvpn.getTenantID()));
190         }
191         if (bgpvpn.getID() != null) {
192             bgpvpnBuilder.setUuid(toUuid(bgpvpn.getID()));
193         } else {
194             LOGGER.warn("Attempting to write neutron bgpvpn without UUID");
195         }
196         return bgpvpnBuilder.build();
197     }
198
199     @Override
200     protected Bgpvpn toMd(String uuid) {
201         BgpvpnBuilder bgpvpnBuilder = new BgpvpnBuilder();
202         bgpvpnBuilder.setUuid(toUuid(uuid));
203         return bgpvpnBuilder.build();
204     }
205
206     @Override
207     protected InstanceIdentifier<Bgpvpn> createInstanceIdentifier(Bgpvpn bgpvpn) {
208         return InstanceIdentifier.create(Neutron.class)
209                 .child(Bgpvpns.class)
210                 .child(Bgpvpn.class, bgpvpn.getKey());
211     }
212
213     @Override
214     protected InstanceIdentifier<Bgpvpns> createInstanceIdentifier() {
215         return InstanceIdentifier.create(Neutron.class)
216                 .child(Bgpvpns.class);
217     }
218
219     public static void registerNewInterface(BundleContext context,
220                                             ProviderContext providerContext,
221                                             List<ServiceRegistration<?>> registrations) {
222         NeutronBgpvpnInterface neutronNetworkInterface = new NeutronBgpvpnInterface(providerContext);
223         ServiceRegistration<INeutronBgpvpnCRUD> neutronNetworkInterfaceRegistration = context.registerService(INeutronBgpvpnCRUD.class, neutronNetworkInterface, null);
224         if(neutronNetworkInterfaceRegistration != null) {
225             registrations.add(neutronNetworkInterfaceRegistration);
226         }
227     }
228 }