Beispiel #1
0
        public ConfigurationModule Build()
        {
            ConfigurationModuleBuilder c = DeepCopy();

            if (!(c.reqUsed.ContainsAll(c.ReqDecl) && c.optUsed.ContainsAll(c.OptDecl)))
            {
                ISet <FieldInfo> fset = new MonotonicHashSet <FieldInfo>();
                foreach (FieldInfo f in c.ReqDecl)
                {
                    if (!c.reqUsed.Contains(f))
                    {
                        fset.Add(f);
                    }
                }
                foreach (FieldInfo f in c.OptDecl)
                {
                    if (!c.optUsed.Contains(f))
                    {
                        fset.Add(f);
                    }
                }
                var e = new ClassHierarchyException(
                    "Found declared options that were not used in binds: "
                    + ToString(fset));
                Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
            }
            foreach (Type clz in c.lateBindClazz.Keys)
            {
                try
                {
                    c.B.Bind(ReflectionUtilities.GetAssemblyQualifiedName(clz), c.lateBindClazz.Get(clz));
                }
                catch (NameResolutionException e)
                {
                    Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
                    var ex = new ClassHierarchyException("ConfigurationModule refers to unknown class: " + c.lateBindClazz.Get(clz), e);
                    Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
                }
                catch (BindException e)
                {
                    Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
                    var ex = new ClassHierarchyException("bind failed while initializing ConfigurationModuleBuilder", e);
                    Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
                }
            }
            return(new ConfigurationModule(c));
        }
Beispiel #2
0
        private void ProcessSet(object impl)
        {
            FieldInfo f;

            Builder.Map.TryGetValue(impl, out f);
            if (f == null)
            {
                var e = new ClassHierarchyException("Unknown Impl/Param when setting " + impl.GetType().Name + ".  Did you pass in a field from some other module?");
                Org.Apache.REEF.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
            }
            if (!reqSet.Contains(f))
            {
                reqSet.Add(f);
            }
        }
Beispiel #3
0
        private void ProcessUse(object impl)
        {
            FieldInfo f;

            Map.TryGetValue(impl, out f);
            if (f == null)
            {
                var e = new ClassHierarchyException("Unknown Impl/Param when binding " + impl.GetType().Name + ".  Did you pass in a field from some other module?");
                Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
            }
            if (!reqUsed.Contains(f))
            {
                reqUsed.Add(f);
            }
            if (!optUsed.Contains(f))
            {
                optUsed.Add(f);
            }
        }
Beispiel #4
0
        public ConfigurationModuleBuilder()
        {
            foreach (FieldInfo f in GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static))
            {
                Type t = f.FieldType;
                if (ParamBlacklist.Contains(t))
                {
                    var e = new ClassHierarchyException(
                        "Found a field of type " + t + " which should be a Required/Optional Parameter/Implementation instead");
                    Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
                }
                if (ParamTypes.Contains(t.Name))
                {
                    if (!f.IsPublic)
                    {
                        var e = new ClassHierarchyException("Found a non-public configuration option in " + GetType() + ": " + f);
                        Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
                    }

                    if (!f.IsStatic)
                    {
                        var e = new ClassHierarchyException("Found a non-static configuration option in " + GetType() + ": " + f);
                        Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
                    }
                    if (!f.IsInitOnly)
                    {
                        var e = new ClassHierarchyException("Found a non-readonly configuration option in " + GetType() + ": " + f);
                        Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
                    }
                    object o = null;
                    try
                    {
                        o = f.GetValue(null);
                    }
                    catch (ArgumentException e)
                    {
                        Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
                        var ex = new ClassHierarchyException("Could not look up field instance in " + GetType() + " field: " + f, e);
                        Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
                    }
                    catch (FieldAccessException e)
                    {
                        Utilities.Diagnostics.Exceptions.Caught(e, Level.Error, LOGGER);
                        var ex = new ClassHierarchyException("Could not look up field instance in " + GetType() + " field: " + f, e);
                        Utilities.Diagnostics.Exceptions.Throw(ex, LOGGER);
                    }

                    if (Map.ContainsKey(o))
                    {
                        FieldInfo fi;
                        Map.TryGetValue(o, out fi);
                        var e = new ClassHierarchyException("Detected aliased instances in class " + GetType() + " for fields " + fi + " and " + f);
                        Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
                    }
                    if (ReflectionUtilities.IsGenericTypeof(typeof(RequiredImpl <>), t) || ReflectionUtilities.IsGenericTypeof(typeof(RequiredParameter <>), t))
                    {
                        ReqDecl.Add(f);
                    }
                    else
                    {
                        OptDecl.Add(f);
                    }
                    Map.Add(o, f);
                }
            }
        }
Beispiel #5
0
        public IConfiguration Build()
        {
            ConfigurationModule c = DeepCopy();

            if (!c.reqSet.ContainsAll(c.Builder.ReqDecl))
            {
                ISet <FieldInfo> missingSet = new MonotonicHashSet <FieldInfo>();
                foreach (FieldInfo f in c.Builder.ReqDecl)
                {
                    if (!c.reqSet.Contains(f))
                    {
                        missingSet.Add(f);
                    }
                }
                var e = new BindException(
                    "Attempt to build configuration before setting required option(s): "
                    + Builder.ToString(missingSet));
                Org.Apache.REEF.Utilities.Diagnostics.Exceptions.Throw(e, LOGGER);
            }

            foreach (Type clazz in c.Builder.FreeImpls.Keys)
            {
                object i = c.Builder.FreeImpls.Get(clazz);
                if (c.setImpls.ContainsKey(i))
                {
                    var cb = (ICsInternalConfigurationBuilder)c.Builder.B;
                    cb.Bind(clazz, c.setImpls.Get(i));
                }
                else if (c.setLateImpls.ContainsKey(i))
                {
                    c.Builder.B.Bind(ReflectionUtilities.GetAssemblyQualifiedName(clazz), c.setLateImpls.Get(i));
                }
                else if (c.setImplSets.ContainsKey(i) || c.setLateImplSets.ContainsKey(i))
                {
                    foreach (Type clz in c.setImplSets.GetValuesForKey(i))
                    {
                        ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
                        b.BindSetEntry(clazz, clz);
                    }
                    foreach (string s in c.setLateImplSets.GetValuesForKey(i))
                    {
                        ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
                        b.BindSetEntry(clazz, s);
                    }
                }
                else if (c.setImplLists.ContainsKey(i))
                {
                    ICsConfigurationBuilder b = (ICsConfigurationBuilder)c.Builder.B;
                    b.BindList(clazz, setImplLists.Get(i));
                }
                else if (c.setLateImplLists.ContainsKey(i))
                {
                    ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
                    b.BindList(clazz, setLateImplLists.Get(i));
                }
            }

            foreach (Type clazz in c.Builder.FreeParams.Keys)
            {
                object p        = c.Builder.FreeParams.Get(clazz);
                string s        = c.setParams.Get(p);
                bool   foundOne = false;
                if (s != null)
                {
                    ICsConfigurationBuilder cb = c.Builder.B;
                    cb.BindNamedParameter(clazz, s);
                    foundOne = true;
                }

                IList <string> paramListStr = c.setParamLists.Get(p);
                if (paramListStr != null)
                {
                    ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
                    b.BindList(clazz, paramListStr);
                    foundOne = true;
                }

                foreach (string paramStr in c.setParamSets.GetValuesForKey(p))
                {
                    ICsInternalConfigurationBuilder b = (ICsInternalConfigurationBuilder)c.Builder.B;
                    b.BindSetEntry(clazz, paramStr);
                    foundOne = true;
                }

                if (!foundOne)
                {
                    if (!ReflectionUtilities.IsInstanceOfGeneric(p, typeof(OptionalParameter <>)))
                    {
                        Org.Apache.REEF.Utilities.Diagnostics.Exceptions.Throw(new IllegalStateException(), LOGGER);
                    }
                }
            }
            return(c.Builder.B.Build());
        }