package org.opendaylight.neutron.transcriber;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.opendaylight.neutron.spi.INeutronMeteringLabelRuleCRUD;
import org.opendaylight.neutron.spi.NeutronMeteringLabelRule;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.MeteringRuleAttrs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.DirectionBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.DirectionEgress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.DirectionIngress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.metering.rules.attributes.MeteringRules;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.metering.rules.attributes.metering.rules.MeteringRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.metering.rules.attributes.metering.rules.MeteringRuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.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;
+import com.google.common.collect.ImmutableBiMap;
+
public class NeutronMeteringLabelRuleInterface extends AbstractNeutronInterface<MeteringRule, NeutronMeteringLabelRule>
implements INeutronMeteringLabelRuleCRUD {
- private static final Logger logger = LoggerFactory.getLogger(NeutronMeteringLabelRuleInterface.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(NeutronMeteringLabelRuleInterface.class);
private ConcurrentMap<String, NeutronMeteringLabelRule> meteringLabelRuleDB = new ConcurrentHashMap<String, NeutronMeteringLabelRule>();
- NeutronMeteringLabelRuleInterface(ProviderContext providerContext) {
- super(providerContext);
- }
-
- // this method uses reflection to update an object from it's delta.
-
- private boolean overwrite(Object target, Object delta) {
- Method[] methods = target.getClass().getMethods();
-
- for (Method toMethod : methods) {
- if (toMethod.getDeclaringClass().equals(target.getClass()) && toMethod.getName().startsWith("set")) {
+ private static final ImmutableBiMap<Class<? extends DirectionBase>,String> DIRECTION_MAP
+ = new ImmutableBiMap.Builder<Class<? extends DirectionBase>,String>()
+ .put(DirectionEgress.class,"egress")
+ .put(DirectionIngress.class,"ingress")
+ .build();
- String toName = toMethod.getName();
- String fromName = toName.replace("set", "get");
- try {
- Method fromMethod = delta.getClass().getMethod(fromName);
- Object value = fromMethod.invoke(delta, (Object[]) null);
- if (value != null) {
- toMethod.invoke(target, value);
- }
- } catch (Exception e) {
- logger.error(e.getMessage());
- return false;
- }
- }
- }
- return true;
+ NeutronMeteringLabelRuleInterface(ProviderContext providerContext) {
+ super(providerContext);
}
// IfNBMeteringLabelRuleCRUD methods
NeutronMeteringLabelRule meteringLabelRule = entry.getValue();
allMeteringLabelRules.add(meteringLabelRule);
}
- logger.debug("Exiting getAllMeteringLabelRules, Found {} OpenStackMeteringLabelRules",
+ LOGGER.debug("Exiting getAllMeteringLabelRules, Found {} OpenStackMeteringLabelRules",
allMeteringLabelRules.size());
List<NeutronMeteringLabelRule> ans = new ArrayList<NeutronMeteringLabelRule>();
ans.addAll(allMeteringLabelRules);
}
@Override
- protected MeteringRule toMd(NeutronMeteringLabelRule meteringLableRule) {
+ protected MeteringRule toMd(NeutronMeteringLabelRule meteringLabelRule) {
MeteringRuleBuilder meteringRuleBuilder = new MeteringRuleBuilder();
- if (meteringLableRule.getMeteringLabelRuleLabelID() != null) {
- meteringRuleBuilder.setId((toUuid(meteringLableRule.getMeteringLabelRuleLabelID())));
+ if (meteringLabelRule.getMeteringLabelRuleLabelID() != null) {
+ meteringRuleBuilder.setId((toUuid(meteringLabelRule.getMeteringLabelRuleLabelID())));
}
- if (meteringLableRule.getMeteringLabelRuleUUID() != null) {
- meteringRuleBuilder.setMeteringLabelId(toUuid(meteringLableRule.getMeteringLabelRuleUUID()));
+ if (meteringLabelRule.getMeteringLabelRuleUUID() != null) {
+ meteringRuleBuilder.setMeteringLabelId(toUuid(meteringLabelRule.getMeteringLabelRuleUUID()));
}
- if (meteringLableRule.getMeteringLabelRuleDirection() != null) {
- meteringRuleBuilder.setDirection((MeteringRuleAttrs.Direction.valueOf(meteringLableRule
- .getMeteringLabelRuleDirection())));
+ if (meteringLabelRule.getMeteringLabelRuleDirection() != null) {
+ ImmutableBiMap<String, Class<? extends DirectionBase>> mapper =
+ DIRECTION_MAP.inverse();
+ meteringRuleBuilder.setDirection((Class<? extends DirectionBase>) mapper.get(meteringLabelRule.getMeteringLabelRuleDirection()));
}
- if (meteringLableRule.getMeteringLabelRuleRemoteIPPrefix() != null) {
- IpAddress ipAddress = new IpAddress(meteringLableRule.getMeteringLabelRuleRemoteIPPrefix().toCharArray());
+ if (meteringLabelRule.getMeteringLabelRuleRemoteIPPrefix() != null) {
+ IpAddress ipAddress = new IpAddress(meteringLabelRule.getMeteringLabelRuleRemoteIPPrefix().toCharArray());
meteringRuleBuilder.setRemoteIpPrefix(ipAddress);
}
- meteringRuleBuilder.setExcluded(meteringLableRule.getMeteringLabelRuleExcluded());
+ meteringRuleBuilder.setExcluded(meteringLabelRule.getMeteringLabelRuleExcluded());
return meteringRuleBuilder.build();
}
meteringRuleBuilder.setId((toUuid(uuid)));
return meteringRuleBuilder.build();
}
+
+ public static void registerNewInterface(BundleContext context,
+ ProviderContext providerContext,
+ List<ServiceRegistration<?>> registrations) {
+ NeutronMeteringLabelRuleInterface neutronMeteringLabelRuleInterface = new NeutronMeteringLabelRuleInterface(providerContext);
+ ServiceRegistration<INeutronMeteringLabelRuleCRUD> neutronMeteringLabelRuleInterfaceRegistration = context.registerService(INeutronMeteringLabelRuleCRUD.class, neutronMeteringLabelRuleInterface, null);
+ if(neutronMeteringLabelRuleInterfaceRegistration != null) {
+ registrations.add(neutronMeteringLabelRuleInterfaceRegistration);
+ }
+ }
}