Renamed devicemanager, flowprogrammer, linkdiscovery and util packages

net.onrc.onos.ofcontroller.devicemanager.* => net.onrc.onos.core.devicemanager.*
net.onrc.onos.ofcontroller.flowprogrammer.* => net.onrc.onos.core.flowprogrammer.*
net.onrc.onos.ofcontroller.linkdiscovery.* => net.onrc.onos.core.linkdiscovery.*
net.onrc.onos.ofcontroller.util.* => net.onrc.onos.core.util.*

Change-Id: Iaa865af552e8fb3a589e73d006569ac79f5a0f08
diff --git a/src/main/java/net/onrc/onos/core/util/FlowEntryId.java b/src/main/java/net/onrc/onos/core/util/FlowEntryId.java
new file mode 100644
index 0000000..e4dd32c
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/util/FlowEntryId.java
@@ -0,0 +1,113 @@
+package net.onrc.onos.core.util;
+
+import java.math.BigInteger;
+
+import net.onrc.onos.core.util.serializers.FlowEntryIdDeserializer;
+import net.onrc.onos.core.util.serializers.FlowEntryIdSerializer;
+
+import org.codehaus.jackson.annotate.JsonIgnore;
+import org.codehaus.jackson.map.annotate.JsonDeserialize;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+/**
+ * The class representing a Flow Entry ID.
+ */
+@JsonDeserialize(using=FlowEntryIdDeserializer.class)
+@JsonSerialize(using=FlowEntryIdSerializer.class)
+public class FlowEntryId {
+    private long value;
+
+    /**
+     * Default constructor.
+     */
+    public FlowEntryId() {
+	this.value = -1;
+    }
+
+    /**
+     * Constructor from an integer value.
+     *
+     * @param value the value to use.
+     */
+    public FlowEntryId(long value) {
+	this.value = value;
+    }
+
+    /**
+     * Constructor from a string.
+     *
+     * @param value the value to use.
+     */
+    public FlowEntryId(String value) {
+	//
+	// Use the help of BigInteger to parse strings representing
+	// large unsigned hex long values.
+	//
+	char c = 0;
+	if (value.length() > 2)
+	    c = value.charAt(1);
+	if ((c == 'x') || (c == 'X'))
+	    this.value = new BigInteger(value.substring(2), 16).longValue();
+	else
+	    this.value = Long.decode(value);
+    }
+
+    /**
+     * Get the value of the Flow Entry ID.
+     *
+     * @return the value of the Flow Entry ID.
+     */
+    public long value() { return value; }
+
+    /**
+     * Set the value of the Flow Entry ID.
+     *
+     * @param value the value to set.
+     */
+    public void setValue(long value) {
+	this.value = value;
+    }
+
+    /**
+     * Test whether the Flow Entry ID is valid.
+     *
+     * @return true if the Flow Entry ID is valid, otherwise false.
+     */
+    @JsonIgnore
+    public boolean isValid() {
+	return (this.value() != -1);
+    }
+
+    /**
+     * Returns true of the object is another Flow Entry ID with 
+     * the same value; otherwise, returns false.
+     * 
+     * @param Object to compare
+     */
+    @Override
+    public boolean equals(Object obj){
+	if(obj != null && obj.getClass() == this.getClass()) {
+	    FlowEntryId entry = (FlowEntryId) obj;
+	    return this.value() == entry.value();
+	}
+	return false;
+    }
+    
+    /**
+     * Return the hash code of the Flow Entry ID
+     */
+    @Override
+    public int hashCode() {
+	return Long.valueOf(value).hashCode();
+    }
+
+    /**
+     * Convert the Flow Entry ID value to a hexadecimal string.
+     *
+     * @return the Flow Entry ID value to a hexadecimal string.
+     */
+    @Override
+    public String toString() {
+	return "0x" + Long.toHexString(this.value);
+    }
+}