Implemented the extension framework for selectors.

Change-Id: I577900141889fc70ca54e96cd5d54cfd5194b05d
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/AbstractExtensionTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/AbstractExtensionTreatment.java
deleted file mode 100644
index ac7c771..0000000
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/AbstractExtensionTreatment.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.net.flow.instructions;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Abstract implementation of the set/get property methods of ExtensionInstruction.
- */
-public abstract class AbstractExtensionTreatment implements ExtensionTreatment {
-
-    private static final String INVALID_KEY = "Invalid property key: ";
-    private static final String INVALID_TYPE = "Given type does not match field type: ";
-
-    @Override
-    public <T> void setPropertyValue(String key, T value) throws ExtensionPropertyException {
-        Class<?> clazz = this.getClass();
-        try {
-            Field field = clazz.getDeclaredField(key);
-            field.setAccessible(true);
-            field.set(this, value);
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            throw new ExtensionPropertyException(INVALID_KEY + key);
-        }
-    }
-
-    @Override
-    public <T> T getPropertyValue(String key) throws ExtensionPropertyException {
-        Class<?> clazz = this.getClass();
-        try {
-            Field field = clazz.getDeclaredField(key);
-            field.setAccessible(true);
-            @SuppressWarnings("unchecked")
-            T result = (T) field.get(this);
-            return result;
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            throw new ExtensionPropertyException(INVALID_KEY + key);
-        } catch (ClassCastException e) {
-            throw new ExtensionPropertyException(INVALID_TYPE + key);
-        }
-    }
-
-    @Override
-    public List<String> getProperties() {
-        Class<?> clazz = this.getClass();
-
-        List<String> fields = new ArrayList<>();
-
-        for (Field field : clazz.getDeclaredFields()) {
-            fields.add(field.getName());
-        }
-
-        return fields;
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatment.java
index 0e8885e..35a2d12 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatment.java
@@ -16,12 +16,12 @@
 
 package org.onosproject.net.flow.instructions;
 
-import java.util.List;
+import org.onosproject.net.flow.Extension;
 
 /**
- * An extensible instruction type.
+ * An extenstion for the treatment API.
  */
-public interface ExtensionTreatment {
+public interface ExtensionTreatment extends Extension {
 
     /**
      * Gets the type of the extension instruction.
@@ -30,49 +30,4 @@
      */
     ExtensionTreatmentType type();
 
-    /**
-     * Sets a property on the extension instruction.
-     *
-     * @param key property key
-     * @param value value to set for the given key
-     * @param <T> class of the value
-     * @throws ExtensionPropertyException if the given key is not a valid
-     * property on this extension instruction
-     */
-    <T> void setPropertyValue(String key, T value) throws ExtensionPropertyException;
-
-    /**
-     * Gets a property value of an extension instruction.
-     *
-     * @param key property key
-     * @param <T> class of the value
-     * @return value of the property
-     * @throws ExtensionPropertyException if the given key is not a valid
-     * property on this extension instruction
-     */
-    <T> T getPropertyValue(String key) throws ExtensionPropertyException;
-
-    /**
-     * Gets a list of all properties on the extension instruction.
-     *
-     * @return list of properties
-     */
-    List<String> getProperties();
-
-    /**
-     * Serialize the extension instruction to a byte array.
-     *
-     * @return byte array
-     */
-    byte[] serialize();
-
-    /**
-     * Deserialize the extension instruction from a byte array. The properties
-     * of this object will be overwritten with the data in the byte array.
-     *
-     * @param data input byte array
-     */
-    void deserialize(byte[] data);
-
-
 }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java
index 821c1d9..9715fc0 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/ExtensionTreatmentType.java
@@ -22,7 +22,7 @@
 import java.util.Objects;
 
 /**
- * Type of extension instructions.
+ * Type of treatment extensions.
  */
 @Beta
 public final class ExtensionTreatmentType {