package org.opendaylight.neutron.transcriber;
+import java.lang.reflect.Method;
+
import java.util.concurrent.ExecutionException;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
-import com.google.common.base.Predicates;
import com.google.common.util.concurrent.CheckedFuture;
public abstract class AbstractNeutronInterface<T extends DataObject,S> implements AutoCloseable {
private static final int DEDASHED_UUID_DIV3 = 16;
private static final int DEDASHED_UUID_DIV4 = 20;
-
- private ProviderContext providerContext;
private DataBroker db;
AbstractNeutronInterface(ProviderContext providerContext) {
- this.providerContext = providerContext;
this.db = providerContext.getSALService(DataBroker.class);
}
// OK... someone didn't follow RFC 4122... lets try this the hard way
String dedashed = uuid.replace("-", "");
if(dedashed.length() == DEDASHED_UUID_LENGTH) {
- String redashed = dedashed.substring(DEDASHED_UUID_START, DEDASHED_UUID_DIV1) // 8 chars
+ String redashed = dedashed.substring(DEDASHED_UUID_START, DEDASHED_UUID_DIV1)
+ "-"
- + dedashed.substring(DEDASHED_UUID_DIV1, DEDASHED_UUID_DIV2) // 4 chars
+ + dedashed.substring(DEDASHED_UUID_DIV1, DEDASHED_UUID_DIV2)
+ "-"
- + dedashed.substring(DEDASHED_UUID_DIV2, DEDASHED_UUID_DIV3) // 4 chars
+ + dedashed.substring(DEDASHED_UUID_DIV2, DEDASHED_UUID_DIV3)
+ "-"
- + dedashed.substring(DEDASHED_UUID_DIV3, DEDASHED_UUID_DIV4) // 4 chars
+ + dedashed.substring(DEDASHED_UUID_DIV3, DEDASHED_UUID_DIV4)
+ "-"
- + dedashed.substring(DEDASHED_UUID_DIV4, DEDASHED_UUID_LENGTH); // 12 chars
+ + dedashed.substring(DEDASHED_UUID_DIV4, DEDASHED_UUID_LENGTH);
result = new Uuid(redashed);
} else {
throw e;
return result;
}
+ // this method uses reflection to update an object from it's delta.
+
+ protected 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")){
+
+ 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("Error in overwrite", e);
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
@Override
public void close() throws Exception {
// TODO Auto-generated method stub