Repository: incubator-reef
Updated Branches:
refs/heads/master 786f7e5e5 -> f9c4d4e5b
[REEF-382] Remove ConfigurationFile
This addressed the issue by
* replacing serialization usages of ConfigurationFile in our code with
AvroConfigurationSerializer
* moving toConfigurationStringList method to ConfigurationModule
* deleting ConfigurationFile and TestConfigFileParser
JIRA:
[REEF-382](https://issues.apache.org/jira/browse/REEF-382)
Pull Request:
This closes #345
Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/f9c4d4e5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/f9c4d4e5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/f9c4d4e5
Branch: refs/heads/master
Commit: f9c4d4e5bf126c70e1d091b3b36c8a0a4a6a51ea
Parents: 786f7e5
Author: Mariia Mykhailova <[email protected]>
Authored: Thu Aug 6 11:53:27 2015 -0700
Committer: Markus Weimer <[email protected]>
Committed: Thu Aug 6 12:48:28 2015 -0700
----------------------------------------------------------------------
.../org/apache/reef/tang/examples/Timer.java | 5 +-
.../formats/AvroConfigurationSerializer.java | 22 +-
.../reef/tang/formats/ConfigurationFile.java | 259 -------------------
.../reef/tang/formats/ConfigurationModule.java | 83 +++++-
.../reef/tang/util/ValidateConfiguration.java | 23 +-
.../org/apache/reef/tang/TestBindSingleton.java | 12 +-
.../apache/reef/tang/TestConfFileParser.java | 119 ---------
.../reef/tang/TestImplicitConversions.java | 17 +-
.../reef/tang/TestNamedParameterRoundTrip.java | 12 +-
.../java/org/apache/reef/tang/TestTang.java | 15 +-
.../tang/formats/ConfigurationFileTest.java | 2 +-
.../tang/formats/TestConfigurationModule.java | 5 +-
.../org/apache/reef/wake/WakeConfiguration.java | 16 +-
13 files changed, 152 insertions(+), 438 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/examples/Timer.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/examples/Timer.java
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/examples/Timer.java
index 7cfcc4b..81fd1d4 100644
---
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/examples/Timer.java
+++
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/examples/Timer.java
@@ -24,8 +24,8 @@ import org.apache.reef.tang.Tang;
import org.apache.reef.tang.annotations.Name;
import org.apache.reef.tang.annotations.NamedParameter;
import org.apache.reef.tang.annotations.Parameter;
+import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.apache.reef.tang.formats.CommandLine;
-import org.apache.reef.tang.formats.ConfigurationFile;
import org.apache.reef.tang.implementation.InjectionPlan;
import org.apache.reef.tang.implementation.java.InjectorImpl;
@@ -50,7 +50,8 @@ public class Timer {
cl.processCommandLine(args);
final Configuration conf = cb.build();
System.out.println("start conf");
- System.out.println(ConfigurationFile.toConfigurationString(conf));
+ final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
+ System.out.println(avroSerializer.toString(conf));
System.out.println("end conf");
final InjectorImpl injector = (InjectorImpl) tang.newInjector(conf);
final InjectionPlan<Timer> ip = injector.getInjectionPlan(Timer.class);
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroConfigurationSerializer.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroConfigurationSerializer.java
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroConfigurationSerializer.java
index 8351efe..f89c44a 100644
---
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroConfigurationSerializer.java
+++
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/AvroConfigurationSerializer.java
@@ -64,8 +64,7 @@ public final class AvroConfigurationSerializer implements
ConfigurationSerialize
private static void fromAvro(final AvroConfiguration avroConfiguration,
final ConfigurationBuilder
configurationBuilder) throws BindException {
- // Note: This code is an adapted version of
ConfigurationFile.processConfigFile();
- // TODO: This method should implement list deserialization. Implement it
when C# side is ready.
+ // TODO[JIRA REEF-402]: This method should implement list deserialization.
Implement it when C# side is ready.
final Map<String, String> importedNames = new HashMap<>();
for (final ConfigurationEntry entry : avroConfiguration.getBindings()) {
@@ -82,7 +81,7 @@ public final class AvroConfigurationSerializer implements
ConfigurationSerialize
final Object rawValue = entry.getValue();
try {
- // TODO: Implement list deserialization
+ // TODO[JIRA REEF-402]: Implement list deserialization
// rawValue is String.
final String value = rawValue.toString();
if (key.equals(ConfigurationBuilderImpl.IMPORT)) {
@@ -136,8 +135,7 @@ public final class AvroConfigurationSerializer implements
ConfigurationSerialize
}
public AvroConfiguration toAvro(final Configuration configuration) {
- // Note: This code is an adapted version of
ConfiurationFile.toConfigurationStringList();
- // TODO: This method should implement list serialization. Implement it
when C# side is ready.
+ // TODO[JIRA REEF-402]: This method should implement list serialization.
Implement it when C# side is ready.
final List<ConfigurationEntry> configurationEntries = new ArrayList<>();
@@ -181,7 +179,7 @@ public final class AvroConfigurationSerializer implements
ConfigurationSerialize
.setValue(val)
.build());
}
- // TODO: Implement list serialization
+ // TODO[JIRA REEF-402]: Implement list serialization
if (configuration.getBoundLists() != null &&
!configuration.getBoundLists().isEmpty()) {
throw new NotImplementedException("List serialization/deserialization is
not supported");
}
@@ -321,4 +319,16 @@ public final class AvroConfigurationSerializer implements
ConfigurationSerialize
return fromAvro(avroFromString(theString), classHierarchy);
}
+ /**
+ * Converts a given serialized string to ConfigurationBuilder from which
Configuration can be produced.
+ *
+ * @param theString
+ * @param configBuilder
+ * @throws IOException
+ * @throws BindException
+ */
+ public void configurationBuilderFromString(final String theString, final
ConfigurationBuilder configBuilder)
+ throws IOException, BindException {
+ fromAvro(avroFromString(theString), configBuilder);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationFile.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationFile.java
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationFile.java
deleted file mode 100644
index 615df69..0000000
---
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationFile.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.reef.tang.formats;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.reef.tang.Configuration;
-import org.apache.reef.tang.ConfigurationBuilder;
-import org.apache.reef.tang.exceptions.BindException;
-import org.apache.reef.tang.exceptions.ClassHierarchyException;
-import org.apache.reef.tang.implementation.ConfigurationBuilderImpl;
-import org.apache.reef.tang.implementation.ConfigurationImpl;
-import org.apache.reef.tang.types.ClassNode;
-import org.apache.reef.tang.types.ConstructorArg;
-import org.apache.reef.tang.types.NamedParameterNode;
-import org.apache.reef.tang.types.Node;
-import org.apache.reef.tang.util.ReflectionUtilities;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.*;
-import java.util.Map.Entry;
-
-/**
- * @deprecated in Tang 0.2 Use AvroConfigurationSerializer instead.
- */
-@Deprecated
-public final class ConfigurationFile {
-
- /**
- * Write Configuration to the given File.
- *
- * @throws IOException
- * @deprecated in Tang 0.2 Use AvroConfigurationSerializer instead.
- */
- @Deprecated
- public static void writeConfigurationFile(
- final Configuration conf, final File confFile) throws IOException {
- try (final PrintStream printStream = new PrintStream(new
FileOutputStream(confFile))) {
- printStream.print(toConfigurationString(conf));
- }
- }
-
- /**
- * @deprecated in Tang 0.2 Use AvroConfigurationSerializer instead.
- */
- @Deprecated
- public static void addConfiguration(final ConfigurationBuilder conf,
- final File tmpConfFile) throws
IOException, BindException {
- final PropertiesConfiguration confFile;
- try {
- confFile = new PropertiesConfiguration(tmpConfFile);
- } catch (final ConfigurationException e) {
- throw new BindException("Problem parsing config file: " + tmpConfFile,
e);
- }
- processConfigFile(conf, confFile);
- }
-
- /**
- * @param conf This configuration builder will be modified to
incorporate the
- * contents of the configuration file.
- * @param contents A string containing the contents of the configuration
file.
- * @throws BindException
- * @deprecated in Tang 0.2 Use AvroConfigurationSerializer instead.
- */
- @Deprecated
- public static void addConfiguration(final ConfigurationBuilder conf,
- final String contents) throws
BindException {
- File tmpConfFile = null;
- try {
- tmpConfFile = File.createTempFile("tang", "tmp");
- try (final FileOutputStream outStream = new
FileOutputStream(tmpConfFile)) {
- outStream.write(contents.getBytes());
- }
- addConfiguration(conf, tmpConfFile);
- } catch (final IOException ex) {
- throw new BindException("Error writing config file: " + tmpConfFile, ex);
- } finally {
- if (tmpConfFile != null) {
- tmpConfFile.delete();
- }
- }
- }
-
- private static void processConfigFile(final ConfigurationBuilder conf,
- final PropertiesConfiguration
confFile) throws IOException, BindException {
- final ConfigurationBuilderImpl ci = (ConfigurationBuilderImpl) conf;
- final Iterator<String> it = confFile.getKeys();
- final Map<String, String> importedNames = new HashMap<>();
-
- while (it.hasNext()) {
- String key = it.next();
- final String longName = importedNames.get(key);
- final String[] values = confFile.getStringArray(key);
- if (longName != null) {
- // System.err.println("Mapped " + key + " to " + longName);
- key = longName;
- }
- for (final String value : values) {
- try {
- if (key.equals(ConfigurationBuilderImpl.IMPORT)) {
- ci.getClassHierarchy().getNode(value);
- final String[] tok = value.split(ReflectionUtilities.REGEXP);
- final String lastTok = tok[tok.length - 1];
- try {
- // ci.namespace.getNode(lastTok);
- ci.getClassHierarchy().getNode(lastTok);
- throw new IllegalArgumentException("Conflict on short name: " +
lastTok);
- } catch (final BindException e) {
- final String oldValue = importedNames.put(lastTok, value);
- if (oldValue != null) {
- throw new IllegalArgumentException("Name conflict: "
- + lastTok + " maps to " + oldValue + " and " + value);
- }
- }
- } else if (value.startsWith(ConfigurationBuilderImpl.INIT)) {
- String parseValue = value.substring(
- ConfigurationBuilderImpl.INIT.length(), value.length());
- parseValue = parseValue.replaceAll("^[\\s\\(]+", "");
- parseValue = parseValue.replaceAll("[\\s\\)]+$", "");
- final String[] classes = parseValue.split("[\\s\\-]+");
- ci.registerLegacyConstructor(key, classes);
- } else {
- ci.bind(key, value);
- }
- } catch (final BindException e) {
- throw new BindException("Failed to process configuration tuple: [" +
key + "=" + value + "]", e);
- } catch (final ClassHierarchyException e) {
- throw new ClassHierarchyException("Failed to process configuration
tuple: [" + key + "=" + value + "]", e);
- }
- }
- }
- }
-
- /**
- * Replace any \'s in the input string with \\. and any "'s with \".
- *
- * @param in
- * @return
- */
- private static String escape(final String in) {
- // After regexp escaping \\\\ = 1 slash, \\\\\\\\ = 2 slashes.
-
- // Also, the second args of replaceAll are neither strings nor regexps, and
- // are instead a special DSL used by Matcher. Therefore, we need to double
- // escape slashes (4 slashes) and quotes (3 slashes + ") in those strings.
- // Since we need to write \\ and \", we end up with 8 and 7 slashes,
- // respectively.
- return in.replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\\\\\"");
- }
-
- /**
- * Obtain the effective configuration of this ConfigurationBuilderImpl
- * instance. This consists of string-string pairs that could be written
- * directly to a Properties file, for example. Currently, this method does
not
- * return information about default parameter values that were specified by
- * parameter annotations, or about the auto-discovered stuff in
TypeHierarchy.
- * All of that should be automatically imported as these keys are parsed on
- * the other end.
- *
- * @return A string containing enough information to rebuild this
- * configuration object (assuming the same classes / jars are
- * available when the string is parsed by Tang).
- * @deprecated in Tang 0.2 Use AvroConfigurationSerializer instead.
- */
- @Deprecated
- public static String toConfigurationString(final Configuration c) {
- final StringBuilder sb = new StringBuilder();
- for (final String s : toConfigurationStringList(c)) {
- sb.append(s);
- sb.append('\n');
- }
- return sb.toString();
- }
-
- /**
- * @deprecated in Tang 0.2 Use AvroConfigurationSerializer instead.
- */
- @Deprecated
- static List<String> toConfigurationStringList(final Configuration c) {
- final ConfigurationImpl conf = (ConfigurationImpl) c;
- final List<String> l = new ArrayList<>();
- for (final ClassNode<?> opt : conf.getBoundImplementations()) {
- l.add(opt.getFullName()
- + '='
- + escape(conf.getBoundImplementation(opt).getFullName()));
- }
- for (final ClassNode<?> opt : conf.getBoundConstructors()) {
- l.add(opt.getFullName()
- + '='
- + escape(conf.getBoundConstructor(opt).getFullName()));
- }
- for (final NamedParameterNode<?> opt : conf.getNamedParameters()) {
- l.add(opt.getFullName()
- + '='
- + escape(conf.getNamedParameter(opt)));
- }
- for (final ClassNode<?> cn : conf.getLegacyConstructors()) {
- final StringBuilder sb = new StringBuilder();
- join(sb, "-", conf.getLegacyConstructor(cn).getArgs());
- l.add(cn.getFullName()
- + escape('='
- + ConfigurationBuilderImpl.INIT
- + '('
- + sb.toString()
- + ')'
- ));
-
//s.append(cn.getFullName()).append('=').append(ConfigurationBuilderImpl.INIT).append('(');
-// .append(")\n");
- }
- for (final Entry<NamedParameterNode<Set<?>>, Object> e :
conf.getBoundSets()) {
- final String val;
- if (e.getValue() instanceof String) {
- val = (String) e.getValue();
- } else if (e.getValue() instanceof Node) {
- val = ((Node) e.getValue()).getFullName();
- } else {
- throw new IllegalStateException();
- }
- l.add(e.getKey().getFullName() + '=' + escape(val));
-//
s.append(e.getKey().getFullName()).append('=').append(val).append("\n");
- }
- return l; //s.toString();
- }
-
- private static StringBuilder join(final StringBuilder sb, final String sep,
final ConstructorArg[] types) {
- if (types.length > 0) {
- sb.append(types[0].getType());
- for (int i = 1; i < types.length; i++) {
- sb.append(sep).append(types[i].getType());
- }
- }
- return sb;
- }
-
- /**
- * Empty private constructor to prohibit instantiation of utility class.
- */
- private ConfigurationFile() {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationModule.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationModule.java
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationModule.java
index bb8206d..4e746a9 100644
---
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationModule.java
+++
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/formats/ConfigurationModule.java
@@ -23,7 +23,12 @@ import org.apache.reef.tang.annotations.Name;
import org.apache.reef.tang.exceptions.BindException;
import org.apache.reef.tang.exceptions.ClassHierarchyException;
import org.apache.reef.tang.exceptions.NameResolutionException;
+import org.apache.reef.tang.implementation.ConfigurationBuilderImpl;
+import org.apache.reef.tang.implementation.ConfigurationImpl;
+import org.apache.reef.tang.types.ClassNode;
+import org.apache.reef.tang.types.ConstructorArg;
import org.apache.reef.tang.types.NamedParameterNode;
+import org.apache.reef.tang.types.Node;
import org.apache.reef.tang.util.*;
import java.lang.reflect.Field;
@@ -265,6 +270,82 @@ public class ConfigurationModule {
return nps;
}
+ /**
+ * Replace any \'s in the input string with \\. and any "'s with \".
+ *
+ * @param in
+ * @return
+ */
+ private static String escape(final String in) {
+ // After regexp escaping \\\\ = 1 slash, \\\\\\\\ = 2 slashes.
+
+ // Also, the second args of replaceAll are neither strings nor regexps, and
+ // are instead a special DSL used by Matcher. Therefore, we need to double
+ // escape slashes (4 slashes) and quotes (3 slashes + ") in those strings.
+ // Since we need to write \\ and \", we end up with 8 and 7 slashes,
+ // respectively.
+ return in.replaceAll("\\\\", "\\\\\\\\").replaceAll("\"", "\\\\\\\"");
+ }
+
+ private static StringBuilder join(final StringBuilder sb, final String sep,
final ConstructorArg[] types) {
+ if (types.length > 0) {
+ sb.append(types[0].getType());
+ for (int i = 1; i < types.length; i++) {
+ sb.append(sep).append(types[i].getType());
+ }
+ }
+ return sb;
+ }
+
+ /**
+ * Convert Configuration to a list of strings formatted as "param=value".
+ *
+ * @param c
+ * @return
+ */
+ private static List<String> toConfigurationStringList(final Configuration c)
{
+ final ConfigurationImpl conf = (ConfigurationImpl) c;
+ final List<String> l = new ArrayList<>();
+ for (final ClassNode<?> opt : conf.getBoundImplementations()) {
+ l.add(opt.getFullName()
+ + '='
+ + escape(conf.getBoundImplementation(opt).getFullName()));
+ }
+ for (final ClassNode<?> opt : conf.getBoundConstructors()) {
+ l.add(opt.getFullName()
+ + '='
+ + escape(conf.getBoundConstructor(opt).getFullName()));
+ }
+ for (final NamedParameterNode<?> opt : conf.getNamedParameters()) {
+ l.add(opt.getFullName()
+ + '='
+ + escape(conf.getNamedParameter(opt)));
+ }
+ for (final ClassNode<?> cn : conf.getLegacyConstructors()) {
+ final StringBuilder sb = new StringBuilder();
+ join(sb, "-", conf.getLegacyConstructor(cn).getArgs());
+ l.add(cn.getFullName()
+ + escape('='
+ + ConfigurationBuilderImpl.INIT
+ + '('
+ + sb.toString()
+ + ')'
+ ));
+ }
+ for (final Entry<NamedParameterNode<Set<?>>, Object> e :
conf.getBoundSets()) {
+ final String val;
+ if (e.getValue() instanceof String) {
+ val = (String) e.getValue();
+ } else if (e.getValue() instanceof Node) {
+ val = ((Node) e.getValue()).getFullName();
+ } else {
+ throw new IllegalStateException();
+ }
+ l.add(e.getKey().getFullName() + '=' + escape(val));
+ }
+ return l;
+ }
+
public List<Entry<String, String>> toStringPairs() {
final List<Entry<String, String>> ret = new ArrayList<>();
class MyEntry implements Entry<String, String> {
@@ -300,7 +381,7 @@ public class ConfigurationModule {
ret.add(new MyEntry(ReflectionUtilities.getFullName(c),
this.builder.map.get(this.builder.freeImpls.get(c)).getName()));
}
- for (final String s :
ConfigurationFile.toConfigurationStringList(builder.b.build())) {
+ for (final String s : toConfigurationStringList(builder.b.build())) {
final String[] tok = s.split("=", 2);
ret.add(new MyEntry(tok[0], tok[1]));
}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/util/ValidateConfiguration.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/util/ValidateConfiguration.java
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/util/ValidateConfiguration.java
index 331f384..bb74c19 100644
---
a/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/util/ValidateConfiguration.java
+++
b/lang/java/reef-tang/tang/src/main/java/org/apache/reef/tang/util/ValidateConfiguration.java
@@ -24,8 +24,8 @@ import org.apache.reef.tang.annotations.NamedParameter;
import org.apache.reef.tang.annotations.Parameter;
import org.apache.reef.tang.exceptions.BindException;
import org.apache.reef.tang.exceptions.InjectionException;
+import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.apache.reef.tang.formats.CommandLine;
-import org.apache.reef.tang.formats.ConfigurationFile;
import org.apache.reef.tang.implementation.InjectionPlan;
import
org.apache.reef.tang.implementation.protobuf.ProtocolBufferClassHierarchy;
import org.apache.reef.tang.proto.ClassHierarchyProto;
@@ -36,14 +36,11 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
-// TODO Clean up the code which are deprecated and commented out.
public class ValidateConfiguration {
private final String target;
private final File ch;
private final File inConfig;
private final File outConfig;
-// @NamedParameter(short_name="ip")
-// public class InjectionPlanOut implements Name<File> { }
@Inject
public ValidateConfiguration(
@@ -54,7 +51,6 @@ public class ValidateConfiguration {
this.ch = ch;
this.inConfig = inConfig;
this.outConfig = outConfig;
-// this.injectionPlan = injectionPlan;
}
@Inject
@@ -87,36 +83,30 @@ public class ValidateConfiguration {
final Tang t = Tang.Factory.getTang();
- // TODO Use the AvroClassHierarchySerializer
+ // TODO[JIRA REEF-400] Use the AvroClassHierarchySerializer
final ClassHierarchyProto.Node root;
try (final InputStream chin = new FileInputStream(this.ch)) {
root = ClassHierarchyProto.Node.parseFrom(chin);
}
final ClassHierarchy classHierarchy = new
ProtocolBufferClassHierarchy(root);
- final ConfigurationBuilder cb = t.newConfigurationBuilder(classHierarchy);
if (!inConfig.canRead()) {
throw new IOException("Cannot read input config file: " + inConfig);
}
- ConfigurationFile.addConfiguration(cb, inConfig);
+ final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
+ final Configuration conf = avroSerializer.fromFile(inConfig,
classHierarchy);
if (target != null) {
- final Injector i = t.newInjector(cb.build());
+ final Injector i = t.newInjector(conf);
final InjectionPlan<?> ip = i.getInjectionPlan(target);
if (!ip.isInjectable()) {
throw new InjectionException(target + " is not injectable: " +
ip.toCantInjectString());
}
}
- ConfigurationFile.writeConfigurationFile(cb.build(), outConfig);
-
-// Injector i = t.newInjector(cb.build());
-// InjectionPlan<?> ip = i.getInjectionPlan(target);
-// try (final OutputStream ipout = new FileOutputStream(injectionPlan)) {
-// new ProtocolBufferInjectionPlan().serialize(ip).writeTo(ipout);
-// }
+ avroSerializer.toFile(conf, outConfig);
}
public static class FileParser implements ExternalConstructor<File> {
@@ -133,7 +123,6 @@ public class ValidateConfiguration {
}
}
-// private final File injectionPlan;
@NamedParameter(short_name = "class")
public class Target implements Name<String> {
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestBindSingleton.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestBindSingleton.java
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestBindSingleton.java
index 43dedec..6de8aa7 100644
---
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestBindSingleton.java
+++
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestBindSingleton.java
@@ -20,13 +20,15 @@ package org.apache.reef.tang;
import org.apache.reef.tang.exceptions.BindException;
import org.apache.reef.tang.exceptions.InjectionException;
-import org.apache.reef.tang.formats.ConfigurationFile;
+import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import javax.inject.Inject;
+import java.io.IOException;
+
import static org.junit.Assert.assertTrue;
public class TestBindSingleton {
@@ -49,16 +51,16 @@ public class TestBindSingleton {
}
@Test
- public void testSingletonRoundTrip() throws BindException,
InjectionException {
+ public void testSingletonRoundTrip() throws BindException,
InjectionException, IOException {
final JavaConfigurationBuilder b = Tang.Factory.getTang()
.newConfigurationBuilder();
b.bindImplementation(A.class, B.class);
final Configuration src = b.build();
- final JavaConfigurationBuilder dest = Tang.Factory.getTang()
- .newConfigurationBuilder();
- ConfigurationFile.addConfiguration(dest,
ConfigurationFile.toConfigurationString(src));
+ final JavaConfigurationBuilder dest =
Tang.Factory.getTang().newConfigurationBuilder();
+ final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
+
avroSerializer.configurationBuilderFromString(avroSerializer.toString(src),
dest);
final Injector i = Tang.Factory.getTang().newInjector(dest.build());
final A a1 = i.getInstance(A.class);
final A a2 = i.getInstance(A.class);
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestConfFileParser.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestConfFileParser.java
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestConfFileParser.java
deleted file mode 100644
index d11a98e..0000000
---
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestConfFileParser.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.reef.tang;
-
-import org.apache.reef.tang.annotations.Name;
-import org.apache.reef.tang.annotations.NamedParameter;
-import org.apache.reef.tang.exceptions.BindException;
-import org.apache.reef.tang.exceptions.InjectionException;
-import org.apache.reef.tang.formats.ConfigurationFile;
-import org.apache.reef.tang.implementation.TangImpl;
-import org.apache.reef.tang.util.ReflectionUtilities;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import javax.inject.Inject;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-public class TestConfFileParser {
-
- @Before
- public void setUp() {
- TangImpl.reset();
- }
-
- @Test
- public void testRoundTrip() throws BindException {
- // TODO: This likely only passes on windows, as it relies on newlines
- // being \r\n, and on java.lang.Object having a lower hash code than
- // org.apache.reef.tang.TestConfFileParser
- final Tang t = Tang.Factory.getTang();
- final JavaConfigurationBuilder cb = t.newConfigurationBuilder();
- final String in =
"org.apache.reef.tang.TestConfFileParser=org.apache.reef.tang.TestConfFileParser\n";
- ConfigurationFile.addConfiguration(cb, in);
- final String out = ConfigurationFile.toConfigurationString(cb.build());
- Assert.assertEquals(in, out);
- }
-
- @Test
- public void testBindSingleton() throws BindException {
- // TODO: This likely only passes on windows, as it relies on newlines
- // being \r\n, and on java.lang.Object having a lower hash code than
- // org.apache.reef.tang.TestConfFileParser
- final Tang t = Tang.Factory.getTang();
- final JavaConfigurationBuilder cb = t.newConfigurationBuilder();
- cb.bindImplementation(SingleTest.A.class, SingleTest.B.class);
-
- final String out = ConfigurationFile.toConfigurationString(cb.build());
- final String in =
"org.apache.reef.tang.SingleTest$A=org.apache.reef.tang.SingleTest$B\n";
- Assert.assertEquals(in, out);
- }
-
- @Test
- public void testNamedParameter() throws BindException {
- final Tang t = Tang.Factory.getTang();
- final String conf = "org.apache.reef.tang.TestConfFileParser$Foo=woot";
- final ConfigurationBuilder cb = t.newConfigurationBuilder();
- ConfigurationFile.addConfiguration(cb, conf);
- Assert.assertTrue(t.newInjector(cb.build()).isParameterSet(Foo.class));
- }
-
- @Test
- public void testNamedParameter2() throws BindException, IOException,
InjectionException {
-
- final String value = "socket://131.179.176.216:19278";
- final File tmp = File.createTempFile("test", "conf");
-
- try (final FileOutputStream fout = new FileOutputStream(tmp)) {
- final String line =
ReflectionUtilities.getFullName(RemoteIdentifier.class) + "=" + value;
- fout.write(line.getBytes());
- }
-
- final JavaConfigurationBuilder cb =
Tang.Factory.getTang().newConfigurationBuilder();
- ConfigurationFile.addConfiguration(cb, tmp);
- final Injector i = Tang.Factory.getTang().newInjector(cb.build());
- Assert.assertEquals(value, i.getNamedInstance(RemoteIdentifier.class));
- }
-
- @NamedParameter(doc = "remote id.")
- private static final class RemoteIdentifier implements Name<String> {
- }
-
- @NamedParameter()
- class Foo implements Name<String> {
- }
-}
-
-@NamedParameter
-final class Foo implements Name<String> {
-}
-
-class SingleTest {
- static class A {
- }
-
- static class B extends A {
- @Inject
- B() {
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestImplicitConversions.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestImplicitConversions.java
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestImplicitConversions.java
index f39a1cb..98883c0 100644
---
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestImplicitConversions.java
+++
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestImplicitConversions.java
@@ -22,26 +22,29 @@ import org.apache.reef.tang.annotations.Name;
import org.apache.reef.tang.annotations.NamedParameter;
import org.apache.reef.tang.exceptions.BindException;
import org.apache.reef.tang.exceptions.InjectionException;
-import org.apache.reef.tang.formats.ConfigurationFile;
+import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.apache.reef.tang.types.NamedParameterNode;
import org.apache.reef.tang.util.ReflectionUtilities;
import org.junit.Assert;
import org.junit.Test;
import javax.inject.Inject;
+import java.io.IOException;
public class TestImplicitConversions {
+ private final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
+
@SuppressWarnings("unchecked")
@Test
- public void testBindFromString() throws BindException, InjectionException {
+ public void testBindFromString() throws BindException, InjectionException,
IOException {
final JavaConfigurationBuilder b =
Tang.Factory.getTang().newConfigurationBuilder(IdentifierParser.class);
b.bindNamedParameter(IdName.class, "b://b");
final Configuration c = b.build();
- final String s = ConfigurationFile.toConfigurationString(c);
+ final String s = avroSerializer.toString(c);
final JavaConfigurationBuilder b2 =
Tang.Factory.getTang().newConfigurationBuilder(IdentifierParser.class);
- ConfigurationFile.addConfiguration(b2, s);
+ avroSerializer.configurationBuilderFromString(s, b2);
final Configuration c2 = b2.build();
Assert.assertEquals("b://b", c2.getNamedParameter(
@@ -55,16 +58,16 @@ public class TestImplicitConversions {
@SuppressWarnings("unchecked")
@Test
- public void testBindSubclassFromString() throws BindException,
InjectionException {
+ public void testBindSubclassFromString() throws BindException,
InjectionException, IOException {
final JavaConfigurationBuilder b =
Tang.Factory.getTang().newConfigurationBuilder(IdentifierParser.class);
b.bindNamedParameter(AIdName.class, "a://a");
b.bindNamedParameter(BIdName.class, "b://b");
final Configuration c = b.build();
- final String s = ConfigurationFile.toConfigurationString(c);
+ final String s = avroSerializer.toString(c);
final JavaConfigurationBuilder b2 =
Tang.Factory.getTang().newConfigurationBuilder(IdentifierParser.class);
- ConfigurationFile.addConfiguration(b2, s);
+ avroSerializer.configurationBuilderFromString(s, b2);
final Configuration c2 = b2.build();
Assert.assertEquals("b://b", c2.getNamedParameter(
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestNamedParameterRoundTrip.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestNamedParameterRoundTrip.java
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestNamedParameterRoundTrip.java
index f3706ec..e2b94ea 100644
---
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestNamedParameterRoundTrip.java
+++
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestNamedParameterRoundTrip.java
@@ -22,15 +22,17 @@ import org.apache.reef.tang.annotations.Name;
import org.apache.reef.tang.annotations.NamedParameter;
import org.apache.reef.tang.exceptions.BindException;
import org.apache.reef.tang.exceptions.InjectionException;
-import org.apache.reef.tang.formats.ConfigurationFile;
+import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.junit.Test;
+import java.io.IOException;
+
import static org.junit.Assert.assertEquals;
public class TestNamedParameterRoundTrip {
@Test
- public void testRoundTrip() throws BindException, InjectionException {
+ public void testRoundTrip() throws BindException, InjectionException,
IOException {
final int d = 10;
final double eps = 1e-5;
final JavaConfigurationBuilder b =
Tang.Factory.getTang().newConfigurationBuilder();
@@ -46,9 +48,10 @@ public class TestNamedParameterRoundTrip {
assertEquals(eps, readEps1, 1e-12);
assertEquals(d, readD1);
+ final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
final JavaConfigurationBuilder roundTrip2 =
Tang.Factory.getTang().newConfigurationBuilder();
- ConfigurationFile.addConfiguration(roundTrip2,
ConfigurationFile.toConfigurationString(conf));
+
avroSerializer.configurationBuilderFromString(avroSerializer.toString(conf),
roundTrip2);
final Injector i2 = Tang.Factory.getTang().newInjector(roundTrip2.build());
final int readD2 = i2.getNamedInstance(Dimensionality.class).intValue();
@@ -72,8 +75,7 @@ public class TestNamedParameterRoundTrip {
final Injector parent4 =
Tang.Factory.getTang().newInjector(Tang.Factory.getTang().newConfigurationBuilder().build());
final JavaConfigurationBuilder roundTrip4 =
Tang.Factory.getTang().newConfigurationBuilder();
- ConfigurationFile.addConfiguration(roundTrip4,
- ConfigurationFile.toConfigurationString(conf));
+
avroSerializer.configurationBuilderFromString(avroSerializer.toString(conf),
roundTrip4);
final Injector i4 = parent4.forkInjector(roundTrip4.build());
final int readD4 = i4.getNamedInstance(Dimensionality.class).intValue();
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
index 55b043f..697c291 100644
--- a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
+++ b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/TestTang.java
@@ -26,7 +26,7 @@ import org.apache.reef.tang.exceptions.BindException;
import org.apache.reef.tang.exceptions.ClassHierarchyException;
import org.apache.reef.tang.exceptions.InjectionException;
import org.apache.reef.tang.exceptions.NameResolutionException;
-import org.apache.reef.tang.formats.ConfigurationFile;
+import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.apache.reef.tang.util.ReflectionUtilities;
import org.junit.Assert;
import org.junit.Before;
@@ -35,6 +35,7 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import javax.inject.Inject;
+import java.io.IOException;
interface SMC {
}
@@ -307,17 +308,17 @@ public class TestTang {
}
@Test
- public void testLegacyConstructor() throws BindException, InjectionException
{
+ public void testLegacyConstructor() throws BindException,
InjectionException, IOException {
final JavaConfigurationBuilder cb = tang.newConfigurationBuilder();
cb.registerLegacyConstructor(
ReflectionUtilities.getFullName(LegacyConstructor.class),
ReflectionUtilities.getFullName(Integer.class),
ReflectionUtilities.getFullName(String.class));
cb.bind(LegacyConstructor.class, LegacyConstructor.class);
- final String confString =
ConfigurationFile.toConfigurationString(cb.build());
+ final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
+ final String confString = avroSerializer.toString(cb.build());
final JavaConfigurationBuilder cb2 = tang.newConfigurationBuilder();
- // System.err.println(confString);
- ConfigurationFile.addConfiguration(cb2, confString);
+ avroSerializer.configurationBuilderFromString(confString, cb2);
final Injector i = tang.newInjector(cb2.build());
i.bindVolatileInstance(Integer.class, 42);
i.bindVolatileInstance(String.class, "The meaning of life is ");
@@ -1225,6 +1226,10 @@ class MyEventHandler<T> implements EventHandler<T> {
}
}
+@NamedParameter
+final class Foo implements Name<String> {
+}
+
@NamedParameter(default_class = MyEventHandler.class)
class FooEventHandler implements Name<EventHandler<Foo>> {
}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/ConfigurationFileTest.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/ConfigurationFileTest.java
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/ConfigurationFileTest.java
index a793a11..b4a0527 100644
---
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/ConfigurationFileTest.java
+++
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/ConfigurationFileTest.java
@@ -27,7 +27,7 @@ import org.apache.reef.tang.test.RoundTripTest;
import java.io.File;
/**
- * Tests the file writing routines in ConfigurationFile.
+ * Tests the file writing routines in AvroConfigurationSerializer.
*/
public final class ConfigurationFileTest extends RoundTripTest {
@Override
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/TestConfigurationModule.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/TestConfigurationModule.java
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/TestConfigurationModule.java
index 32226a7..6891234 100644
---
a/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/TestConfigurationModule.java
+++
b/lang/java/reef-tang/tang/src/test/java/org/apache/reef/tang/formats/TestConfigurationModule.java
@@ -312,13 +312,14 @@ public class TestConfigurationModule {
}
@Test
- public void setClassRoundTripTest() throws BindException, InjectionException
{
+ public void setClassRoundTripTest() throws BindException,
InjectionException, IOException {
final Configuration c = SetClassConfigurationModule.CONF
.set(SetClassConfigurationModule.P, SubA.class)
.set(SetClassConfigurationModule.P, SubB.class)
.build();
final ConfigurationBuilder cb =
Tang.Factory.getTang().newConfigurationBuilder();
- ConfigurationFile.addConfiguration(cb,
ConfigurationFile.toConfigurationString(c));
+ final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
+ avroSerializer.configurationBuilderFromString(avroSerializer.toString(c),
cb);
final Set<Super> s =
Tang.Factory.getTang().newInjector(cb.build()).getNamedInstance(SetClass.class);
Assert.assertEquals(2, s.size());
boolean sawA = false, sawB = false;
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/f9c4d4e5/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/WakeConfiguration.java
----------------------------------------------------------------------
diff --git
a/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/WakeConfiguration.java
b/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/WakeConfiguration.java
index 3c8d787..5c97e0f 100644
---
a/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/WakeConfiguration.java
+++
b/lang/java/reef-wake/wake/src/main/java/org/apache/reef/wake/WakeConfiguration.java
@@ -18,13 +18,12 @@
*/
package org.apache.reef.wake;
-import org.apache.reef.tang.JavaConfigurationBuilder;
-import org.apache.reef.tang.Tang;
+import org.apache.reef.tang.Configuration;
import org.apache.reef.tang.annotations.Name;
import org.apache.reef.tang.annotations.NamedParameter;
import org.apache.reef.tang.annotations.Parameter;
import org.apache.reef.tang.exceptions.BindException;
-import org.apache.reef.tang.formats.ConfigurationFile;
+import org.apache.reef.tang.formats.AvroConfigurationSerializer;
import org.apache.reef.wake.exception.WakeRuntimeException;
import javax.inject.Inject;
@@ -35,7 +34,9 @@ import java.util.logging.Logger;
/**
* Wake parameter configuration.
+ * @deprecated in 0.12 Unused
*/
+@Deprecated
public final class WakeConfiguration {
private static final Logger LOG =
Logger.getLogger(WakeConfiguration.class.getName());
@@ -44,13 +45,10 @@ public final class WakeConfiguration {
if (confFileName.equals("")) {
LOG.log(Level.WARNING, "The Wake configuration file is not specified.");
} else {
- final Tang t = Tang.Factory.getTang();
- final JavaConfigurationBuilder cb = t.newConfigurationBuilder();
+ final AvroConfigurationSerializer avroSerializer = new
AvroConfigurationSerializer();
try {
- ConfigurationFile.addConfiguration(cb, new File(confFileName));
- } catch (final BindException e) {
- throw new WakeRuntimeException(e);
- } catch (final IOException e) {
+ final Configuration conf = avroSerializer.fromFile(new
File(confFileName));
+ } catch (final BindException | IOException e) {
throw new WakeRuntimeException(e);
}
}