Generic message reader
- uses appropriate factory based on version from the message being parsed
diff --git a/java_gen/templates/of_factories.java b/java_gen/templates/of_factories.java
index 0044335..0a27c59 100644
--- a/java_gen/templates/of_factories.java
+++ b/java_gen/templates/of_factories.java
@@ -36,6 +36,9 @@
//:: include("_imports.java")
public final class OFFactories {
+
+ private final static GenericReader GENERIC_READER = new GenericReader();
+
public static OFFactory getFactory(OFVersion version) {
switch(version) {
//:: for v in versions:
@@ -46,4 +49,25 @@
throw new IllegalArgumentException("Unknown version: "+version);
}
}
+
+ private static class GenericReader implements OFMessageReader<OFMessage> {
+ public OFMessage readFrom(ChannelBuffer bb) throws OFParseError {
+ short wireVersion = U8.f(bb.getByte(0));
+ OFFactory factory;
+ switch (wireVersion) {
+ //:: for v in versions:
+ case ${v.int_version}:
+ factory = org.projectfloodlight.openflow.protocol.ver${v.of_version}.OFFactoryVer${v.of_version}.INSTANCE;
+ break;
+ //:: #endfor
+ default:
+ throw new IllegalArgumentException("Unknown wire version: " + wireVersion);
+ }
+ return factory.getReader().readFrom(bb);
+ }
+ }
+
+ public static OFMessageReader<OFMessage> getGenericReader() {
+ return GENERIC_READER;
+ }
}