Added getAll methods to each Objects

Change-Id: Icfd557b48ed048ad08a15029730c4d6e60a83353
diff --git a/src/main/java/net/onrc/onos/datastore/topology/RCLink.java b/src/main/java/net/onrc/onos/datastore/topology/RCLink.java
index dfc4307..eec6a10 100644
--- a/src/main/java/net/onrc/onos/datastore/topology/RCLink.java
+++ b/src/main/java/net/onrc/onos/datastore/topology/RCLink.java
@@ -2,6 +2,7 @@
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 import org.slf4j.Logger;
@@ -9,6 +10,7 @@
 
 import com.esotericsoftware.kryo.Kryo;
 
+import edu.stanford.ramcloud.JRamCloud;
 import net.onrc.onos.datastore.RCObject;
 import net.onrc.onos.datastore.RCTable;
 
@@ -45,7 +47,7 @@
 	}
 
 	public byte[] getSwitchID() {
-	    return RCSwitch.getSwichID(dpid);
+	    return RCSwitch.getSwitchID(dpid);
 	}
 
 	@Override
@@ -113,10 +115,46 @@
 	status = STATUS.INACTIVE;
     }
 
-    public static RCLink createFromKey(byte[] key) {
+    /**
+     * Get an instance from Key.
+     *
+     * @note You need to call `read()` to get the DB content.
+     * @param key
+     * @return RCLink instance
+     */
+    public static <L extends RCObject> L createFromKey(byte[] key) {
 	long linkTuple[] = getLinkTupleFromKey(key);
-	return new RCLink(linkTuple[0], linkTuple[1], linkTuple[2],
+	@SuppressWarnings("unchecked")
+	L l = (L) new RCLink(linkTuple[0], linkTuple[1], linkTuple[2],
 	        linkTuple[3]);
+	return l;
+    }
+
+    public static Iterable<RCLink> getAllLinks() {
+	return new LinkEnumerator();
+    }
+
+    public static class LinkEnumerator implements Iterable<RCLink> {
+
+	@Override
+	public Iterator<RCLink> iterator() {
+	    return new LinkIterator();
+	}
+    }
+
+    public static class LinkIterator extends ObjectIterator<RCLink> {
+
+	public LinkIterator() {
+	    super(RCTable.getTable(GLOBAL_LINK_TABLE_NAME));
+	}
+
+	@Override
+	public RCLink next() {
+	    JRamCloud.Object o = enumerator.next();
+	    RCLink e = RCLink.createFromKey(o.key);
+	    e.setValueAndDeserialize(o.value, o.version);
+	    return e;
+	}
     }
 
     public STATUS getStatus() {