bgpvpn: simplify bgpvpn related code
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronLoadBalancerListenerInterface.java
1 /*
2  * Copyright (c) 2014, 2015 Red Hat, Inc. 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 java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
15 import java.util.Set;
16
17 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
18 import org.opendaylight.neutron.spi.INeutronLoadBalancerListenerCRUD;
19 import org.opendaylight.neutron.spi.NeutronLoadBalancerListener;
20 import org.opendaylight.neutron.spi.Neutron_ID;
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.constants.rev150712.ProtocolBase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolHttp;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolHttps;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTcp;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTerminatedHttps;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.Listeners;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.listeners.Listener;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.listeners.ListenerBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.osgi.framework.BundleContext;
33 import org.osgi.framework.ServiceRegistration;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37 import com.google.common.collect.ImmutableBiMap;
38
39 public class NeutronLoadBalancerListenerInterface extends AbstractNeutronInterface<Listener, Listeners, NeutronLoadBalancerListener> implements INeutronLoadBalancerListenerCRUD {
40     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerListenerInterface.class);
41
42     private static final ImmutableBiMap<Class<? extends ProtocolBase>,String> PROTOCOL_MAP
43             = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>,String>()
44             .put(ProtocolHttp.class,"HTTP")
45             .put(ProtocolHttps.class,"HTTPS")
46             .put(ProtocolTcp.class,"TCP")
47             .put(ProtocolTerminatedHttps.class,"TERMINATED_HTTPS")
48             .build();
49
50     NeutronLoadBalancerListenerInterface(ProviderContext providerContext) {
51         super(providerContext);
52     }
53
54     @Override
55     public boolean neutronLoadBalancerListenerExists(String uuid) {
56         return exists(uuid);
57     }
58
59     @Override
60     public NeutronLoadBalancerListener getNeutronLoadBalancerListener(String uuid) {
61         return get(uuid);
62     }
63
64     @Override
65     protected List<Listener> getDataObjectList(Listeners listeners) {
66         return listeners.getListener();
67     }
68
69     @Override
70     public List<NeutronLoadBalancerListener> getAllNeutronLoadBalancerListeners() {
71         return getAll();
72     }
73
74     @Override
75     public boolean addNeutronLoadBalancerListener(NeutronLoadBalancerListener input) {
76         return add(input);
77     }
78
79     @Override
80     public boolean removeNeutronLoadBalancerListener(String uuid) {
81         return remove(uuid);
82     }
83
84     @Override
85     public boolean updateNeutronLoadBalancerListener(String uuid, NeutronLoadBalancerListener delta) {
86         return update(uuid, delta);
87     }
88
89     @Override
90     public boolean neutronLoadBalancerListenerInUse(String loadBalancerListenerUUID) {
91         return !exists(loadBalancerListenerUUID);
92     }
93
94
95     @Override
96     protected Listener toMd(String uuid) {
97         ListenerBuilder listenerBuilder = new ListenerBuilder();
98         listenerBuilder.setUuid(toUuid(uuid));
99         return listenerBuilder.build();
100     }
101
102     @Override
103     protected InstanceIdentifier<Listener> createInstanceIdentifier(
104             Listener listener) {
105         return InstanceIdentifier.create(Neutron.class)
106                 .child(Listeners.class)
107                 .child(Listener.class, listener.getKey());
108     }
109
110     @Override
111     protected InstanceIdentifier<Listeners> createInstanceIdentifier() {
112         return InstanceIdentifier.create(Neutron.class)
113                 .child(Listeners.class);
114     }
115
116     @Override
117     protected Listener toMd(NeutronLoadBalancerListener listener) {
118         ListenerBuilder listenerBuilder = new ListenerBuilder();
119         listenerBuilder.setAdminStateUp(listener.getLoadBalancerListenerAdminStateIsUp());
120         if (listener.getNeutronLoadBalancerListenerConnectionLimit() != null) {
121             listenerBuilder.setConnectionLimit(listener.getNeutronLoadBalancerListenerConnectionLimit());
122         }
123         if (listener.getNeutronLoadBalancerListenerDefaultPoolID() != null) {
124             listenerBuilder.setDefaultPoolId(toUuid(listener.getNeutronLoadBalancerListenerDefaultPoolID()));
125         }
126         if (listener.getLoadBalancerListenerDescription() != null) {
127             listenerBuilder.setDescr(listener.getLoadBalancerListenerDescription());
128         }
129         if (listener.getNeutronLoadBalancerListenerLoadBalancerIDs() != null) {
130             List<Uuid> listLoadBalancers = new ArrayList<Uuid>();
131             for (Neutron_ID neutron_id : listener.getNeutronLoadBalancerListenerLoadBalancerIDs()) {
132                 listLoadBalancers.add(toUuid(neutron_id.getID()));
133             }
134             listenerBuilder.setLoadbalancers(listLoadBalancers);
135         }
136         if (listener.getLoadBalancerListenerName() != null) {
137             listenerBuilder.setName(listener.getLoadBalancerListenerName());
138         }
139         if (listener.getNeutronLoadBalancerListenerProtocol() != null) {
140             ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper =
141                 PROTOCOL_MAP.inverse();
142             listenerBuilder.setProtocol((Class<? extends ProtocolBase>) mapper.get(listener.getNeutronLoadBalancerListenerProtocol()));
143         }
144         if (listener.getNeutronLoadBalancerListenerProtocolPort() != null) {
145             listenerBuilder.setProtocolPort(Integer.valueOf(listener.getNeutronLoadBalancerListenerProtocolPort()));
146         }
147         if (listener.getTenantID() != null) {
148             listenerBuilder.setTenantId(toUuid(listener.getTenantID()));
149         }
150         if (listener.getID() != null) {
151             listenerBuilder.setUuid(toUuid(listener.getID()));
152         } else {
153             LOGGER.warn("Attempting to write neutron load balancer listener without UUID");
154         }
155         return listenerBuilder.build();
156     }
157
158     protected NeutronLoadBalancerListener fromMd(Listener listener) {
159         NeutronLoadBalancerListener answer = new NeutronLoadBalancerListener();
160         if (listener.isAdminStateUp() != null) {
161             answer.setLoadBalancerListenerAdminStateIsUp(listener.isAdminStateUp());
162         }
163         if (listener.getConnectionLimit() != null) {
164             answer.setNeutronLoadBalancerListenerConnectionLimit(listener.getConnectionLimit());
165         }
166         if (listener.getDefaultPoolId() != null) {
167             answer.setNeutronLoadBalancerListenerDefaultPoolID(listener.getDefaultPoolId().getValue());
168         }
169         if (listener.getDescr() != null) {
170             answer.setLoadBalancerListenerDescription(listener.getDescr());
171         }
172         if (listener.getLoadbalancers() != null) {
173             List<Neutron_ID> list = new ArrayList<Neutron_ID>();
174             for (Uuid id : listener.getLoadbalancers()) {
175                 list.add(new Neutron_ID(id.getValue()));
176             }
177             answer.setNeutronLoadBalancerListenerLoadBalancerIDs(list);
178         }
179         if (listener.getName() != null) {
180             answer.setLoadBalancerListenerName(listener.getName());
181         }
182         if (listener.getProtocol() != null) {
183             answer.setNeutronLoadBalancerListenerProtocol(PROTOCOL_MAP.get(listener.getProtocol()));
184         }
185         if (listener.getProtocolPort() != null) {
186             answer.setNeutronLoadBalancerListenerProtocolPort(String.valueOf(listener.getProtocolPort()));
187         }
188         if (listener.getTenantId() != null) {
189             answer.setTenantID(listener.getTenantId());
190         }
191         if (listener.getUuid() != null) {
192             answer.setID(listener.getUuid().getValue());
193         }
194         return answer;
195     }
196
197     public static void registerNewInterface(BundleContext context,
198                                             ProviderContext providerContext,
199                                             List<ServiceRegistration<?>> registrations) {
200         NeutronLoadBalancerListenerInterface neutronLoadBalancerListenerInterface = new NeutronLoadBalancerListenerInterface(providerContext);
201         ServiceRegistration<INeutronLoadBalancerListenerCRUD> neutronLoadBalancerListenerInterfaceRegistration = context.registerService(INeutronLoadBalancerListenerCRUD.class, neutronLoadBalancerListenerInterface, null);
202         if(neutronLoadBalancerListenerInterfaceRegistration != null) {
203             registrations.add(neutronLoadBalancerListenerInterfaceRegistration);
204         }
205     }
206 }