You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by we...@apache.org on 2015/01/29 21:42:57 UTC
[13/31] incubator-reef git commit: [REEF-97] Add the REEF.NET code
base
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Interface/ICsConfigurationBuilder.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Interface/ICsConfigurationBuilder.cs b/lang/cs/Source/TANG/Tang/Interface/ICsConfigurationBuilder.cs
new file mode 100644
index 0000000..c6e6864
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Interface/ICsConfigurationBuilder.cs
@@ -0,0 +1,121 @@
+/**
+ * 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.
+ */
+using System;
+using System.Collections.Generic;
+using Org.Apache.Reef.Tang.Annotations;
+using Org.Apache.Reef.Tang.Util;
+
+namespace Org.Apache.Reef.Tang.Interface
+{
+ public interface ICsConfigurationBuilder : IConfigurationBuilder
+ {
+ /// <summary>
+ /// Binds the named parameter.
+ /// </summary>
+ /// <param name="name">The name.</param>
+ /// <param name="value">The value.</param>
+ ICsConfigurationBuilder BindNamedParameter(Type name, string value); //name must extend from Name<T>
+
+ /// <summary>
+ /// Binds the class impl as the implementation of the interface iface
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <param name="impl">The impl.</param>
+ ICsConfigurationBuilder BindImplementation(Type iface, Type impl);
+
+ /// <summary>
+ /// Binds the List entry.
+ /// </summary>
+ /// <param name="iface">The iface. It is a Name of IList</param>
+ /// <param name="impl">The impl.</param>
+ ICsConfigurationBuilder BindList(Type iface, IList<Type> impl);
+
+ /// <summary>
+ /// Binds the named parameter.
+ /// </summary>
+ /// <typeparam name="U"></typeparam>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="name">The name.</param>
+ /// <param name="value">The value.</param>
+ ICsConfigurationBuilder BindNamedParameter<U, T>(GenericType<U> name, string value)
+ where U : Name<T>;
+
+ /// <summary>
+ /// Binds the named parameter.
+ /// </summary>
+ /// <typeparam name="U"></typeparam>
+ /// <typeparam name="V"></typeparam>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="iface">The iface.</param>
+ /// <param name="impl">The impl.</param>
+ ICsConfigurationBuilder BindNamedParameter<U, V, T>(GenericType<U> iface, GenericType<V> impl)
+ where U : Name<T>
+ where V : T;
+
+ /// <summary>
+ /// Binds the implementation.
+ /// </summary>
+ /// <typeparam name="U"></typeparam>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="iface">The iface.</param>
+ /// <param name="impl">The impl.</param>
+ ICsConfigurationBuilder BindImplementation<U, T>(GenericType<U> iface, GenericType<T> impl)
+ where T : U;
+
+ //public <T> void bindConstructor(Class<T> c, Class<? extends ExternalConstructor<? extends T>> v) throws BindException;
+ ICsConfigurationBuilder BindConstructor<T, U>(GenericType<T> c, GenericType<U> v)
+ where U : IExternalConstructor<T>;
+
+ //public <T> void bindSetEntry(Class<? extends Name<Set<T>>> iface, String value) throws BindException;
+ ICsConfigurationBuilder BindSetEntry<U, T>(GenericType<U> iface, string value)
+ where U : Name<ISet<T>>;
+
+ //public <T> void bindSetEntry(Class<? extends Name<Set<T>>> iface, Class<? extends T> impl) throws BindException;
+ ICsConfigurationBuilder BindSetEntry<U, V, T>(GenericType<U> iface, GenericType<V> impl)
+ where U : Name<ISet<T>>
+ where V : T;
+
+ ICsConfigurationBuilder BindList<U, V, T>(GenericType<U> iface, IList<GenericType<V>> impl)
+ where U : Name<IList<T>>
+ where V : T;
+
+ ICsConfigurationBuilder BindList<U, T>(GenericType<U> iface, IList<string> impl)
+ where U : Name<IList<T>>;
+
+ ICsConfigurationBuilder BindNamedParameter<U, V, T>()
+ where U : Name<T>
+ where V : T;
+
+ ICsConfigurationBuilder BindNamedParam<TName, TType>(string str) where TName : Name<TType>;
+
+ ICsConfigurationBuilder BindStringNamedParam<T>(string str) where T : Name<string>;
+
+ ICsConfigurationBuilder BindIntNamedParam<T>(string str) where T : Name<int>;
+
+ ICsConfigurationBuilder BindImplementation<T1, T2>() where T2 : T1;
+
+ ICsConfigurationBuilder BindSetEntry<T1, T2, T3>() where T1 : Name<ISet<T3>> where T2 : T3;
+
+ ICsConfigurationBuilder BindSetEntry<U, T>(string value) where U : Name<ISet<T>>;
+
+ ICsConfigurationBuilder BindList<U, T>(IList<string> impl) where U : Name<IList<T>>;
+
+ ICsConfigurationBuilder BindConstructor<T, U>() where U : IExternalConstructor<T>;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Interface/ICsInternalConfigurationBuilder.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Interface/ICsInternalConfigurationBuilder.cs b/lang/cs/Source/TANG/Tang/Interface/ICsInternalConfigurationBuilder.cs
new file mode 100644
index 0000000..5386edf
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Interface/ICsInternalConfigurationBuilder.cs
@@ -0,0 +1,70 @@
+/**
+ * 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.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Org.Apache.Reef.Tang.Interface
+{
+ internal interface ICsInternalConfigurationBuilder : ICsConfigurationBuilder
+ {
+ /// <summary>
+ /// Bind named parameters, implementations or external constructors, depending
+ /// on the types of the classes passed in.
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <param name="impl">The impl.</param>
+ ICsInternalConfigurationBuilder Bind(Type iface, Type impl);
+
+ /// <summary>
+ /// Binds the named parameter.
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <param name="impl">The impl.</param>
+ ICsInternalConfigurationBuilder BindNamedParameter(Type iface, Type impl);
+
+ /// <summary>
+ /// Binds an external constructor.
+ /// </summary>
+ /// <param name="c">The c.</param>
+ /// <param name="v">The v.</param>
+ ICsInternalConfigurationBuilder BindConstructor(Type c, Type v);
+
+ /// <summary>
+ /// Binds the set entry.
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <param name="value">The value.</param>
+ ICsInternalConfigurationBuilder BindSetEntry(Type iface, string value);
+
+ /// <summary>
+ /// Binds the set entry.
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <param name="impl">The impl.</param>
+ ICsInternalConfigurationBuilder BindSetEntry(Type iface, Type impl);
+
+ /// <summary>
+ /// Binds the List entry.
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <param name="impl">The impl.</param>
+ ICsInternalConfigurationBuilder BindList(Type iface, IList<string> impl);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Interface/IExternalConstructor.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Interface/IExternalConstructor.cs b/lang/cs/Source/TANG/Tang/Interface/IExternalConstructor.cs
new file mode 100644
index 0000000..eb7bc84
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Interface/IExternalConstructor.cs
@@ -0,0 +1,26 @@
+/**
+ * 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.
+ */
+
+namespace Org.Apache.Reef.Tang.Interface
+{
+ public interface IExternalConstructor<out T>
+ {
+ T NewInstance();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Interface/IInjector.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Interface/IInjector.cs b/lang/cs/Source/TANG/Tang/Interface/IInjector.cs
new file mode 100644
index 0000000..282a9d1
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Interface/IInjector.cs
@@ -0,0 +1,180 @@
+/**
+ * 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.
+ */
+using System;
+using Org.Apache.Reef.Tang.Annotations;
+using Org.Apache.Reef.Tang.Implementations;
+using Org.Apache.Reef.Tang.Util;
+
+namespace Org.Apache.Reef.Tang.Interface
+{
+ public interface IInjector
+ {
+ /// <summary>
+ /// Gets an instance of iface, or the implementation that has been bound to it.
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <returns></returns>
+ object GetInstance(Type iface);
+
+ /// <summary>
+ /// Gets the instance for a given class
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <returns></returns>
+ T GetInstance<T>() where T : class;
+
+ /// <summary>
+ /// Gets the instance for a given class name
+ /// </summary>
+ /// <param name="iface">The iface.</param>
+ /// <returns></returns>
+ object GetInstance(string iface);
+
+ /// <summary>
+ /// Get an instance of the named parameter.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <typeparam name="U"></typeparam>
+ /// <param name="clazz">The clazz.</param>
+ /// <returns></returns>
+ U GetNamedInstance<T, U>(GenericType<T> clazz) where T : Name<U>;
+
+ /// <summary>
+ /// Get an instance of the named parameter.
+ /// </summary>
+ /// <param name="t">t, it must inherit from Name</param>
+ /// <returns></returns>
+ object GetNamedInstance(Type t);
+
+ /// <summary>
+ /// Gets the injection plan.
+ /// </summary>
+ /// <param name="name">The name.</param>
+ /// <returns></returns>
+ InjectionPlan GetInjectionPlan(Type name);
+
+ /// <summary>
+ /// Gets the injection plan for a given class name
+ /// </summary>
+ /// <param name="name">The name.</param>
+ /// <returns></returns>
+ InjectionPlan GetInjectionPlan(String name);
+
+ /// <summary>
+ /// Binds the aspect.
+ /// </summary>
+ /// <param name="a">A.</param>
+ void BindAspect(Aspect a);
+
+ /// <summary>
+ /// Gets the aspect.
+ /// </summary>
+ /// <returns></returns>
+ Aspect GetAspect();
+
+ /// <summary>
+ /// Determines whether the specified name is injectable.
+ /// </summary>
+ /// <param name="name">The name.</param>
+ /// <returns>
+ /// <c>true</c> if the specified name is injectable; otherwise, <c>false</c>.
+ /// </returns>
+ bool IsInjectable(string name);
+
+ /// <summary>
+ /// Determines whether [is parameter set] [the specified name].
+ /// </summary>
+ /// <param name="name">The name.</param>
+ /// <returns>
+ /// <c>true</c> if [is parameter set] [the specified name]; otherwise, <c>false</c>.
+ /// </returns>
+ bool IsParameterSet(String name);
+
+ /// <summary>
+ /// Determines whether the specified clazz is injectable.
+ /// </summary>
+ /// <param name="clazz">The clazz.</param>
+ /// <returns>
+ /// <c>true</c> if the specified clazz is injectable; otherwise, <c>false</c>.
+ /// </returns>
+ bool IsInjectable(Type clazz);
+
+ /// <summary>
+ /// Determines whether [is parameter set] [the specified name].
+ /// </summary>
+ /// <param name="name">The name.</param>
+ /// <returns>
+ /// <c>true</c> if [is parameter set] [the specified name]; otherwise, <c>false</c>.
+ /// </returns>
+ bool IsParameterSet(Type name);
+
+ /// <summary>
+ /// Forks the injector.
+ /// </summary>
+ /// <returns></returns>
+ IInjector ForkInjector();
+
+ /// <summary>
+ /// Forks the injector.
+ /// </summary>
+ /// <param name="configurations">The configurations.</param>
+ /// <returns></returns>
+ IInjector ForkInjector(IConfiguration[] configurations);
+
+ /// <summary>
+ /// Binds the volatile instance.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="iface">The iface.</param>
+ /// <param name="inst">The inst.</param>
+ void BindVolatileInstance<T>(GenericType<T> iface, T inst);
+
+ /// <summary>
+ /// Binds the volatile parameter.
+ /// </summary>
+ /// <typeparam name="U"></typeparam>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="iface">The iface.</param>
+ /// <param name="inst">The inst.</param>
+ void BindVolatileParameter<U, T>(GenericType<U> iface, T inst) where U : Name<T>;
+
+ /// <summary>
+ /// Gets the named instance.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <typeparam name="U"></typeparam>
+ /// <returns></returns>
+ U GetNamedInstance<T, U>() where T : Name<U>;
+
+ /// <summary>
+ /// Binds the volatile instance.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="inst">The inst.</param>
+ void BindVolatileInstance<T>(T inst);
+
+ /// <summary>
+ /// Binds the volatile parameter.
+ /// </summary>
+ /// <typeparam name="U"></typeparam>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="inst">The inst.</param>
+ void BindVolatileParameter<U, T>(T inst) where U : Name<T>;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Interface/ITang.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Interface/ITang.cs b/lang/cs/Source/TANG/Tang/Interface/ITang.cs
new file mode 100644
index 0000000..673662f
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Interface/ITang.cs
@@ -0,0 +1,46 @@
+/**
+ * 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.
+ */
+using System;
+using System.Collections.Generic;
+
+namespace Org.Apache.Reef.Tang.Interface
+{
+ public interface ITang
+ {
+ IInjector NewInjector();
+ IInjector NewInjector(IConfiguration[] confs);
+ IInjector NewInjector(IConfiguration confs);
+ IInjector NewInjector(string[] assemblies, string configurationFileName);
+ IInjector NewInjector(string[] assemblies, IDictionary<string, string> configurations);
+ IInjector NewInjector(string[] assemblies, IList<KeyValuePair<string, string>> configurations);
+ IClassHierarchy GetClassHierarchy(string[] assemblies);
+ ICsClassHierarchy GetDefaultClassHierarchy();
+ ICsClassHierarchy GetDefaultClassHierarchy(string[] assemblies, Type[] parameterParsers);
+
+ ICsConfigurationBuilder NewConfigurationBuilder();
+ ICsConfigurationBuilder NewConfigurationBuilder(string[] assemblies);
+ ICsConfigurationBuilder NewConfigurationBuilder(IConfiguration[] confs);
+ ICsConfigurationBuilder NewConfigurationBuilder(IConfiguration conf);
+ ICsConfigurationBuilder NewConfigurationBuilder(string[] assemblies, IConfiguration[] confs, Type[] parameterParsers);
+ IConfigurationBuilder NewConfigurationBuilder(IClassHierarchy classHierarchy);
+ ICsConfigurationBuilder NewConfigurationBuilder(ICsClassHierarchy classHierarchy);
+
+ ICsConfigurationBuilder NewConfigurationBuilder(Type[] parameterParsers);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Properties/AssemblyInfo.cs b/lang/cs/Source/TANG/Tang/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..eb9116c
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+/**
+ * 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.
+ */
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tang")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tang")]
+[assembly: AssemblyCopyright("Copyright © 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("9be5f89c-7b7e-4236-ac54-10fda8eef58e")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferClassHierarchy.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferClassHierarchy.cs b/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferClassHierarchy.cs
new file mode 100644
index 0000000..15ae379
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferClassHierarchy.cs
@@ -0,0 +1,473 @@
+/**
+ * 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.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Org.Apache.Reef.Utilities.Logging;
+using Org.Apache.Reef.Tang.Exceptions;
+using Org.Apache.Reef.Tang.Implementations;
+using Org.Apache.Reef.Tang.Interface;
+using Org.Apache.Reef.Tang.Types;
+using ProtoBuf;
+
+namespace Org.Apache.Reef.Tang.Protobuf
+{
+ public class ProtocolBufferClassHierarchy : IClassHierarchy
+ {
+ private static readonly Logger LOGGER = Logger.GetLogger(typeof(ProtocolBufferClassHierarchy));
+
+ private IPackageNode rootNode;
+ private IDictionary<string, INode> lookupTable = new Dictionary<string, INode>();
+
+ public static void Serialize(string fileName, IClassHierarchy classHierarchy)
+ {
+ ClassHierarchyProto.Node node = Serialize(classHierarchy);
+
+ using (var file = File.Create(fileName))
+ {
+ Serializer.Serialize<ClassHierarchyProto.Node>(file, node);
+ }
+ }
+
+ public static ClassHierarchyProto.Node Serialize(IClassHierarchy classHierarchy)
+ {
+ return SerializeNode(classHierarchy.GetNamespace());
+ }
+
+ private static ClassHierarchyProto.Node SerializeNode(INode n)
+ {
+ IList<ClassHierarchyProto.Node> children = new List<ClassHierarchyProto.Node>();
+
+ foreach (INode child in n.GetChildren())
+ {
+ children.Add(SerializeNode(child));
+ }
+
+ if (n is IClassNode)
+ {
+ IClassNode cn = (IClassNode)n;
+ IList<IConstructorDef> injectable = cn.GetInjectableConstructors();
+ IList<IConstructorDef> all = cn.GetAllConstructors();
+ IList<IConstructorDef> others = new List<IConstructorDef>(all);
+
+ foreach (var c in injectable)
+ {
+ others.Remove(c);
+ }
+
+ IList<ClassHierarchyProto.ConstructorDef> injectableConstructors = new List<ClassHierarchyProto.ConstructorDef>();
+ foreach (IConstructorDef inj in injectable)
+ {
+ injectableConstructors.Add(SerializeConstructorDef(inj));
+ }
+
+ IList<ClassHierarchyProto.ConstructorDef> otherConstructors = new List<ClassHierarchyProto.ConstructorDef>();
+ foreach (IConstructorDef other in others)
+ {
+ otherConstructors.Add(SerializeConstructorDef(other));
+ }
+
+ List<string> implFullNames = new List<string>();
+ foreach (IClassNode impl in cn.GetKnownImplementations())
+ {
+ implFullNames.Add(impl.GetFullName()); //we use class fully qualifed name
+ }
+
+ return NewClassNode(cn.GetName(), cn.GetFullName(),
+ cn.IsInjectionCandidate(), cn.IsExternalConstructor(), cn.IsUnit(),
+ injectableConstructors, otherConstructors, implFullNames, children);
+ }
+ if (n is INamedParameterNode)
+ {
+ INamedParameterNode np = (INamedParameterNode)n;
+ return NewNamedParameterNode(np.GetName(), np.GetFullName(),
+ np.GetSimpleArgName(), np.GetFullArgName(), np.IsSet(), np.IsList(), np.GetDocumentation(),
+ np.GetShortName(), np.GetDefaultInstanceAsStrings(), children);
+ }
+ if (n is IPackageNode)
+ {
+ return NewPackageNode(n.GetName(), n.GetFullName(), children);
+ }
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException("Encountered unknown type of Node: " + n), LOGGER);
+ return null;
+ }
+
+ private static ClassHierarchyProto.ConstructorDef SerializeConstructorDef(IConstructorDef def)
+ {
+ IList<ClassHierarchyProto.ConstructorArg> args = new List<ClassHierarchyProto.ConstructorArg>();
+ foreach (IConstructorArg arg in def.GetArgs())
+ {
+ args.Add(NewConstructorArg(arg.Gettype(), arg.GetNamedParameterName(), arg.IsInjectionFuture()));
+ }
+ return newConstructorDef(def.GetClassName(), args);
+ }
+
+ private static ClassHierarchyProto.ConstructorArg NewConstructorArg(
+ string fullArgClassName, string namedParameterName, bool isFuture)
+ {
+ ClassHierarchyProto.ConstructorArg constArg = new ClassHierarchyProto.ConstructorArg();
+ constArg.full_arg_class_name = fullArgClassName;
+ constArg.named_parameter_name = namedParameterName;
+ constArg.is_injection_future = isFuture;
+ return constArg;
+ }
+
+ private static ClassHierarchyProto.ConstructorDef newConstructorDef(
+ String fullClassName, IList<ClassHierarchyProto.ConstructorArg> args)
+ {
+ ClassHierarchyProto.ConstructorDef constDef = new ClassHierarchyProto.ConstructorDef();
+ constDef.full_class_name = fullClassName;
+ foreach (ClassHierarchyProto.ConstructorArg arg in args)
+ {
+ constDef.args.Add(arg);
+ }
+
+ return constDef;
+ }
+
+ private static ClassHierarchyProto.Node NewClassNode(String name,
+ String fullName, bool isInjectionCandidate,
+ bool isExternalConstructor, bool isUnit,
+ IList<ClassHierarchyProto.ConstructorDef> injectableConstructors,
+ IList<ClassHierarchyProto.ConstructorDef> otherConstructors,
+ IList<String> implFullNames, IList<ClassHierarchyProto.Node> children)
+ {
+ ClassHierarchyProto.ClassNode classNode = new ClassHierarchyProto.ClassNode();
+ classNode.is_injection_candidate = isInjectionCandidate;
+ foreach (var ic in injectableConstructors)
+ {
+ classNode.InjectableConstructors.Add(ic);
+ }
+
+ foreach (var oc in otherConstructors)
+ {
+ classNode.OtherConstructors.Add(oc);
+ }
+ foreach (var implFullName in implFullNames)
+ {
+ classNode.impl_full_names.Add(implFullName);
+ }
+
+ ClassHierarchyProto.Node n = new ClassHierarchyProto.Node();
+ n.name = name;
+ n.full_name = fullName;
+ n.class_node = classNode;
+
+ foreach (var c in children)
+ {
+ n.children.Add(c);
+ }
+
+ return n;
+ }
+
+ private static ClassHierarchyProto.Node NewNamedParameterNode(string name,
+ string fullName, string simpleArgClassName, string fullArgClassName,
+ bool isSet, bool isList, string documentation, // can be null
+ string shortName, // can be null
+ string[] instanceDefault, // can be null
+ IList<ClassHierarchyProto.Node> children)
+ {
+ ClassHierarchyProto.NamedParameterNode namedParameterNode = new ClassHierarchyProto.NamedParameterNode();
+ namedParameterNode.simple_arg_class_name = simpleArgClassName;
+ namedParameterNode.full_arg_class_name = fullArgClassName;
+ namedParameterNode.is_set = isSet;
+ namedParameterNode.is_list = isList;
+
+ if (documentation != null)
+ {
+ namedParameterNode.documentation = documentation;
+ }
+
+ if (shortName != null)
+ {
+ namedParameterNode.short_name = shortName;
+ }
+
+ foreach (var id in instanceDefault)
+ {
+ namedParameterNode.instance_default.Add(id);
+ }
+
+ ClassHierarchyProto.Node n = new ClassHierarchyProto.Node();
+ n.name = name;
+ n.full_name = fullName;
+ n.named_parameter_node = namedParameterNode;
+
+ foreach (var c in children)
+ {
+ n.children.Add(c);
+ }
+
+ return n;
+ }
+
+ private static ClassHierarchyProto.Node NewPackageNode(string name,
+ string fullName, IList<ClassHierarchyProto.Node> children)
+ {
+ ClassHierarchyProto.PackageNode packageNode = new ClassHierarchyProto.PackageNode();
+ ClassHierarchyProto.Node n = new ClassHierarchyProto.Node();
+ n.name = name;
+ n.full_name = fullName;
+ n.package_node = packageNode;
+
+ foreach (var c in children)
+ {
+ n.children.Add(c);
+ }
+
+ return n;
+ }
+
+ public static IClassHierarchy DeSerialize(string fileName)
+ {
+ ClassHierarchyProto.Node root;
+
+ using (var file = File.OpenRead(fileName))
+ {
+ root = Serializer.Deserialize<ClassHierarchyProto.Node>(file);
+ }
+
+ return new ProtocolBufferClassHierarchy(root);
+ }
+
+ public ProtocolBufferClassHierarchy() //create a ProtocolBufferClassHierarchy with empty nodes and lookup table. It can be used to merge other class hierarchy to it
+ {
+ this.rootNode = new PackageNodeImpl();
+ }
+
+ public ProtocolBufferClassHierarchy(ClassHierarchyProto.Node root)
+ {
+ this.rootNode = new PackageNodeImpl();
+ if (root.package_node == null)
+ {
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new ArgumentException("Expected a package node. Got: " + root), LOGGER);
+ }
+ // Register all the classes.
+ foreach (ClassHierarchyProto.Node child in root.children)
+ {
+ ParseSubHierarchy(rootNode, child);
+ }
+
+ BuildHashTable(rootNode);
+
+ foreach (ClassHierarchyProto.Node child in root.children)
+ {
+ WireUpInheritanceRelationships(child);
+ }
+ }
+
+ public void BuildHashTable(INode n)
+ {
+ foreach (INode child in n.GetChildren())
+ {
+ lookupTable.Add(child.GetFullName(), child);
+ BuildHashTable(child);
+ }
+ }
+
+ private static void ParseSubHierarchy(INode parent, ClassHierarchyProto.Node n)
+ {
+ INode parsed = null;
+ if (n.package_node != null)
+ {
+ parsed = new PackageNodeImpl(parent, n.name, n.full_name);
+ }
+ else if (n.named_parameter_node != null)
+ {
+ ClassHierarchyProto.NamedParameterNode np = n.named_parameter_node;
+ parsed = new NamedParameterNodeImpl(parent, n.name,
+ n.full_name, np.full_arg_class_name, np.simple_arg_class_name,
+ np.is_set, np.is_list, np.documentation, np.short_name,
+ np.instance_default.ToArray());
+ }
+ else if (n.class_node != null)
+ {
+ ClassHierarchyProto.ClassNode cn = n.class_node;
+ IList<IConstructorDef> injectableConstructors = new List<IConstructorDef>();
+ IList<IConstructorDef> allConstructors = new List<IConstructorDef>();
+
+ foreach (ClassHierarchyProto.ConstructorDef injectable in cn.InjectableConstructors)
+ {
+ IConstructorDef def = ParseConstructorDef(injectable, true);
+ injectableConstructors.Add(def);
+ allConstructors.Add(def);
+ }
+ foreach (ClassHierarchyProto.ConstructorDef other in cn.OtherConstructors)
+ {
+ IConstructorDef def = ParseConstructorDef(other, false);
+ allConstructors.Add(def);
+
+ }
+
+ IConstructorDef[] dummy = new ConstructorDefImpl[0];
+ parsed = new ClassNodeImpl(parent, n.name, n.full_name,
+ cn.is_unit, cn.is_injection_candidate,
+ cn.is_external_constructor, injectableConstructors,
+ allConstructors, cn.default_implementation);
+ }
+ else
+ {
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException("Bad protocol buffer: got abstract node" + n), LOGGER);
+ }
+
+ foreach (ClassHierarchyProto.Node child in n.children)
+ {
+ ParseSubHierarchy(parsed, child);
+ }
+ }
+
+ private static IConstructorDef ParseConstructorDef(ClassHierarchyProto.ConstructorDef def, bool isInjectable)
+ {
+ IList<IConstructorArg> args = new List<IConstructorArg>();
+ foreach (ClassHierarchyProto.ConstructorArg arg in def.args)
+ {
+ args.Add(new ConstructorArgImpl(arg.full_arg_class_name, arg.named_parameter_name, arg.is_injection_future));
+ }
+ return new ConstructorDefImpl(def.full_class_name, args.ToArray(), isInjectable);
+ }
+
+ private void WireUpInheritanceRelationships(ClassHierarchyProto.Node n)
+ {
+ if (n.class_node != null)
+ {
+ ClassHierarchyProto.ClassNode cn = n.class_node;
+ IClassNode iface = null;
+ try
+ {
+ iface = (IClassNode)GetNode(n.full_name);
+ }
+ catch (NameResolutionException e)
+ {
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
+ var ex = new IllegalStateException("When reading protocol buffer node "
+ + n.full_name + " does not exist. Full record is " + n, e);
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
+ }
+ foreach (String impl in cn.impl_full_names)
+ {
+ try
+ {
+ iface.PutImpl((IClassNode)GetNode(impl));
+ }
+ catch (NameResolutionException e)
+ {
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
+ var ex = new IllegalStateException("When reading protocol buffer node "
+ + n + " refers to non-existent implementation:" + impl);
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
+
+ }
+ catch (InvalidCastException e)
+ {
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
+ try
+ {
+ var ex = new IllegalStateException(
+ "When reading protocol buffer node " + n
+ + " found implementation" + GetNode(impl)
+ + " which is not a ClassNode!");
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
+ }
+ catch (NameResolutionException ne)
+ {
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Caught(ne, Level.Error, LOGGER);
+ var ex = new IllegalStateException(
+ "Got 'cant happen' exception when producing error message for " + e);
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
+ }
+ }
+ }
+ }
+ }
+
+ public INode GetNode(String fullName)
+ {
+ INode ret;
+ lookupTable.TryGetValue(fullName, out ret);
+ if (ret == null)
+ {
+ var ex = new NameResolutionException(fullName, "Cannot resolve the name from the class hierarchy during deserialization: " + fullName);
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
+ }
+ return ret;
+ }
+
+ public INode GetNamespace()
+ {
+ return rootNode;
+ }
+
+ public bool IsImplementation(IClassNode inter, IClassNode impl)
+ {
+ return impl.IsImplementationOf(inter);
+ }
+
+ public IClassHierarchy Merge(IClassHierarchy ch)
+ {
+ if (this == ch)
+ {
+ return this;
+ }
+
+ if (!(ch is ProtocolBufferClassHierarchy))
+ {
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new NotSupportedException(
+ "Cannot merge ExternalClassHierarchies yet!"), LOGGER);
+ }
+
+ ProtocolBufferClassHierarchy pch = (ProtocolBufferClassHierarchy)ch;
+ foreach (var pair in pch.lookupTable)
+ {
+ if (!this.lookupTable.ContainsKey(pair.Key))
+ {
+ this.lookupTable.Add(pair);
+ }
+ }
+
+ foreach (INode n in ch.GetNamespace().GetChildren())
+ {
+ if (!rootNode.Contains(n.GetFullName()))
+ {
+ if (n is INamedParameterNode)
+ {
+ INamedParameterNode np = (INamedParameterNode) n;
+ new NamedParameterNodeImpl(this.rootNode, np.GetName(),
+ np.GetFullName(), np.GetFullArgName(), np.GetSimpleArgName(),
+ np.IsSet(), np.IsList(), np.GetDocumentation(), np.GetShortName(),
+ np.GetDefaultInstanceAsStrings().ToArray());
+ }
+ else if (n is IClassNode)
+ {
+ IClassNode cn = (IClassNode) n;
+ new ClassNodeImpl(rootNode, cn.GetName(), cn.GetFullName(),
+ cn.IsUnit(), cn.IsInjectionCandidate(),
+ cn.IsExternalConstructor(), cn.GetInjectableConstructors(),
+ cn.GetAllConstructors(), cn.GetDefaultImplementation());
+ }
+ }
+ }
+
+ return this;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferInjectionPlan.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferInjectionPlan.cs b/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferInjectionPlan.cs
new file mode 100644
index 0000000..8d503ae
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Protobuf/ProtocolBufferInjectionPlan.cs
@@ -0,0 +1,204 @@
+/**
+ * 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.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using Org.Apache.Reef.Utilities.Logging;
+using Org.Apache.Reef.Tang.Exceptions;
+using Org.Apache.Reef.Tang.Implementations;
+using Org.Apache.Reef.Tang.Interface;
+using Org.Apache.Reef.Tang.Types;
+using ProtoBuf;
+
+namespace Org.Apache.Reef.Tang.Protobuf
+{
+ public class ProtocolBufferInjectionPlan
+ {
+ private static readonly Logger LOGGER = Logger.GetLogger(typeof(ProtocolBufferInjectionPlan));
+
+ private static InjectionPlanProto.InjectionPlan NewConstructor(string fullName, List<InjectionPlanProto.InjectionPlan> plans)
+ {
+ InjectionPlanProto.Constructor cconstr = new InjectionPlanProto.Constructor();
+ foreach (InjectionPlanProto.InjectionPlan p in plans)
+ {
+ cconstr.args.Add(p);
+ }
+
+ InjectionPlanProto.InjectionPlan plan = new InjectionPlanProto.InjectionPlan();
+ plan.name = fullName;
+ plan.constructor = cconstr;
+ return plan;
+ }
+
+ private static InjectionPlanProto.InjectionPlan NewSubplan(string fullName, int selectedPlan, List<InjectionPlanProto.InjectionPlan> plans)
+ {
+ InjectionPlanProto.Subplan subPlan = new InjectionPlanProto.Subplan();
+
+ subPlan.selected_plan = selectedPlan;
+ foreach (InjectionPlanProto.InjectionPlan p in plans)
+ {
+ subPlan.plans.Add(p);
+ }
+
+ InjectionPlanProto.InjectionPlan plan = new InjectionPlanProto.InjectionPlan();
+ plan.name = fullName;
+ plan.subplan = subPlan;
+ return plan;
+ }
+
+ private static InjectionPlanProto.InjectionPlan NewInstance(string fullName, string value)
+ {
+ InjectionPlanProto.Instance instance = new InjectionPlanProto.Instance();
+ instance.value = value;
+
+ InjectionPlanProto.InjectionPlan plan = new InjectionPlanProto.InjectionPlan();
+ plan.name = fullName;
+ plan.instance = instance;
+ return plan;
+
+ }
+
+ public static void Serialize(string fileName, InjectionPlan ip)
+ {
+ InjectionPlanProto.InjectionPlan plan = Serialize(ip);
+
+ using (var file = File.Create(fileName))
+ {
+ Serializer.Serialize<InjectionPlanProto.InjectionPlan>(file, plan);
+ }
+ }
+
+ public static InjectionPlanProto.InjectionPlan Serialize(InjectionPlan ip)
+ {
+ if (ip is Constructor)
+ {
+ Constructor cons = (Constructor) ip;
+ InjectionPlan[] args = cons.GetArgs();
+ InjectionPlanProto.InjectionPlan[] protoArgs = new InjectionPlanProto.InjectionPlan[args.Length];
+ for (int i = 0; i < args.Length; i++)
+ {
+ protoArgs[i] = Serialize(args[i]);
+ }
+ return NewConstructor(ip.GetNode().GetFullName(), protoArgs.ToList<InjectionPlanProto.InjectionPlan>());
+ }
+ if (ip is Subplan)
+ {
+ Subplan sp = (Subplan) ip;
+ InjectionPlan[] args = sp.GetPlans();
+ InjectionPlanProto.InjectionPlan[] subPlans = new InjectionPlanProto.InjectionPlan[args.Length];
+ for (int i = 0; i < args.Length; i++)
+ {
+ subPlans[i] = Serialize(args[i]);
+ }
+ return NewSubplan(ip.GetNode().GetFullName(), sp.GetSelectedIndex(), subPlans.ToList<InjectionPlanProto.InjectionPlan>());
+
+ }
+ if (ip is CsInstance)
+ {
+ CsInstance ji = (CsInstance) ip;
+ return NewInstance(ip.GetNode().GetFullName(), ji.GetInstanceAsString());
+ }
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException(
+ "Encountered unknown type of InjectionPlan: " + ip), LOGGER);
+ return null;
+ }
+
+ public static InjectionPlan DeSerialize(string fileName, IClassHierarchy ch)
+ {
+ InjectionPlanProto.InjectionPlan protoPlan;
+
+ using (var file = File.OpenRead(fileName))
+ {
+ protoPlan = Serializer.Deserialize<InjectionPlanProto.InjectionPlan>(file);
+ }
+
+ return Deserialize(ch, protoPlan);
+ }
+
+ public static InjectionPlan Deserialize(IClassHierarchy ch, InjectionPlanProto.InjectionPlan ip)
+ {
+ string fullName = ip.name;
+ if (ip.constructor != null)
+ {
+ InjectionPlanProto.Constructor cons = ip.constructor;
+ IClassNode cn = (IClassNode) ch.GetNode(fullName);
+
+ InjectionPlanProto.InjectionPlan[] protoBufArgs = cons.args.ToArray();
+
+ IClassNode[] cnArgs = new IClassNode[protoBufArgs.Length];
+
+ for (int i = 0; i < protoBufArgs.Length; i++)
+ {
+ INode no = ch.GetNode(protoBufArgs[i].name);
+ if (no is IClassNode)
+ {
+ cnArgs[i] = (IClassNode)no;
+ }
+ else if (no is INamedParameterNode)
+ {
+ INamedParameterNode np = (INamedParameterNode)no;
+ cnArgs[i] = (IClassNode)ch.GetNode(np.GetFullArgName());
+ }
+ }
+
+ InjectionPlan[] ipArgs = new InjectionPlan[protoBufArgs.Length];
+
+ for (int i = 0; i < protoBufArgs.Length; i++)
+ {
+ ipArgs[i] = (InjectionPlan) Deserialize(ch, protoBufArgs[i]);
+ }
+
+ IConstructorDef constructor = cn.GetConstructorDef(cnArgs);
+ return new Constructor(cn, constructor, ipArgs);
+ }
+ if (ip.instance != null)
+ {
+ InjectionPlanProto.Instance ins = ip.instance;
+ object instance = Parse(ip.name, ins.value);
+ return new CsInstance(ch.GetNode(ip.name), instance);
+ }
+ if (ip.subplan != null)
+ {
+ InjectionPlanProto.Subplan subplan = ip.subplan;
+ InjectionPlanProto.InjectionPlan[] protoBufPlans = subplan.plans.ToArray();
+
+ InjectionPlan[] subPlans = new InjectionPlan[protoBufPlans.Length];
+ for (int i = 0; i < protoBufPlans.Length; i++)
+ {
+ subPlans[i] = (InjectionPlan) Deserialize(ch, protoBufPlans[i]);
+ }
+ INode n = ch.GetNode(fullName);
+ return new Subplan(n, subPlans);
+ }
+ Org.Apache.Reef.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException("Encountered unknown type of InjectionPlan: " + ip), LOGGER);
+ return null;
+ }
+
+ private static object Parse(String type, String value)
+ {
+ // XXX this is a placeholder for now. We need a parser API that will
+ // either produce a live java object or (partially) validate stuff to
+ // see if it looks like the target language will be able to handle this
+ // type + value.
+ return value;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Protobuf/class_hierarchy.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Protobuf/class_hierarchy.cs b/lang/cs/Source/TANG/Tang/Protobuf/class_hierarchy.cs
new file mode 100644
index 0000000..62ffa08
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Protobuf/class_hierarchy.cs
@@ -0,0 +1,274 @@
+/**
+ * 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.
+ */
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+// Generated from: class_hierarchy.proto
+namespace ClassHierarchyProto
+{
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"Node")]
+ public partial class Node : global::ProtoBuf.IExtensible
+ {
+ public Node() {}
+
+ private string _name;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string name
+ {
+ get { return _name; }
+ set { _name = value; }
+ }
+ private string _full_name;
+ [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"full_name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string full_name
+ {
+ get { return _full_name; }
+ set { _full_name = value; }
+ }
+ private ClassNode _class_node = null;
+ [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"class_node", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue(null)]
+ public ClassNode class_node
+ {
+ get { return _class_node; }
+ set { _class_node = value; }
+ }
+ private NamedParameterNode _named_parameter_node = null;
+ [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name=@"named_parameter_node", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue(null)]
+ public NamedParameterNode named_parameter_node
+ {
+ get { return _named_parameter_node; }
+ set { _named_parameter_node = value; }
+ }
+ private PackageNode _package_node = null;
+ [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"package_node", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue(null)]
+ public PackageNode package_node
+ {
+ get { return _package_node; }
+ set { _package_node = value; }
+ }
+ private readonly global::System.Collections.Generic.List<Node> _children = new global::System.Collections.Generic.List<Node>();
+ [global::ProtoBuf.ProtoMember(6, Name=@"children", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<Node> children
+ {
+ get { return _children; }
+ }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ClassNode")]
+ public partial class ClassNode : global::ProtoBuf.IExtensible
+ {
+ public ClassNode() {}
+
+ private bool _is_injection_candidate;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"is_injection_candidate", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool is_injection_candidate
+ {
+ get { return _is_injection_candidate; }
+ set { _is_injection_candidate = value; }
+ }
+ private bool _is_external_constructor;
+ [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"is_external_constructor", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool is_external_constructor
+ {
+ get { return _is_external_constructor; }
+ set { _is_external_constructor = value; }
+ }
+ private bool _is_unit;
+ [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"is_unit", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool is_unit
+ {
+ get { return _is_unit; }
+ set { _is_unit = value; }
+ }
+ private readonly global::System.Collections.Generic.List<ConstructorDef> _InjectableConstructors = new global::System.Collections.Generic.List<ConstructorDef>();
+ [global::ProtoBuf.ProtoMember(4, Name=@"InjectableConstructors", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<ConstructorDef> InjectableConstructors
+ {
+ get { return _InjectableConstructors; }
+ }
+
+ private readonly global::System.Collections.Generic.List<ConstructorDef> _OtherConstructors = new global::System.Collections.Generic.List<ConstructorDef>();
+ [global::ProtoBuf.ProtoMember(5, Name=@"OtherConstructors", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<ConstructorDef> OtherConstructors
+ {
+ get { return _OtherConstructors; }
+ }
+
+ private readonly global::System.Collections.Generic.List<string> _impl_full_names = new global::System.Collections.Generic.List<string>();
+ [global::ProtoBuf.ProtoMember(6, Name=@"impl_full_names", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<string> impl_full_names
+ {
+ get { return _impl_full_names; }
+ }
+
+ private string _default_implementation = "";
+ [global::ProtoBuf.ProtoMember(7, IsRequired = false, Name=@"default_implementation", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string default_implementation
+ {
+ get { return _default_implementation; }
+ set { _default_implementation = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"NamedParameterNode")]
+ public partial class NamedParameterNode : global::ProtoBuf.IExtensible
+ {
+ public NamedParameterNode() {}
+
+ private string _simple_arg_class_name;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"simple_arg_class_name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string simple_arg_class_name
+ {
+ get { return _simple_arg_class_name; }
+ set { _simple_arg_class_name = value; }
+ }
+ private string _full_arg_class_name;
+ [global::ProtoBuf.ProtoMember(2, IsRequired = true, Name=@"full_arg_class_name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string full_arg_class_name
+ {
+ get { return _full_arg_class_name; }
+ set { _full_arg_class_name = value; }
+ }
+ private bool _is_set;
+ [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"is_set", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool is_set
+ {
+ get { return _is_set; }
+ set { _is_set = value; }
+ }
+ private bool _is_list;
+ [global::ProtoBuf.ProtoMember(4, IsRequired = true, Name=@"is_list", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool is_list
+ {
+ get { return _is_list; }
+ set { _is_list = value; }
+ }
+ private string _documentation = "";
+ [global::ProtoBuf.ProtoMember(5, IsRequired = false, Name=@"documentation", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string documentation
+ {
+ get { return _documentation; }
+ set { _documentation = value; }
+ }
+ private string _short_name = "";
+ [global::ProtoBuf.ProtoMember(6, IsRequired = false, Name=@"short_name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string short_name
+ {
+ get { return _short_name; }
+ set { _short_name = value; }
+ }
+ private readonly global::System.Collections.Generic.List<string> _instance_default = new global::System.Collections.Generic.List<string>();
+ [global::ProtoBuf.ProtoMember(7, Name=@"instance_default", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<string> instance_default
+ {
+ get { return _instance_default; }
+ }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"PackageNode")]
+ public partial class PackageNode : global::ProtoBuf.IExtensible
+ {
+ public PackageNode() {}
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ConstructorDef")]
+ public partial class ConstructorDef : global::ProtoBuf.IExtensible
+ {
+ public ConstructorDef() {}
+
+ private string _full_class_name;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"full_class_name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string full_class_name
+ {
+ get { return _full_class_name; }
+ set { _full_class_name = value; }
+ }
+ private readonly global::System.Collections.Generic.List<ConstructorArg> _args = new global::System.Collections.Generic.List<ConstructorArg>();
+ [global::ProtoBuf.ProtoMember(2, Name=@"args", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<ConstructorArg> args
+ {
+ get { return _args; }
+ }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"ConstructorArg")]
+ public partial class ConstructorArg : global::ProtoBuf.IExtensible
+ {
+ public ConstructorArg() {}
+
+ private string _full_arg_class_name;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"full_arg_class_name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string full_arg_class_name
+ {
+ get { return _full_arg_class_name; }
+ set { _full_arg_class_name = value; }
+ }
+ private string _named_parameter_name = "";
+ [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"named_parameter_name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue("")]
+ public string named_parameter_name
+ {
+ get { return _named_parameter_name; }
+ set { _named_parameter_name = value; }
+ }
+ private bool _is_injection_future;
+ [global::ProtoBuf.ProtoMember(3, IsRequired = true, Name=@"is_injection_future", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public bool is_injection_future
+ {
+ get { return _is_injection_future; }
+ set { _is_injection_future = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Protobuf/injection_plan.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Protobuf/injection_plan.cs b/lang/cs/Source/TANG/Tang/Protobuf/injection_plan.cs
new file mode 100644
index 0000000..d7a30dc
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Protobuf/injection_plan.cs
@@ -0,0 +1,132 @@
+/**
+ * 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.
+ */
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+// Generated from: injection_plan.proto
+namespace InjectionPlanProto
+{
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name = @"InjectionPlan")]
+ public partial class InjectionPlan : global::ProtoBuf.IExtensible
+ {
+ public InjectionPlan() { }
+
+ private string _name;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name = @"name", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string name
+ {
+ get { return _name; }
+ set { _name = value; }
+ }
+ private Constructor _constructor = null;
+ [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name = @"constructor", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue(null)]
+ public Constructor constructor
+ {
+ get { return _constructor; }
+ set { _constructor = value; }
+ }
+ private Instance _instance = null;
+ [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name = @"instance", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue(null)]
+ public Instance instance
+ {
+ get { return _instance; }
+ set { _instance = value; }
+ }
+ private Subplan _subplan = null;
+ [global::ProtoBuf.ProtoMember(4, IsRequired = false, Name = @"subplan", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ [global::System.ComponentModel.DefaultValue(null)]
+ public Subplan subplan
+ {
+ get { return _subplan; }
+ set { _subplan = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name = @"Subplan")]
+ public partial class Subplan : global::ProtoBuf.IExtensible
+ {
+ public Subplan() { }
+
+ private int _selected_plan = default(int);
+ [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name = @"selected_plan", DataFormat = global::ProtoBuf.DataFormat.ZigZag)]
+ [global::System.ComponentModel.DefaultValue(default(int))]
+ public int selected_plan
+ {
+ get { return _selected_plan; }
+ set { _selected_plan = value; }
+ }
+ private readonly global::System.Collections.Generic.List<InjectionPlan> _plans = new global::System.Collections.Generic.List<InjectionPlan>();
+ [global::ProtoBuf.ProtoMember(2, Name = @"plans", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<InjectionPlan> plans
+ {
+ get { return _plans; }
+ }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name = @"Constructor")]
+ public partial class Constructor : global::ProtoBuf.IExtensible
+ {
+ public Constructor() { }
+
+ private readonly global::System.Collections.Generic.List<InjectionPlan> _args = new global::System.Collections.Generic.List<InjectionPlan>();
+ [global::ProtoBuf.ProtoMember(1, Name = @"args", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public global::System.Collections.Generic.List<InjectionPlan> args
+ {
+ get { return _args; }
+ }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name = @"Instance")]
+ public partial class Instance : global::ProtoBuf.IExtensible
+ {
+ public Instance() { }
+
+ private string _value;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name = @"value", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public string value
+ {
+ get { return _value; }
+ set { _value = value; }
+ }
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Tang.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Tang.csproj b/lang/cs/Source/TANG/Tang/Tang.csproj
new file mode 100644
index 0000000..bb88f2c
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Tang.csproj
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+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.
+-->
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{97DBB573-3994-417A-9F69-FFA25F00D2A6}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Org.Apache.Reef.Tang</RootNamespace>
+ <AssemblyName>Org.Apache.Reef.Tang</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ <RestorePackages>true</RestorePackages>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\..\bin\Debug\Org.Apache.Reef.Tang\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>..\..\..\bin\Release\Microsoft.Tang\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Microsoft.Hadoop.Avro">
+ <HintPath>..\..\..\packages\Microsoft.Hadoop.Avro.1.4.0.0\lib\net40\Microsoft.Hadoop.Avro.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json">
+ <HintPath>..\..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="protobuf-net">
+ <HintPath>..\..\..\packages\protobuf-net.2.0.0.668\lib\net40\protobuf-net.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Runtime.Serialization" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Annotations\DefaultImplementation.cs" />
+ <Compile Include="Annotations\Inject.cs" />
+ <Compile Include="Annotations\Name.cs" />
+ <Compile Include="Annotations\NamedParameter.cs" />
+ <Compile Include="Annotations\Parameter.cs" />
+ <Compile Include="Annotations\Unit.cs" />
+ <Compile Include="Exceptions\BindException.cs" />
+ <Compile Include="Exceptions\ClassHierarchyException.cs" />
+ <Compile Include="Exceptions\IllegalStateException.cs" />
+ <Compile Include="Exceptions\InjectionException.cs" />
+ <Compile Include="Exceptions\NameResolutionException.cs" />
+ <Compile Include="Exceptions\ParseException.cs" />
+ <Compile Include="Formats\AvroConfigurationDataContract\AvroConfiguration.cs" />
+ <Compile Include="Formats\AvroConfigurationDataContract\ConfigurationEntry.cs" />
+ <Compile Include="Formats\AvroConfigurationSerializer.cs" />
+ <Compile Include="Formats\ConfigurationFile.cs" />
+ <Compile Include="Formats\ConfigurationModule.cs" />
+ <Compile Include="Formats\ConfigurationModuleBuilder.cs" />
+ <Compile Include="Formats\IConfigurationSerializer.cs" />
+ <Compile Include="Formats\IImpl.cs" />
+ <Compile Include="Formats\IParam.cs" />
+ <Compile Include="Formats\OptionalImpl.cs" />
+ <Compile Include="Formats\OptionalParameter.cs" />
+ <Compile Include="Formats\Provides.cs" />
+ <Compile Include="Formats\RequiredImpl.cs" />
+ <Compile Include="Formats\RequiredParameter.cs" />
+ <Compile Include="Implementations\ClassHierarchy\AbstractNode.cs" />
+ <Compile Include="Implementations\ClassHierarchy\ClassHierarchyImpl.cs" />
+ <Compile Include="Implementations\ClassHierarchy\ClassNodeImpl.cs" />
+ <Compile Include="Implementations\ClassHierarchy\ConstructorArgImpl.cs" />
+ <Compile Include="Implementations\ClassHierarchy\ConstructorDefImpl.cs" />
+ <Compile Include="Implementations\ClassHierarchy\NamedParameterNodeImpl.cs" />
+ <Compile Include="Implementations\ClassHierarchy\NodeFactory.cs" />
+ <Compile Include="Implementations\ClassHierarchy\PackageNodeImpl.cs" />
+ <Compile Include="Implementations\ClassHierarchy\ParameterParser.cs" />
+ <Compile Include="Implementations\Configuration\ConfigurationBuilderImpl.cs" />
+ <Compile Include="Implementations\Configuration\ConfigurationImpl.cs" />
+ <Compile Include="Implementations\Configuration\Configurations.cs" />
+ <Compile Include="Implementations\Configuration\CsConfigurationBuilderImpl.cs" />
+ <Compile Include="Implementations\Configuration\CsConfigurationImpl.cs" />
+ <Compile Include="Implementations\InjectionPlan\Constructor.cs" />
+ <Compile Include="Implementations\InjectionPlan\CsInstance.cs" />
+ <Compile Include="Implementations\InjectionPlan\InjectionFuture.cs" />
+ <Compile Include="Implementations\InjectionPlan\InjectionFuturePlan.cs" />
+ <Compile Include="Implementations\InjectionPlan\InjectionPlan.cs" />
+ <Compile Include="Implementations\InjectionPlan\InjectorImpl.cs" />
+ <Compile Include="Implementations\InjectionPlan\ListInjectionPlan.cs" />
+ <Compile Include="Implementations\InjectionPlan\SetInjectionPlan.cs" />
+ <Compile Include="Implementations\InjectionPlan\Subplan.cs" />
+ <Compile Include="Implementations\Tang\TangFactory.cs" />
+ <Compile Include="Implementations\Tang\TangImpl.cs" />
+ <Compile Include="Interface\IAspect.cs" />
+ <Compile Include="Interface\IClassHierarchy.cs" />
+ <Compile Include="Interface\IConfiguration.cs" />
+ <Compile Include="Interface\IConfigurationBuilder.cs" />
+ <Compile Include="Interface\ICsClassHierarchy.cs" />
+ <Compile Include="Interface\ICsConfigurationBuilder.cs" />
+ <Compile Include="Interface\ICsInternalConfigurationBuilder.cs" />
+ <Compile Include="Interface\IExternalConstructor.cs" />
+ <Compile Include="Interface\IInjector.cs" />
+ <Compile Include="Interface\ITang.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Protobuf\class_hierarchy.cs" />
+ <Compile Include="Protobuf\injection_plan.cs" />
+ <Compile Include="Protobuf\ProtocolBufferClassHierarchy.cs" />
+ <Compile Include="Protobuf\ProtocolBufferInjectionPlan.cs" />
+ <Compile Include="Types\IClassNode.cs" />
+ <Compile Include="Types\IConstructorArg.cs" />
+ <Compile Include="Types\IConstructorDef.cs" />
+ <Compile Include="Types\INamedParameterNode.cs" />
+ <Compile Include="Types\INode.cs" />
+ <Compile Include="Types\IPackageNode.cs" />
+ <Compile Include="Types\ITraversable.cs" />
+ <Compile Include="Util\AbstractMonotonicMultiMap.cs" />
+ <Compile Include="Util\AssemblyLoader.cs" />
+ <Compile Include="Util\GenericType.cs" />
+ <Compile Include="Util\MonotonicHashMap.cs" />
+ <Compile Include="Util\MonotonicHashSet.cs" />
+ <Compile Include="Util\MonotonicMultiHashMap.cs" />
+ <Compile Include="Util\MonotonicMultiMap.cs" />
+ <Compile Include="Util\MonotonicSet.cs" />
+ <Compile Include="Util\MonotonicTreeMap.cs" />
+ <Compile Include="Util\ReflectionUtilities.cs" />
+ <Compile Include="Util\SetValuedKey.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config">
+ <SubType>Designer</SubType>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Utilities\Utilities.csproj">
+ <Project>{79e7f89a-1dfb-45e1-8d43-d71a954aeb98}</Project>
+ <Name>Utilities</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Types/IClassNode.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Types/IClassNode.cs b/lang/cs/Source/TANG/Tang/Types/IClassNode.cs
new file mode 100644
index 0000000..080bc2d
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Types/IClassNode.cs
@@ -0,0 +1,37 @@
+/**
+ * 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.
+ */
+using System.Collections.Generic;
+
+namespace Org.Apache.Reef.Tang.Types
+{
+ public interface IClassNode : INode
+ {
+ IList<IConstructorDef> GetInjectableConstructors();
+ IConstructorDef GetConstructorDef(IList<IClassNode> args);
+ IList<IConstructorDef> GetAllConstructors();
+
+ void PutImpl(IClassNode impl);
+ ISet<IClassNode> GetKnownImplementations();
+ string GetDefaultImplementation();
+ bool IsUnit();
+ bool IsInjectionCandidate();
+ bool IsExternalConstructor();
+ bool IsImplementationOf(IClassNode inter);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Types/IConstructorArg.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Types/IConstructorArg.cs b/lang/cs/Source/TANG/Tang/Types/IConstructorArg.cs
new file mode 100644
index 0000000..a754b0a
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Types/IConstructorArg.cs
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+namespace Org.Apache.Reef.Tang.Types
+{
+ public interface IConstructorArg
+ {
+ string GetName();
+
+ string Gettype();
+
+ bool IsInjectionFuture();
+
+ string GetNamedParameterName();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Types/IConstructorDef.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Types/IConstructorDef.cs b/lang/cs/Source/TANG/Tang/Types/IConstructorDef.cs
new file mode 100644
index 0000000..b5074a2
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Types/IConstructorDef.cs
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+using System;
+using System.Collections.Generic;
+
+namespace Org.Apache.Reef.Tang.Types
+{
+ public interface IConstructorDef : IComparable
+ {
+ string GetClassName();
+
+ IList<IConstructorArg> GetArgs();
+
+ bool IsMoreSpecificThan(IConstructorDef def);
+
+ bool TakesParameters(IList<IClassNode> paramTypes);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Types/INamedParameterNode.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Types/INamedParameterNode.cs b/lang/cs/Source/TANG/Tang/Types/INamedParameterNode.cs
new file mode 100644
index 0000000..a92ded6
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Types/INamedParameterNode.cs
@@ -0,0 +1,38 @@
+/**
+ * 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.
+ */
+
+namespace Org.Apache.Reef.Tang.Types
+{
+ public interface INamedParameterNode : INode
+ {
+ string GetDocumentation();
+
+ string GetShortName();
+
+ string[] GetDefaultInstanceAsStrings();
+
+ string GetSimpleArgName();
+
+ string GetFullArgName();
+
+ bool IsSet();
+
+ bool IsList();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/2ae282de/lang/cs/Source/TANG/Tang/Types/INode.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Source/TANG/Tang/Types/INode.cs b/lang/cs/Source/TANG/Tang/Types/INode.cs
new file mode 100644
index 0000000..dc8b55c
--- /dev/null
+++ b/lang/cs/Source/TANG/Tang/Types/INode.cs
@@ -0,0 +1,37 @@
+/**
+ * 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.
+ */
+using System;
+
+namespace Org.Apache.Reef.Tang.Types
+{
+ public interface INode : IComparable<INode>, ITraversable<INode>
+ {
+ string GetName();
+
+ string GetFullName();
+
+ bool Contains(string key);
+
+ INode Get(string key);
+
+ INode GetParent();
+
+ void Add(INode node);
+ }
+}