/*
- * Copyright (C) 2014 Red Hat, Inc.
+ * Copyright (c) 2014, 2015 Red Hat, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
package org.opendaylight.neutron.transcriber;
+import com.google.common.collect.ImmutableBiMap;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.neutron.spi.INeutronLoadBalancerHealthMonitorCRUD;
import org.opendaylight.neutron.spi.NeutronLoadBalancerHealthMonitor;
import org.opendaylight.neutron.spi.Neutron_ID;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.HealthmonitorAttributes.Type;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitor;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.Healthmonitors;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.HealthmonitorsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeHttp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeHttps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbePing;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.ProbeTcp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.Healthmonitors;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.healthmonitors.Healthmonitor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.healthmonitors.HealthmonitorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitors, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
+public final class NeutronLoadBalancerHealthMonitorInterface
+ extends AbstractNeutronInterface<Healthmonitor, Healthmonitors, NeutronLoadBalancerHealthMonitor>
+ implements INeutronLoadBalancerHealthMonitorCRUD {
private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
- private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
-
-
- NeutronLoadBalancerHealthMonitorInterface(ProviderContext providerContext) {
- super(providerContext);
- }
-
- @Override
- public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
- return loadBalancerHealthMonitorDB.containsKey(uuid);
- }
-
- @Override
- public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
- if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
- LOGGER.debug("No LoadBalancerHealthMonitor has Been Defined");
- return null;
- }
- return loadBalancerHealthMonitorDB.get(uuid);
- }
- @Override
- public List<NeutronLoadBalancerHealthMonitor> getAllNeutronLoadBalancerHealthMonitors() {
- Set<NeutronLoadBalancerHealthMonitor> allLoadBalancerHealthMonitors = new HashSet<NeutronLoadBalancerHealthMonitor>();
- for (Entry<String, NeutronLoadBalancerHealthMonitor> entry : loadBalancerHealthMonitorDB.entrySet()) {
- NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor = entry.getValue();
- allLoadBalancerHealthMonitors.add(loadBalancerHealthMonitor);
- }
- LOGGER.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
- List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
- ans.addAll(allLoadBalancerHealthMonitors);
- return ans;
- }
-
- @Override
- public boolean addNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor input) {
- if (neutronLoadBalancerHealthMonitorExists(input.getLoadBalancerHealthMonitorID())) {
- return false;
- }
- loadBalancerHealthMonitorDB.putIfAbsent(input.getLoadBalancerHealthMonitorID(), input);
- //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
- return true;
- }
+ private static final ImmutableBiMap<Class<? extends ProbeBase>,
+ String> PROBE_MAP = new ImmutableBiMap.Builder<Class<? extends ProbeBase>, String>()
+ .put(ProbeHttp.class, "HTTP").put(ProbeHttps.class, "HTTPS").put(ProbePing.class, "PING")
+ .put(ProbeTcp.class, "TCP").build();
- @Override
- public boolean removeNeutronLoadBalancerHealthMonitor(String uuid) {
- if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
- return false;
- }
- loadBalancerHealthMonitorDB.remove(uuid);
- //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
- return true;
+ NeutronLoadBalancerHealthMonitorInterface(DataBroker db) {
+ super(HealthmonitorBuilder.class, db);
}
@Override
- public boolean updateNeutronLoadBalancerHealthMonitor(String uuid, NeutronLoadBalancerHealthMonitor delta) {
- if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
- return false;
- }
- NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
- return overwrite(target, delta);
+ protected List<Healthmonitor> getDataObjectList(Healthmonitors healthMonitors) {
+ return healthMonitors.getHealthmonitor();
}
@Override
- public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
- return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
+ protected InstanceIdentifier<Healthmonitor> createInstanceIdentifier(Healthmonitor healthMonitor) {
+ return InstanceIdentifier.create(Neutron.class).child(Healthmonitors.class).child(Healthmonitor.class,
+ healthMonitor.getKey());
}
@Override
- protected Healthmonitors toMd(String uuid) {
- HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
- healthmonitorsBuilder.setUuid(toUuid(uuid));
- return healthmonitorsBuilder.build();
- }
-
- @Override
- protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier(
- Healthmonitors healthMonitors) {
- return InstanceIdentifier.create(Neutron.class)
- .child(Healthmonitor.class )
- .child(Healthmonitors.class, healthMonitors.getKey());
- }
-
- @Override
- protected Healthmonitors toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
- HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
- healthmonitorsBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
+ protected Healthmonitor toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
+ final HealthmonitorBuilder healthmonitorBuilder = new HealthmonitorBuilder();
+ healthmonitorBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
- healthmonitorsBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
+ healthmonitorBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
}
if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
- healthmonitorsBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
+ healthmonitorBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
}
if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
- healthmonitorsBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
+ healthmonitorBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
}
if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
- healthmonitorsBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
+ healthmonitorBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
}
if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
- List<Uuid> listUuid = new ArrayList<Uuid>();
- for (Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
+ final List<Uuid> listUuid = new ArrayList<Uuid>();
+ for (final Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
listUuid.add(toUuid(neutron_id.getID()));
}
- healthmonitorsBuilder.setPools(listUuid);
+ healthmonitorBuilder.setPools(listUuid);
}
- if (healthMonitor.getLoadBalancerHealthMonitorTenantID() != null) {
- healthmonitorsBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
+ if (healthMonitor.getTenantID() != null) {
+ healthmonitorBuilder.setTenantId(toUuid(healthMonitor.getTenantID()));
}
if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
- healthmonitorsBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
+ healthmonitorBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
}
if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
- healthmonitorsBuilder.setType(Type.valueOf(healthMonitor.getLoadBalancerHealthMonitorType()));
+ final ImmutableBiMap<String, Class<? extends ProbeBase>> mapper = PROBE_MAP.inverse();
+ healthmonitorBuilder
+ .setType((Class<? extends ProbeBase>) mapper.get(healthMonitor.getLoadBalancerHealthMonitorType()));
}
if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
- healthmonitorsBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
+ healthmonitorBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
}
- if (healthMonitor.getLoadBalancerHealthMonitorID() != null) {
- healthmonitorsBuilder.setUuid(toUuid(healthMonitor.getLoadBalancerHealthMonitorID()));
+ if (healthMonitor.getID() != null) {
+ healthmonitorBuilder.setUuid(toUuid(healthMonitor.getID()));
} else {
LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
}
- return healthmonitorsBuilder.build();
+ return healthmonitorBuilder.build();
}
- public static void registerNewInterface(BundleContext context,
- ProviderContext providerContext,
- List<ServiceRegistration<?>> registrations) {
- NeutronLoadBalancerHealthMonitorInterface neutronLoadBalancerHealthMonitorInterface = new NeutronLoadBalancerHealthMonitorInterface(providerContext);
- ServiceRegistration<INeutronLoadBalancerHealthMonitorCRUD> neutronLoadBalancerHealthMonitorInterfaceRegistration = context.registerService(INeutronLoadBalancerHealthMonitorCRUD.class, neutronLoadBalancerHealthMonitorInterface, null);
- if(neutronLoadBalancerHealthMonitorInterfaceRegistration != null) {
- registrations.add(neutronLoadBalancerHealthMonitorInterfaceRegistration);
+ protected NeutronLoadBalancerHealthMonitor fromMd(Healthmonitor healthMonitor) {
+ final NeutronLoadBalancerHealthMonitor answer = new NeutronLoadBalancerHealthMonitor();
+ if (healthMonitor.isAdminStateUp() != null) {
+ answer.setLoadBalancerHealthMonitorAdminStateIsUp(healthMonitor.isAdminStateUp());
+ }
+ if (healthMonitor.getDelay() != null) {
+ answer.setLoadBalancerHealthMonitorDelay(healthMonitor.getDelay().intValue());
+ }
+ if (healthMonitor.getExpectedCodes() != null) {
+ answer.setLoadBalancerHealthMonitorExpectedCodes(healthMonitor.getExpectedCodes());
+ }
+ if (healthMonitor.getHttpMethod() != null) {
+ answer.setLoadBalancerHealthMonitorHttpMethod(healthMonitor.getHttpMethod());
+ }
+ if (healthMonitor.getMaxRetries() != null) {
+ answer.setLoadBalancerHealthMonitorMaxRetries(Integer.valueOf(healthMonitor.getMaxRetries()));
+ }
+ if (healthMonitor.getPools() != null) {
+ final List<Neutron_ID> list = new ArrayList<Neutron_ID>();
+ for (final Uuid id : healthMonitor.getPools()) {
+ list.add(new Neutron_ID(id.getValue()));
+ }
+ answer.setLoadBalancerHealthMonitorPools(list);
+ }
+ if (healthMonitor.getTenantId() != null) {
+ answer.setTenantID(healthMonitor.getTenantId());
+ }
+ if (healthMonitor.getTimeout() != null) {
+ answer.setLoadBalancerHealthMonitorTimeout(healthMonitor.getTimeout().intValue());
+ }
+ if (healthMonitor.getType() != null) {
+ answer.setLoadBalancerHealthMonitorType(PROBE_MAP.get(healthMonitor.getType()));
+ }
+ if (healthMonitor.getUrlPath() != null) {
+ answer.setLoadBalancerHealthMonitorUrlPath(healthMonitor.getUrlPath());
+ }
+ if (healthMonitor.getUuid() != null) {
+ answer.setID(healthMonitor.getUuid().getValue());
+ } else {
+ LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
}
+ return answer;
}
}