Merge "Add additional subnet E2E tests."
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / AbstractNeutronInterface.java
index 111cfd5398214393ceef492ce2e3da248740dd05..31b20dc9df29458ff1e674ed850d56c570359d14 100644 (file)
@@ -1,5 +1,7 @@
 package org.opendaylight.neutron.transcriber;
 
+import java.lang.reflect.Method;
+
 import java.util.concurrent.ExecutionException;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -14,7 +16,6 @@ import org.slf4j.Logger;
 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 {
@@ -26,12 +27,9 @@ public abstract class AbstractNeutronInterface<T extends DataObject,S> implement
     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);
     }
 
@@ -93,15 +91,15 @@ public abstract class AbstractNeutronInterface<T extends DataObject,S> implement
             // 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;
@@ -110,6 +108,33 @@ public abstract class AbstractNeutronInterface<T extends DataObject,S> implement
         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