コード例 #1
0
        public void AddReference(string fileName)
        {
            ReferenceEntry r = new ReferenceEntry(fileName);

            references.Add(r);

            DataModel m = new DataModel();

            m.Load(fileName);

            foreach (ModelFolder folder in m.Folders)
            {
                foreach (object i in folder.Items)
                {
                    if (i is ModelClass)
                    {
                        DataTypeManager.AddDataType(new ReferenceType((ModelClass)i, r));
                    }
                }
            }
        }
コード例 #2
0
ファイル: ValueField.cs プロジェクト: rahodges/NitroCast
        public ValueField(XmlTextReader r, string version) : this()
        {
            if (r.Name != "FieldEntry")
            {
                throw new Exception(string.Format("Cannot load, expected FieldEntry, found '{0}'.",
                                                  r.Name));
            }

            r.MoveToAttribute("PropertyName");
            this.Name = r.Value;
            r.MoveToAttribute("CustomPrivateName");
            //this.customPrivateName = r.Value;
            CustomPrivateName = string.Empty;
            r.MoveToAttribute("CustomColumnName");
            //this.customColumnName = r.Value;
            CustomColumnName = string.Empty;
            r.MoveToContent();
            r.Read();

            valueType = DataTypeManager.FindFieldType(r.ReadElementString("DataType"));
            if (r.Name == "Builder")
            {
                ValueTypeBuilder.Builders.TryGetValue(r.ReadElementString("Builder"), out builder);
            }

            length            = int.Parse(r.ReadElementString("Length"));
            defaultFormat     = r.ReadElementString("DefaultFormat");
            defaultValue      = r.ReadElementString("DefaultValue");
            Caption           = r.ReadElementString("Caption");;
            Description       = r.ReadElementString("Description");
            validatorRequired = bool.Parse(r.ReadElementString("ValidatorRequired"));
            validatorRegEx    = r.ReadElementString("ValidatorRegEx");
            validatorError    = r.ReadElementString("ValidatorError");
            isNullable        = bool.Parse(r.ReadElementString("IsNullable"));
            if (r.LocalName == "NullValue")
            {
                nullValue = r.ReadElementString("NullValue");
            }
            if (r.LocalName == "UseDefaultValueOnNull")
            {
                useDefaultValueOnNull = bool.Parse(r.ReadElementString("UseDefaultValueOnNull"));
            }
            if (r.LocalName == "IsIndexed")
            {
                isIndexed = bool.Parse(r.ReadElementString("IsIndexed"));
            }
            if (r.LocalName == "IsUnique")
            {
                isUnique = bool.Parse(r.ReadElementString("IsUnique"));
            }
            if (r.LocalName == "Group")
            {
                group = r.ReadElementString("Group");
            }
            if (r.LocalName == "IsClientGridEnabled")
            {
                isClientGridEnabled = bool.Parse(r.ReadElementString("IsClientGridEnabled"));
            }
            if (r.LocalName == "IsClientEditEnabled")
            {
                isClientEditEnabled = bool.Parse(r.ReadElementString("IsClientEditEnabled"));
            }
            if (r.LocalName == "IsClientViewEnabled")
            {
                isClientViewEnabled = bool.Parse(r.ReadElementString("IsClientViewEnabled"));
            }

            if (r.Name == "MetaAttributes")
            {
                if (!r.IsEmptyElement)
                {
                    r.Read();
                    while (r.LocalName == "MetaAttribute")
                    {
                        attributes.Add(new MetaAttribute(r));
                    }
                    r.ReadEndElement();
                }
                else
                {
                    r.Read();
                }
            }


            if (r.Name == "Extensions")
            {
                if (!r.IsEmptyElement)
                {
                    r.Read();

                    while (r.Name == "Extension")
                    {
                        ValueFieldExtension newExtension = (ValueFieldExtension)
                                                           ObjectExtension.Build(r, version);
                        extensions.Add(newExtension.GetType(), newExtension);
                    }

                    r.ReadEndElement();
                }
                else
                {
                    r.Read();
                }
            }

            r.ReadEndElement();
        }
コード例 #3
0
        private void parse1_11File(XmlTextReader r)
        {
            string      fileVersion;
            ModelFolder defaultFolder = null;

            fileVersion = "1.11";

            name             = r.ReadElementString("Name");
            defaultNamespace = r.ReadElementString("DefaultNamespace");
            if (r.LocalName == "Description")
            {
                description = r.ReadElementString("Description");
            }
            if (r.LocalName == "ConnectionString")
            {
                connectionString = r.ReadElementString("ConnectionString");
            }
            if (r.LocalName == "ConnectionStringIsCoded")
            {
                connectionStringIsCoded = bool.Parse(r.ReadElementString("ConnectionStringIsCoded"));
            }
            if (r.LocalName == "ConnectionStringIsConfigKey")
            {
                connectionStringIsConfigKey = bool.Parse(r.ReadElementString("ConnectionStringIsConfigKey"));
            }
            if (r.LocalName == "VersionMajor")
            {
                version.Major = int.Parse(r.ReadElementString("VersionMajor"));
            }
            if (r.LocalName == "VersionMinor")
            {
                version.Minor = int.Parse(r.ReadElementString("VersionMinor"));
            }
            if (r.LocalName == "VersionBuild")
            {
                version.Build = int.Parse(r.ReadElementString("VersionBuild"));
            }

            if (r.Name == "References" && !r.IsEmptyElement)
            {
                r.Read();

                while (r.LocalName == "ReferenceEntry")
                {
                    references.Add(new ReferenceEntry(r));
                }

                r.ReadEndElement();
            }
            else
            {
                r.Read();
            }

            //
            // Skip Field Data Types on 1.1 models
            //
            while (r.Name != "ChildDataTypes")
            {
                r.Read();
            }

            if (r.Name == "ChildDataTypes" && !r.IsEmptyElement)
            {
                r.Read();
                while (r.LocalName == "ChildDataType")
                {
                    DataTypeManager.AddDataType(new ReferenceType(r));
                }
                r.ReadEndElement();
            }
            else
            {
                r.Read();
            }

            if ((r.Name == "ModelFolders" | r.Name == "ClassObjects") && !r.IsEmptyElement)
            {
                r.Read();
                while (r.LocalName == "ClassObject" | r.LocalName == "ModelFolder")
                {
                    if (r.LocalName == "ClassObject")
                    {
                        // Create a default folder for the class object if it
                        // is not already created.
                        if (defaultFolder == null)
                        {
                            defaultFolder             = new ModelFolder();
                            defaultFolder.Caption     = "General";
                            defaultFolder.Description = "General";
                            defaultFolder.Name        = "General";
                            defaultFolder.ParentModel = this;
                            defaultFolder.IsBrowsable = true;
                            defaultFolder.IsExpanded  = true;
                            this.Folders.Add(defaultFolder);
                        }

                        // Load ClassEntry
                        ModelClass c = new ModelClass(r, fileVersion);
                        c.ParentModel = this;

                        // Add Class Entry to Default Folder
                        defaultFolder.Items.Add(c);
                    }

                    // Add Model Folder
                    if (r.LocalName == "ModelFolder")
                    {
                        ModelFolder f = new ModelFolder(r, this, fileVersion);
                        folders.Add(f);
                    }
                }
                r.ReadEndElement();
            }
            else
            {
                r.Read();
            }
        }
コード例 #4
0
        public void Load(string fileName)
        {
            ModelClass     classEntry;
            ReferenceField childEntry;
            EnumField      enumEntry;

            FileInfo file = new FileInfo(fileName);

            // Progress Start Event
            this.OnProgressStart(this, new DataModelEventArgs(
                                     string.Format(Properties.Resources.ProgressBarLoadText, name),
                                     string.Empty,
                                     "LOAD", new ProgressBarConfig(0, 5, 0, 1)));

            //
            // Test for file existence.
            //
            if (!File.Exists(fileName))
            {
                // Try Loading the NitroCast File
                fileName = fileName.Replace(".DbModel", ".NitroGen");

                if (!File.Exists(fileName))
                {
                    this.OnProgressStop(this, new DataModelEventArgs(
                                            string.Format(Properties.Resources.ProgressBarLoadFailed, file.Name),
                                            string.Empty, "LOAD"));
                    throw new System.IO.FileNotFoundException(
                              string.Format(Properties.Resources.ProgressBarLoadFailed, file.Name));
                }
            }

            this.OnProgressUpdate(this, new DataModelEventArgs(
                                      string.Format(Properties.Resources.ProgressBarLoadInitialize, file.Name),
                                      string.Empty, "LOAD"));

            #region Clear References and Classes

            references.Clear();
            folders.Clear();

            #endregion

            this.OnProgressUpdate(this, new DataModelEventArgs(
                                      string.Format(Properties.Resources.ProgressBarLoadParse, file.Name),
                                      string.Empty, "LOAD"));

            #region Parse Model

            this.fileName = fileName;

            XmlTextReader r = new XmlTextReader(fileName);
            r.WhitespaceHandling = WhitespaceHandling.None;

            r.MoveToContent();

            if (!(r.Name == "dbModel" | r.Name == "NitroCast"))
            {
                throw new Exception("Source file does not match NitroCast DTD.");
            }

            r.MoveToAttribute("version");
            string version = r.Value;
            r.MoveToContent();

            switch (version)
            {
//				case "1.0":
//					r.Read();
//					parse1_0File(r);
//					break;
//				case "1.1":
//					r.Read();
//					parse1_1File(r);
//					break;
            case "1.11":
                r.Read();
                parse1_11File(r);
                break;

            default:
                r.Close();
                throw new Exception(string.Format("Source file version '{0}' incompatible.", version));
            }
            r.Close();

            #endregion

            this.OnProgressUpdate(this, new DataModelEventArgs(
                                      string.Format(Properties.Resources.ProgressBarLoadReferences, file.Name),
                                      string.Empty, "LOAD"));

            #region Load Referenced Data Types

            //
            // Create DataTypes For References Class Entries
            //
            foreach (ReferenceEntry reference in references)
            {
                DataModel m = new DataModel();

                m.Load(PathConverter.GetAbsolutePath(file.DirectoryName, reference.FileName));
                reference.Name = m.Name;

                foreach (ModelFolder folder in m.Folders)
                {
                    foreach (object item in folder.Items)
                    {
                        if (item is ModelClass)
                        {
                            DataTypeManager.AddDataType(new ReferenceType((ModelClass)item, reference));
                        }
                        else if (item is ModelEnum)
                        {
                            DataTypeManager.AddDataType(new EnumType((ModelEnum)item, reference));
                        }
                    }
                }
            }

            #endregion

            this.OnProgressUpdate(this, new DataModelEventArgs(
                                      string.Format(Properties.Resources.ProgressBarLoadBuild, file.Name),
                                      string.Empty, "LOAD"));

            #region Load Internal Data Types

            foreach (ModelFolder f in folders)
            {
                foreach (object item in f.Items)
                {
                    if (item is ModelClass)
                    {
                        DataTypeManager.AddDataType(new ReferenceType((ModelClass)item, null));
                    }
                    else if (item is ModelEnum)
                    {
                        DataTypeManager.AddDataType(new EnumType((ModelEnum)item, null));
                    }
                }
            }

            #endregion

            this.OnProgressUpdate(this, new DataModelEventArgs(
                                      string.Format(Properties.Resources.ProgressBarLoadSort, file.Name),
                                      string.Empty, "LOAD"));

            DataTypeManager.ReferenceTypes.Sort(ModelEntryCompareKey.Name);
            DataTypeManager.ValueTypes.Sort(ModelEntryCompareKey.Name);
            DataTypeManager.EnumTypes.Sort(ModelEntryCompareKey.Name);

            this.OnProgressUpdate(this, new DataModelEventArgs(
                                      string.Format(Properties.Resources.ProgressBarLoadAssociate, file.Name),
                                      string.Empty, "LOAD"));

            #region Associate Datatypes to Children

            //
            // Associate DataTypes to class children.
            //
            foreach (ModelFolder folder in folders)
            {
                foreach (object item in folder.Items)
                {
                    if (item is ModelClass)
                    {
                        classEntry = (ModelClass)item;

                        foreach (ClassFolder classFolder in classEntry.Folders)
                        {
                            foreach (object folderItem in classFolder.Items)
                            {
                                if (folderItem is ReferenceField)
                                {
                                    childEntry = (ReferenceField)folderItem;

                                    if (childEntry.ReferenceType.IsCustom)
                                    {
                                        foreach (ReferenceType cType in DataTypeManager.ReferenceTypes)
                                        {
                                            if (childEntry.ReferenceType.Name == cType.Name &
                                                childEntry.ReferenceType.NameSpace == cType.NameSpace)
                                            {
                                                childEntry.ReferenceType = cType;
                                            }
                                        }
                                    }
                                }
                                else if (folderItem is EnumField)
                                {
                                    enumEntry = (EnumField)folderItem;

                                    if (enumEntry.EnumType.IsCustom)
                                    {
                                        foreach (EnumType cType in DataTypeManager.EnumTypes)
                                        {
                                            if (enumEntry.EnumType.Name == cType.Name &
                                                enumEntry.EnumType.NameSpace == cType.NameSpace)
                                            {
                                                enumEntry.EnumType = cType;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            #endregion

            this.OnProgressStop(this, new DataModelEventArgs(string.Empty, string.Empty, "LOAD"));
        }