5ecb6d2e501df5a108f8c642e95f7e2a765eccff
[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 com.google.common.collect.ImmutableBiMap;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.neutron.northbound.api.BadRequestException;
16 import org.opendaylight.neutron.spi.INeutronLoadBalancerListenerCRUD;
17 import org.opendaylight.neutron.spi.NeutronID;
18 import org.opendaylight.neutron.spi.NeutronLoadBalancerListener;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolBase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolHttp;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolHttps;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTcp;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProtocolTerminatedHttps;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.Listeners;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.listeners.Listener;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.listeners.ListenerBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.listeners.ListenerKey;
29
30 public final class NeutronLoadBalancerListenerInterface
31         extends AbstractNeutronInterface<Listener, Listeners, ListenerKey, NeutronLoadBalancerListener>
32         implements INeutronLoadBalancerListenerCRUD {
33     private static final ImmutableBiMap<Class<? extends ProtocolBase>,
34             String> PROTOCOL_MAP = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>, String>()
35                     .put(ProtocolHttp.class, "HTTP").put(ProtocolHttps.class, "HTTPS").put(ProtocolTcp.class, "TCP")
36                     .put(ProtocolTerminatedHttps.class, "TERMINATED_HTTPS").build();
37
38     NeutronLoadBalancerListenerInterface(DataBroker db) {
39         super(ListenerBuilder.class, db);
40     }
41
42     @Override
43     protected List<Listener> getDataObjectList(Listeners listeners) {
44         return listeners.getListener();
45     }
46
47     @Override
48     protected Listener toMd(NeutronLoadBalancerListener listener) {
49         final ListenerBuilder listenerBuilder = new ListenerBuilder();
50         toMdBaseAttributes(listener, listenerBuilder);
51         listenerBuilder.setAdminStateUp(listener.getLoadBalancerListenerAdminStateIsUp());
52         if (listener.getNeutronLoadBalancerListenerConnectionLimit() != null) {
53             listenerBuilder.setConnectionLimit(listener.getNeutronLoadBalancerListenerConnectionLimit());
54         }
55         if (listener.getNeutronLoadBalancerListenerDefaultPoolID() != null) {
56             listenerBuilder.setDefaultPoolId(toUuid(listener.getNeutronLoadBalancerListenerDefaultPoolID()));
57         }
58         if (listener.getNeutronLoadBalancerListenerLoadBalancerIDs() != null) {
59             final List<Uuid> listLoadBalancers = new ArrayList<Uuid>();
60             for (final NeutronID neutronId : listener.getNeutronLoadBalancerListenerLoadBalancerIDs()) {
61                 listLoadBalancers.add(toUuid(neutronId.getID()));
62             }
63             listenerBuilder.setLoadbalancers(listLoadBalancers);
64         }
65         if (listener.getNeutronLoadBalancerListenerProtocol() != null) {
66             final ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper = PROTOCOL_MAP.inverse();
67             Class<? extends ProtocolBase> protocol = mapper.get(listener.getNeutronLoadBalancerListenerProtocol());
68             if (protocol != null) {
69                 listenerBuilder.setProtocol(protocol);
70             } else {
71                 throw new BadRequestException("Protocol {" + listener.getNeutronLoadBalancerListenerProtocol()
72                         + "} is not supported");
73             }
74         }
75         if (listener.getNeutronLoadBalancerListenerProtocolPort() != null) {
76             listenerBuilder.setProtocolPort(Integer.valueOf(listener.getNeutronLoadBalancerListenerProtocolPort()));
77         }
78         return listenerBuilder.build();
79     }
80
81     @Override
82     protected NeutronLoadBalancerListener fromMd(Listener listener) {
83         final NeutronLoadBalancerListener answer = new NeutronLoadBalancerListener();
84         fromMdBaseAttributes(listener, answer);
85         if (listener.isAdminStateUp() != null) {
86             answer.setLoadBalancerListenerAdminStateIsUp(listener.isAdminStateUp());
87         }
88         if (listener.getConnectionLimit() != null) {
89             answer.setNeutronLoadBalancerListenerConnectionLimit(listener.getConnectionLimit());
90         }
91         if (listener.getDefaultPoolId() != null) {
92             answer.setNeutronLoadBalancerListenerDefaultPoolID(listener.getDefaultPoolId().getValue());
93         }
94         if (listener.getLoadbalancers() != null) {
95             final List<NeutronID> list = new ArrayList<NeutronID>();
96             for (final Uuid id : listener.getLoadbalancers()) {
97                 list.add(new NeutronID(id.getValue()));
98             }
99             answer.setNeutronLoadBalancerListenerLoadBalancerIDs(list);
100         }
101         if (listener.getProtocol() != null) {
102             answer.setNeutronLoadBalancerListenerProtocol(PROTOCOL_MAP.get(listener.getProtocol()));
103         }
104         if (listener.getProtocolPort() != null) {
105             answer.setNeutronLoadBalancerListenerProtocolPort(String.valueOf(listener.getProtocolPort()));
106         }
107         return answer;
108     }
109 }