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() {