示例#1
0
        private static void GetDependsOnWriteableDataStructure(DataStructureInfo dataStructure, List <DataStructureInfo> dependencies, IDslModel allConcepts, IConceptInfo errorContext, HashSet <string> done)
        {
            var conceptKey = dataStructure.GetKey();

            if (done.Contains(conceptKey))
            {
                return;
            }
            done.Add(conceptKey);

            if (dataStructure is EntityInfo)
            {
                dependencies.Add(dataStructure);
            }
            else if (dataStructure is SqlQueryableInfo)
            {
                var deps = allConcepts.FindByType <SqlDependsOnDataStructureInfo>().Where(dep => dep.Dependent == dataStructure).ToArray();
                foreach (var dep in deps)
                {
                    GetDependsOnWriteableDataStructure(dep.DependsOn, dependencies, allConcepts, errorContext, done);
                }
            }
            else
            {
                throw new DslSyntaxException(errorContext.GetKeywordOrTypeName()
                                             + " is not supported on dependency type '" + dataStructure.GetKeywordOrTypeName() + "'. "
                                             + errorContext.GetUserDescription() + " depends on " + dataStructure.GetUserDescription() + ".");
            }
        }
示例#2
0
        private static ValueOrError <DataStructureInfo> NavigateToNextDataStructure(DataStructureInfo source, string referenceName, IDslModel existingConcepts)
        {
            var selectedProperty = FindProperty(existingConcepts, source, referenceName);

            IEnumerable <DataStructureExtendsInfo> allExtensions;

            allExtensions = existingConcepts.FindByType <DataStructureExtendsInfo>();

            if (selectedProperty == null && referenceName == "Base")
            {
                var baseDataStructure = allExtensions
                                        .Where(ex => ex.Extension == source)
                                        .Select(ex => ex.Base).SingleOrDefault();
                if (baseDataStructure != null)
                {
                    return(baseDataStructure);
                }

                if (selectedProperty == null)
                {
                    return(ValueOrError.CreateError("There is no property '" + referenceName + "' nor a base data structure on " + source.GetUserDescription() + "."));
                }
            }

            if (selectedProperty == null && referenceName.StartsWith("Extension_"))
            {
                string extensionName           = referenceName.Substring("Extension_".Length);
                var    extendsionDataStructure = allExtensions
                                                 .Where(ex => ex.Base == source)
                                                 .Where(ex => ex.Extension.Module == source.Module && ex.Extension.Name == extensionName ||
                                                        ex.Extension.Module.Name + "_" + ex.Extension.Name == extensionName)
                                                 .Select(ex => ex.Extension).SingleOrDefault();
                if (extendsionDataStructure != null)
                {
                    return(extendsionDataStructure);
                }

                if (selectedProperty == null)
                {
                    return(ValueOrError.CreateError("There is no property '" + referenceName + "' nor an extension '" + extensionName + "' on " + source.GetUserDescription() + "."));
                }
            }

            if (selectedProperty == null)
            {
                return(ValueOrError.CreateError("There is no property '" + referenceName + "' on " + source.GetUserDescription() + "."));
            }

            if (!(selectedProperty is ReferencePropertyInfo))
            {
                return(ValueOrError.CreateError(string.Format("Property {0} cannot be used in the path because it is '{1}'. Only Reference properties can be used in a path.",
                                                              selectedProperty.Name, selectedProperty.GetKeywordOrTypeName())));
            }

            return(((ReferencePropertyInfo)selectedProperty).Referenced);
        }
示例#3
0
        private static void GetDependsOnWriteableDataStructure(DataStructureInfo dataStructure, List<DataStructureInfo> dependencies, IEnumerable<IConceptInfo> allConcepts, IConceptInfo errorContext, HashSet<string> done)
        {
            var conceptKey = dataStructure.GetKey();
            if (done.Contains(conceptKey))
                return;
            done.Add(conceptKey);

            if (dataStructure is EntityInfo)
                dependencies.Add(dataStructure);
            else if (dataStructure is SqlQueryableInfo)
            {
                var deps = allConcepts.OfType<SqlDependsOnDataStructureInfo>().Where(dep => dep.Dependent == dataStructure).ToArray();
                foreach (var dep in deps)
                    GetDependsOnWriteableDataStructure(dep.DependsOn, dependencies, allConcepts, errorContext, done);
            }
            else
                throw new DslSyntaxException(errorContext.GetKeywordOrTypeName()
                    + " is not supported on dependency type '" + dataStructure.GetKeywordOrTypeName() + "'. "
                    + errorContext.GetUserDescription() + " depends on " + dataStructure.GetUserDescription() + ".");
        }
示例#4
0
        private static ValueOrError<DataStructureInfo> NavigateToNextDataStructure(DataStructureInfo source, string referenceName, IDslModel existingConcepts)
        {
            var selectedProperty = FindProperty(existingConcepts, source, referenceName);

            IEnumerable<DataStructureExtendsInfo> allExtensions;
            allExtensions = existingConcepts.FindByType<DataStructureExtendsInfo>();

            if (selectedProperty == null && referenceName == "Base")
            {
                var baseDataStructure = allExtensions
                    .Where(ex => ex.Extension == source)
                    .Select(ex => ex.Base).SingleOrDefault();
                if (baseDataStructure != null)
                    return baseDataStructure;

                if (selectedProperty == null)
                    return ValueOrError.CreateError("There is no property '" + referenceName + "' nor a base data structure on " + source.GetUserDescription() + ".");
            }

            if (selectedProperty == null && referenceName.StartsWith("Extension_"))
            {
                string extensionName = referenceName.Substring("Extension_".Length);
                var extendsionDataStructure = allExtensions
                    .Where(ex => ex.Base == source)
                    .Where(ex => ex.Extension.Module == source.Module && ex.Extension.Name == extensionName
                        || ex.Extension.Module.Name + "_" + ex.Extension.Name == extensionName)
                    .Select(ex => ex.Extension).SingleOrDefault();
                if (extendsionDataStructure != null)
                    return extendsionDataStructure;

                if (selectedProperty == null)
                    return ValueOrError.CreateError("There is no property '" + referenceName + "' nor an extension '" + extensionName + "' on " + source.GetUserDescription() + ".");
            }

            if (selectedProperty == null)
                return ValueOrError.CreateError("There is no property '" + referenceName + "' on " + source.GetUserDescription() + ".");

            if (!(selectedProperty is ReferencePropertyInfo))
                return ValueOrError.CreateError(string.Format("Property {0} cannot be used in the path because it is '{1}'. Only Reference properties can be used in a path.",
                    selectedProperty.Name, selectedProperty.GetKeywordOrTypeName()));

            return ((ReferencePropertyInfo)selectedProperty).Referenced;
        }