You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by yu...@apache.org on 2015/06/22 17:54:14 UTC

[07/17] incubator-reef git commit: Rewrite and reorder the methods

Rewrite and reorder the methods


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/8378efb5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/8378efb5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/8378efb5

Branch: refs/heads/REEF-395
Commit: 8378efb5685216769f92b8a76f9a946dca66edef
Parents: 848b5bb
Author: Yunseong Lee <yu...@apache.org>
Authored: Sun Jun 21 16:47:46 2015 +0900
Committer: Yunseong Lee <yu...@apache.org>
Committed: Sun Jun 21 16:47:46 2015 +0900

----------------------------------------------------------------------
 .../formats/AvroClassHierarchySerializer.java   | 202 +++++++++----------
 1 file changed, 99 insertions(+), 103 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/8378efb5/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroClassHierarchySerializer.java
----------------------------------------------------------------------
diff --git a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroClassHierarchySerializer.java b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroClassHierarchySerializer.java
index e4f52cf..282314e 100644
--- a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroClassHierarchySerializer.java
+++ b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroClassHierarchySerializer.java
@@ -34,6 +34,53 @@ public class AvroClassHierarchySerializer implements ClassHierarchySerializer {
   public AvroClassHierarchySerializer() {
   }
 
+  private static ClassHierarchy fromAvro(final AvroNode n) {
+    return new AvroClassHierarchy(n);
+  }
+
+  private static AvroNode toAvro(final ClassHierarchy ch) {
+    return newAvroNode(ch.getNamespace());
+  }
+
+  private static AvroNode newAvroNode(final Node n) {
+    final List<AvroNode> children = new ArrayList<>();
+    for (final Node child : n.getChildren()) {
+      children.add(newAvroNode(child));
+    }
+    if (n instanceof ClassNode) {
+      final ClassNode<?> cn = (ClassNode<?>) n;
+      final ConstructorDef<?>[] injectable = cn.getInjectableConstructors();
+      final ConstructorDef<?>[] all = cn.getAllConstructors();
+      final List<ConstructorDef<?>> others = new ArrayList<>(Arrays.asList(all));
+      others.removeAll(Arrays.asList(injectable));
+
+      final List<AvroConstructorDef> injectableConstructors = new ArrayList<>();
+      for (final ConstructorDef<?> inj : injectable) {
+        injectableConstructors.add(newConstructorDef(inj));
+      }
+      final List<AvroConstructorDef> otherConstructors = new ArrayList<>();
+      for (final ConstructorDef<?> other : others) {
+        otherConstructors.add(newConstructorDef(other));
+      }
+      final List<String> implFullNames = new ArrayList<>();
+      for (final ClassNode<?> impl : cn.getKnownImplementations()) {
+        implFullNames.add(impl.getFullName());
+      }
+      return newClassNode(n.getName(), n.getFullName(), cn.isInjectionCandidate(), cn.isExternalConstructor(),
+              cn.isUnit(), injectableConstructors, otherConstructors, implFullNames, cn.getDefaultImplementation(),
+              children);
+    } else if (n instanceof NamedParameterNode) {
+      final NamedParameterNode<?> np = (NamedParameterNode<?>) n;
+      return newNamedParameterNode(np.getName(), np.getFullName(), np.getSimpleArgName(), np.getFullArgName(),
+              np.isSet(), np.isList(), np.getDocumentation(), np.getShortName(),
+              Arrays.asList(np.getDefaultInstanceAsStrings()), children);
+    } else if (n instanceof PackageNode) {
+      return newPackageNode(n.getName(), n.getFullName(), children);
+    } else {
+      throw new IllegalStateException("Encountered unknown type of Node: " + n);
+    }
+  }
+
   private static AvroNode newClassNode(final String name,
                                        final String fullName,
                                        final boolean isInjectionCandidate,
@@ -65,23 +112,23 @@ public class AvroClassHierarchySerializer implements ClassHierarchySerializer {
                                                 final String fullArgClassName,
                                                 final boolean isSet,
                                                 final boolean isList,
-                                                final String documentation, // can be null
-                                                final String shortName, // can be null
-                                                final List<String> instanceDefault, // can be null
+                                                final String documentation,
+                                                final String shortName,
+                                                final List<String> instanceDefault,
                                                 final List<AvroNode> children) {
-    final AvroNamedParameterNode.Builder namedParameterNodeBuilder = AvroNamedParameterNode.newBuilder()
-            .setSimpleArgClassName(simpleArgClassName)
-            .setFullArgClassName(fullArgClassName)
-            .setIsSet(isSet)
-            .setIsList(isList);
-      namedParameterNodeBuilder.setDocumentation(documentation);
-      namedParameterNodeBuilder.setShortName(shortName);
-      namedParameterNodeBuilder.setInstanceDefault(instanceDefault);
 
     return AvroNode.newBuilder()
             .setName(name)
             .setFullName(fullName)
-            .setNamedParameterNode(namedParameterNodeBuilder.build())
+            .setNamedParameterNode(AvroNamedParameterNode.newBuilder()
+                    .setSimpleArgClassName(simpleArgClassName)
+                    .setFullArgClassName(fullArgClassName)
+                    .setIsSet(isSet)
+                    .setIsList(isList)
+                    .setDocumentation(documentation)
+                    .setShortName(shortName)
+                    .setInstanceDefault(instanceDefault)
+                    .build())
             .setChildren(children).build();
   }
 
@@ -93,141 +140,77 @@ public class AvroClassHierarchySerializer implements ClassHierarchySerializer {
             .setName(name).setFullName(fullName).setChildren(children).build();
   }
 
-  private static AvroConstructorDef newConstructorDef(
-          String fullClassName, List<AvroConstructorArg> args) {
-    return AvroConstructorDef.newBuilder()
-            .setFullArgClassName(fullClassName).setConstructorArg(args).build();
-  }
-
   private static AvroConstructorArg newConstructorArg(final String fullArgClassName,
                                                       final String namedParameterName,
                                                       final boolean isFuture) {
-    AvroConstructorArg.Builder builder = AvroConstructorArg.newBuilder()
+    return AvroConstructorArg.newBuilder()
             .setFullArgClassName(fullArgClassName)
-            .setIsInjectionFuture(isFuture);
-    if (namedParameterName != null) {
-      builder.setNamedParameterName(namedParameterName).build();
-    }
-    return builder.build();
+            .setIsInjectionFuture(isFuture)
+            .setNamedParameterName(namedParameterName).build();
   }
 
-  private static AvroConstructorDef serializeConstructorDef(final ConstructorDef<?> def) {
+  private static AvroConstructorDef newConstructorDef(final ConstructorDef<?> def) {
     final List<AvroConstructorArg> args = new ArrayList<>();
-    for (ConstructorArg arg : def.getArgs()) {
+    for (final ConstructorArg arg : def.getArgs()) {
       args.add(newConstructorArg(arg.getType(), arg.getNamedParameterName(), arg.isInjectionFuture()));
     }
-    return newConstructorDef(def.getClassName(), args);
-  }
-
-  private static AvroNode toAvroNode(final Node n) {
-    final List<AvroNode> children = new ArrayList<>();
-    for (final Node child : n.getChildren()) {
-      children.add(toAvroNode(child));
-    }
-    if (n instanceof ClassNode) {
-      final ClassNode<?> cn = (ClassNode<?>) n;
-      final ConstructorDef<?>[] injectable = cn.getInjectableConstructors();
-      final ConstructorDef<?>[] all = cn.getAllConstructors();
-      final List<ConstructorDef<?>> others = new ArrayList<>(Arrays.asList(all));
-      others.removeAll(Arrays.asList(injectable));
-
-      final List<AvroConstructorDef> injectableConstructors = new ArrayList<>();
-      for (final ConstructorDef<?> inj : injectable) {
-        injectableConstructors.add(serializeConstructorDef(inj));
-      }
-      final List<AvroConstructorDef> otherConstructors = new ArrayList<>();
-      for (final ConstructorDef<?> other : others) {
-        otherConstructors.add(serializeConstructorDef(other));
-      }
-      final List<String> implFullNames = new ArrayList<>();
-      for (final ClassNode<?> impl : cn.getKnownImplementations()) {
-        implFullNames.add(impl.getFullName());
-      }
-      return newClassNode(n.getName(), n.getFullName(), cn.isInjectionCandidate(), cn.isExternalConstructor(),
-              cn.isUnit(), injectableConstructors, otherConstructors, implFullNames, cn.getDefaultImplementation(), children);
-    } else if (n instanceof NamedParameterNode) {
-      final NamedParameterNode<?> np = (NamedParameterNode<?>) n;
-      return newNamedParameterNode(np.getName(), np.getFullName(), np.getSimpleArgName(), np.getFullArgName(),
-              np.isSet(), np.isList(), np.getDocumentation(), np.getShortName(),
-              Arrays.asList(np.getDefaultInstanceAsStrings()), children);
-    } else if (n instanceof PackageNode) {
-      return newPackageNode(n.getName(), n.getFullName(), children);
-    } else {
-      throw new IllegalStateException("Encountered unknown type of Node: " + n);
-    }
-  }
-
-  public AvroClassHierarchy toAvro(final ClassHierarchy classHierarchy) {
-    return new AvroClassHierarchy(toAvroNode(classHierarchy.getNamespace()));
+    return AvroConstructorDef.newBuilder()
+            .setFullArgClassName(def.getClassName())
+            .setConstructorArg(args).build();
   }
 
   @Override
   public void toFile(final ClassHierarchy classHierarchy, final File file) throws IOException {
-    final AvroNode avroNode = toAvroNode(classHierarchy.getNamespace());
+    final AvroNode avroNode = toAvro(classHierarchy);
     final DatumWriter<AvroNode> avroNodeWriter = new SpecificDatumWriter<>(AvroNode.class);
-    try (DataFileWriter<AvroNode> dataFileWriter = new DataFileWriter<>(avroNodeWriter)) {
+    try (final DataFileWriter<AvroNode> dataFileWriter = new DataFileWriter<>(avroNodeWriter)) {
       dataFileWriter.create(avroNode.getSchema(), file);
       dataFileWriter.append(avroNode);
     }
   }
 
   @Override
-  public void toTextFile(ClassHierarchy classHierarchy, File file) throws IOException {
-    try (final Writer w = new FileWriter(file)) {
-      w.write(this.toString(classHierarchy));
-    }
-  }
-
-  @Override
   public byte[] toByteArray(final ClassHierarchy classHierarchy) throws IOException {
     final DatumWriter<AvroNode> requestWriter = new SpecificDatumWriter<>(AvroNode.class);
     try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
       final BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null);
-      // TODO Should be a better way
-      requestWriter.write(toAvroNode(classHierarchy.getNamespace()), encoder);
+      requestWriter.write(toAvro(classHierarchy), encoder);
       encoder.flush();
       return out.toByteArray();
-    } catch (final IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException(e);
     }
   }
 
-  // TODO Improve the interface?
   @Override
-  public String toString(ClassHierarchy classHierarchy) throws IOException {
+  public String toString(final ClassHierarchy classHierarchy) throws IOException {
     final DatumWriter<AvroNode> configurationWriter = new SpecificDatumWriter<>(AvroNode.class);
     try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
       final JsonEncoder encoder = EncoderFactory.get().jsonEncoder(AvroConfiguration.SCHEMA$, out);
-      configurationWriter.write(toAvroNode(classHierarchy.getNamespace()), encoder);
+      configurationWriter.write(toAvro(classHierarchy), encoder);
       encoder.flush();
       out.flush();
       return out.toString(JSON_CHARSET);
-    } catch (final IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException(e);
     }
   }
 
   @Override
+  public void toTextFile(ClassHierarchy classHierarchy, File file) throws IOException {
+    try (final Writer w = new FileWriter(file)) {
+      w.write(this.toString(classHierarchy));
+    }
+  }
+
+  @Override
   public ClassHierarchy fromFile(final File file) throws IOException {
     final AvroNode avroNode;
     try (final DataFileReader<AvroNode> dataFileReader =
                  new DataFileReader<>(file, new SpecificDatumReader<>(AvroNode.class))) {
       avroNode = dataFileReader.next();
     }
-    return new AvroClassHierarchy(avroNode);
-  }
-
-  @Override
-  public ClassHierarchy fromTextFile(final File file) throws IOException {
-    final StringBuilder stringBuilder = new StringBuilder();
-    try (final BufferedReader reader = new BufferedReader(new FileReader(file))) {
-      String line = reader.readLine();
-      while (line != null) {
-        stringBuilder.append(line);
-        line = reader.readLine();
-      }
-    }
-    return fromString(stringBuilder.toString());
+    return fromAvro(avroNode);
   }
 
   @Override
@@ -235,8 +218,8 @@ public class AvroClassHierarchySerializer implements ClassHierarchySerializer {
     try {
       final BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(theBytes, null);
       final SpecificDatumReader<AvroNode> reader = new SpecificDatumReader<>(AvroNode.class);
-      return new AvroClassHierarchy(reader.read(null, decoder));
-    } catch (final IOException e) {
+      return fromAvro(reader.read(null, decoder));
+    } catch (IOException e) {
       throw new RuntimeException(e);
     }
   }
@@ -246,9 +229,22 @@ public class AvroClassHierarchySerializer implements ClassHierarchySerializer {
     try {
       final JsonDecoder decoder = DecoderFactory.get().jsonDecoder(AvroNode.getClassSchema(), theString);
       final SpecificDatumReader<AvroNode> reader = new SpecificDatumReader<>(AvroNode.class);
-      return new AvroClassHierarchy(reader.read(null, decoder));
-    } catch (final IOException e) {
+      return fromAvro(reader.read(null, decoder));
+    } catch (IOException e) {
       throw new RuntimeException(e);
     }
   }
+
+  @Override
+  public ClassHierarchy fromTextFile(final File file) throws IOException {
+    final StringBuilder stringBuilder = new StringBuilder();
+    try (final BufferedReader reader = new BufferedReader(new FileReader(file))) {
+      String line = reader.readLine();
+      while (line != null) {
+        stringBuilder.append(line);
+        line = reader.readLine();
+      }
+    }
+    return fromString(stringBuilder.toString());
+  }
 }