public void ProcessScriptBase(IScriptBase scriptBase, XmlNode scriptBaseNode)
        {
            /*
             *      <Name>Table1</Name>
             *      <Description />
             *      <Enabled>False</Enabled>
             *      <IsUserDefined>False</IsUserDefined>
             *      <UID>00000000-0000-0000-0000-000000000000</UID>
             */

            NodeProcessor proc = new NodeProcessor(scriptBaseNode);

            scriptBase.Name          = proc.GetString("Name");
            scriptBase.Schema        = proc.GetString("Schema");
            scriptBase.Description   = proc.GetString("Description");
            scriptBase.Enabled       = proc.GetBool("Enabled");
            scriptBase.IsUserDefined = proc.GetBool("IsUserDefined");

            if (proc.Exists(VirtualPropertyDeserialiser.VirtualPropertiesNodeName))
            {
                var deserialiser = new VirtualPropertyDeserialiser();
                scriptBase.Ex =
                    deserialiser.DeserialiseVirtualProperties(
                        scriptBaseNode.SelectSingleNode(VirtualPropertyDeserialiser.VirtualPropertiesNodeName));
            }
        }
        public IIndex ProcessIndexNode(XmlNode node, ITable parent, IDatabase db)
        {
            IIndex index = new Index();

            index.Parent = parent;
            ProcessScriptBase(index, node);

            /*
             *      <IsUnique>True</IsUnique>
             *      <IsClustered>False</IsClustered>
             *      <Datatype>Unique</Datatype>
             *      <Columns>
             *        <ColumnName>ColumnT13</ColumnName>
             *      </Columns>
             */
            NodeProcessor proc = new NodeProcessor(node);

            index.IsUnique    = proc.GetBool("IsUnique");
            index.IsClustered = proc.GetBool("IsClustered");
            index.IndexType   = proc.GetEnum <DatabaseIndexType>("Datatype");

            var columnNodeList = node.SelectNodes("Columns/ColumnName");

            if (columnNodeList != null)
            {
                foreach (XmlNode columnRef in columnNodeList)
                {
                    index.AddColumn(columnRef.InnerText);
                }
            }

            return(index);
        }
        /// <summary>
        /// Creates a FunctionInfo object from the given XML. Because it
        /// has to resolve Type objects, this should only be done after
        /// all referenced assemblies are loaded into the current AppDomain.
        /// </summary>
        /// <param name="rootElement"></param>
        /// <returns></returns>
        public virtual FunctionInfo ReadFunction(XmlNode rootElement)
        {
            if (rootElement == null)
            {
                throw new DeserialisationException("Could not find Function node");
            }

            CheckVersion(rootElement);

            NodeProcessor proc = new NodeProcessor(rootElement);

            var  name               = proc.GetString("Name");
            bool isTemplateFunc     = proc.GetBool("IsTemplateFunction");
            bool isExtMethod        = proc.GetBool("IsExtensionMethod");
            var  extendedType       = proc.GetString("ExtendedType");
            var  scriptLang         = proc.GetEnum <SyntaxEditorHelper.ScriptLanguageTypes>("ScriptLanguage");
            var  description        = proc.GetString("Description");
            var  category           = proc.GetString("Category");
            var  bodyText           = proc.GetString("Body");
            var  returnType         = GetTypeNamed(proc.GetString("ReturnType"));
            var  templateReturnLang = proc.GetString("TemplateReturnLanguage");

            FunctionInfo fi = new FunctionInfo(name, returnType, bodyText, isTemplateFunc, scriptLang, description, templateReturnLang, category, isExtMethod, extendedType);

            ProcessFunctionParameters(fi, rootElement);

            return(fi);
        }
Exemple #4
0
        public Discriminator DeserialiseDiscriminator(XmlNode discriminatorNode)
        {
            NodeProcessor processor = new NodeProcessor(discriminatorNode);

            Discriminator discriminator = new Discriminator();

            discriminator.AllowNull         = processor.GetBool("AllowNull");
            discriminator.ColumnName        = processor.GetString("ColumnName");
            discriminator.DiscriminatorType = (Enums.DiscriminatorTypes)Enum.Parse(typeof(Enums.DiscriminatorTypes), processor.GetString("DiscriminatorType"), true);
            discriminator.Force             = processor.GetBool("Force");
            discriminator.Formula           = processor.GetString("Formula");
            discriminator.Insert            = processor.GetBool("Insert");
            return(discriminator);
        }
        public IKey ProcessKeyNode(XmlNode node, ITable parent, IDatabase db)
        {
            IKey key = new Key();

            key.Parent = parent;
            ProcessScriptBase(key, node);

            /*
             *      <Keytype>Primary</Keytype>
             *      <Columns>
             *        <ColumnName>ColumnT11</ColumnName>
             *      </Columns>
             *      <ReferencedKey>
             *              <KeyName>ForeignKey</KeyName>
             *              <TableName>Table2</TableName>
             *      </ReferencedKey>
             */
            NodeProcessor proc = new NodeProcessor(node);

            key.Keytype  = proc.GetEnum <DatabaseKeyType>("Keytype");
            key.IsUnique = proc.GetBool("IsUnique");

            var columnNodeList = node.SelectNodes("Columns/ColumnName");

            if (columnNodeList != null)
            {
                foreach (XmlNode columnRef in columnNodeList)
                {
                    key.AddColumn(columnRef.InnerText);
                }
            }

            return(key);
        }
Exemple #6
0
        public Property DeserialiseProperty(XmlNode propertyNode, EntityImpl parentEntity)
        {
            Property property = new PropertyImpl();

            property.Entity = parentEntity;

            NodeProcessor processor = new NodeProcessor(propertyNode);

            if (processor.Exists("IsKey"))
            {
                property.IsKeyProperty = processor.GetBool("IsKey");
            }

            property.Name     = processor.GetString("Name");
            property.ReadOnly = processor.GetBool("ReadOnly");
            property.Type     = processor.GetString("Type");

            if (processor.Exists("NHibernateType"))
            {
                property.NHibernateType = processor.GetString("NHibernateType");
            }

            if (processor.Exists("Validation"))
            {
                property.ValidationOptions = DeserialiseValidationOptions(propertyNode.SelectSingleNode("Validation"));
            }
            else
            {
                property.ValidationOptions = new ValidationOptions();
            }

            if (processor.Exists("IsHiddenByAbstractParent"))
            {
                property.IsHiddenByAbstractParent = processor.GetBool("IsHiddenByAbstractParent");
            }

            if (processor.Exists("IsPartOfHiddenKey"))
            {
                property.IsPartOfHiddenKey = processor.GetBool("IsPartOfHiddenKey");
            }

            ProcessScriptBase(property, propertyNode);

            return(property);
        }
Exemple #7
0
        public Reference DeserialiseReference(XmlNode refNode, EntitySet set)
        {
            Reference reference = new ReferenceImpl();

            NodeProcessor processor = new NodeProcessor(refNode);

            reference.Identifier  = processor.Attributes.GetGuid("identifier");
            reference.End1Name    = processor.GetString("End1Name");
            reference.End2Name    = processor.GetString("End2Name");
            reference.End1Enabled = processor.GetBool("End1Enabled");
            reference.End2Enabled = processor.GetBool("End2Enabled");

            reference.Entity1 = set.GetEntity(processor.GetString("Entity1"));
            reference.Entity2 = set.GetEntity(processor.GetString("Entity2"));

            reference.Cardinality1 = DeserialiseCardinality(refNode.SelectSingleNode("Cardinality1"));
            reference.Cardinality2 = DeserialiseCardinality(refNode.SelectSingleNode("Cardinality2"));

            if (Version >= 2)
            {
                reference.IncludeForeignKey = processor.GetBool("IncludeForeignKey");
            }

            ProcessScriptBase(reference, refNode);

            // Fixup virtual properties of type PropertiesForThisEntity
            foreach (var uo in reference.Ex.Where(v => v.DataType == TypePropertiesForThisEntity))
            {
                object obj = null;

                if (reference.Entity1 != null)
                {
                    obj = reference.Entity1.Properties.SingleOrDefault(p => p.Name.Equals(uo.Value.ToString(), StringComparison.InvariantCultureIgnoreCase));
                }

                if (obj == null && reference.Entity2 != null)
                {
                    obj = reference.Entity2.Properties.SingleOrDefault(p => p.Name.Equals(uo.Value.ToString(), StringComparison.InvariantCultureIgnoreCase));
                }

                uo.Value = obj;
            }
            return(reference);
        }
        public virtual UserOption ReadUserOption(XmlNode rootElement)
        {
            if (rootElement == null)
            {
                throw new DeserialisationException("Could not find Option element");
            }

            CheckVersion(rootElement);

            NodeProcessor proc = new NodeProcessor(rootElement);

            var  varName           = proc.GetString("VariableName");
            var  varType           = GetTypeNamed(proc.GetString("Type"));
            var  displayText       = proc.GetString("DisplayText");
            var  descr             = proc.GetString("Description");
            var  defaultValueBody  = proc.GetString("DefaultValue");
            var  iteratorType      = GetTypeNamed(proc.GetString("IteratorName"));
            var  validatorBody     = proc.GetString("ValidatorFunction");
            var  displayToUserBody = proc.GetString("DisplayToUserFunction");
            bool resetPerSesion    = proc.GetBool("ResetPerSession");

            List <string> values     = new List <string>();
            XmlNodeList   valueNodes = rootElement.SelectNodes("Values/Value");

            if (valueNodes != null)
            {
                foreach (XmlNode valueNode in valueNodes)
                {
                    values.Add(valueNode.Attributes["value"].Value);
                }
            }

            UserOption uo = new UserOption(varName, "", varType,
                                           displayText, descr, values, defaultValueBody,
                                           iteratorType, validatorBody, displayToUserBody, resetPerSesion);

            return(uo);
        }
        public IColumn ProcessColumnNode(XmlNode node)
        {
            IColumn column = new Column();

            ProcessScriptBase(column, node);

            /*
             *      <Datatype>int</Datatype>
             *      <Default />
             *      <InPrimaryKey>True</InPrimaryKey>
             *      <IsCalculated>False</IsCalculated>
             *      <IsComputed>False</IsComputed>
             *      <IsIdentity>False</IsIdentity>
             *      <IsNullable>False</IsNullable>
             *      <IsReadOnly>False</IsReadOnly>
             *      <IsUnique>True</IsUnique>
             *      <OrdinalPosition>1</OrdinalPosition>
             *      <Precision>10</Precision>
             *      <Scale>0</Scale>
             *      <Size>0</Size>
             */
            NodeProcessor proc = new NodeProcessor(node);

            column.OriginalDataType = proc.GetString("Datatype");
            column.Default          = proc.GetString("Default");
            column.InPrimaryKey     = proc.GetBool("InPrimaryKey");
            column.IsCalculated     = proc.GetBool("IsCalculated");
            column.IsComputed       = proc.GetBool("IsComputed");
            column.IsIdentity       = proc.GetBool("IsIdentity");
            column.IsNullable       = proc.GetBool("IsNullable");
            column.IsReadOnly       = proc.GetBool("IsReadOnly");
            column.IsUnique         = proc.GetBool("IsUnique");
            column.OrdinalPosition  = proc.GetInt("OrdinalPosition");
            column.Precision        = proc.GetInt("Precision");
            column.Scale            = proc.GetInt("Scale");
            column.Size             = proc.GetLong("Size");

            return(column);
        }
        public void ProcessScriptBase(IScriptBase scriptBase, XmlNode scriptBaseNode)
        {
            /*
                <Name>Table1</Name>
                <Description />
                <Enabled>False</Enabled>
                <IsUserDefined>False</IsUserDefined>
                <UID>00000000-0000-0000-0000-000000000000</UID>
             */

            NodeProcessor proc = new NodeProcessor(scriptBaseNode);

            scriptBase.Name = proc.GetString("Name");
            scriptBase.Schema = proc.GetString("Schema");
            scriptBase.Description = proc.GetString("Description");
            scriptBase.Enabled = proc.GetBool("Enabled");
            scriptBase.IsUserDefined = proc.GetBool("IsUserDefined");

            if (proc.Exists(VirtualPropertyDeserialiser.VirtualPropertiesNodeName))
            {
                var deserialiser = new VirtualPropertyDeserialiser();
                scriptBase.Ex =
                    deserialiser.DeserialiseVirtualProperties(
                        scriptBaseNode.SelectSingleNode(VirtualPropertyDeserialiser.VirtualPropertiesNodeName));
            }
        }
        /// <summary>
        /// Creates a FunctionInfo object from the given XML. Because it
        /// has to resolve Type objects, this should only be done after
        /// all referenced assemblies are loaded into the current AppDomain.
        /// </summary>
        /// <param name="rootElement"></param>
        /// <returns></returns>
        public virtual FunctionInfo ReadFunction(XmlNode rootElement)
        {
            if (rootElement == null) throw new DeserialisationException("Could not find Function node");

            CheckVersion(rootElement);

            NodeProcessor proc = new NodeProcessor(rootElement);

            var name = proc.GetString("Name");
            bool isTemplateFunc = proc.GetBool("IsTemplateFunction");
            bool isExtMethod = proc.GetBool("IsExtensionMethod");
            var extendedType = proc.GetString("ExtendedType");
            var scriptLang = proc.GetEnum<SyntaxEditorHelper.ScriptLanguageTypes>("ScriptLanguage");
            var description = proc.GetString("Description");
            var category = proc.GetString("Category");
            var bodyText = proc.GetString("Body");
            var returnType = GetTypeNamed(proc.GetString("ReturnType"));
            var templateReturnLang = proc.GetString("TemplateReturnLanguage");

            FunctionInfo fi = new FunctionInfo(name, returnType, bodyText, isTemplateFunc, scriptLang, description, templateReturnLang, category, isExtMethod, extendedType);

            ProcessFunctionParameters(fi, rootElement);

            return fi;
        }
        private ConnectionStringHelper LoadGenericDatabaseData(XmlNode node, DatabaseTypes databaseType)
        {
            NodeProcessor proc = new NodeProcessor(node);

            var connectionHelper = new ConnectionStringHelper();

            if (string.IsNullOrEmpty(connectionHelper.ServerName))
            {
                switch (databaseType)
                {
                case DatabaseTypes.SQLCE:
                //case DatabaseTypes.SQLServer2000:
                case DatabaseTypes.SQLServer2005:
                    connectionHelper.ServerName = Environment.MachineName;
                    break;

                case DatabaseTypes.SQLServerExpress:
                    connectionHelper.ServerName = Environment.MachineName + "\\SQLEXPRESS";
                    break;

                case DatabaseTypes.MySQL:
                    connectionHelper.ServerName = "localhost";
                    break;

                case DatabaseTypes.Oracle:
                    connectionHelper.ServerName = "localhost";
                    break;

                case DatabaseTypes.PostgreSQL:
                    connectionHelper.ServerName = "localhost";
                    break;

                case DatabaseTypes.Firebird:
                    connectionHelper.ServerName = "localhost";
                    break;

                case DatabaseTypes.SQLite:
                    connectionHelper.ServerName = Environment.MachineName;
                    break;

                default:
                    throw new NotImplementedException("Database type not handled yet: " + databaseType.ToString());
                }
            }
            connectionHelper.CurrentDbType = databaseType;

            if (proc.Exists("ServerName"))
            {
                connectionHelper.ServerName = proc.GetString("ServerName");
            }

            if (proc.Exists("DatabaseName"))
            {
                connectionHelper.DatabaseName = proc.GetString("DatabaseName");
                connectionHelper.UseFileName  = false;
            }
            if (proc.Exists("FileName"))
            {
                connectionHelper.FileName    = proc.GetString("FileName");
                connectionHelper.UseFileName = true;
            }
            if (proc.Exists("UseIntegratedSecurity"))
            {
                connectionHelper.UseIntegratedSecurity = proc.GetBool("UseIntegratedSecurity");
            }

            if (proc.Exists("UserName"))
            {
                connectionHelper.UserName = proc.GetString("UserName");
            }

            if (proc.Exists("Password"))
            {
                string password = "";
                try
                {
                    password = proc.GetString("Password").Decrypt();
                }
                catch
                {
                    // Do nothing
                    password = "";
                }
                connectionHelper.Password = password;
            }
            if (proc.Exists("Port"))
            {
                connectionHelper.Port = proc.GetInt("Port");
            }

            if (proc.Exists("ServiceName"))
            {
                connectionHelper.ServiceName = proc.GetString("ServiceName");
            }

            if (proc.Exists("SchemaName"))
            {
                connectionHelper.ServiceName = proc.GetString("SchemaName");
            }

            if (proc.Exists("UseDirectConnection"))
            {
                connectionHelper.UseDirectConnection = proc.GetBool("UseDirectConnection");
            }
            else
            {
                connectionHelper.UseDirectConnection = false;
            }

            return(connectionHelper);
        }
        public virtual UserOption ReadUserOption(XmlNode rootElement)
        {
            if (rootElement == null)
                throw new DeserialisationException("Could not find Option element");

            CheckVersion(rootElement);

            NodeProcessor proc = new NodeProcessor(rootElement);

            var varName = proc.GetString("VariableName");
            var varType = GetTypeNamed(proc.GetString("Type"));
            var displayText = proc.GetString("DisplayText");
            var descr = proc.GetString("Description");
            var defaultValueBody = proc.GetString("DefaultValue");
            var iteratorType = GetTypeNamed(proc.GetString("IteratorName"));
            var validatorBody = proc.GetString("ValidatorFunction");
            var displayToUserBody = proc.GetString("DisplayToUserFunction");
            bool resetPerSesion = proc.GetBool("ResetPerSession");

            List<string> values = new List<string>();
            XmlNodeList valueNodes = rootElement.SelectNodes("Values/Value");
            if (valueNodes != null)
            {
                foreach (XmlNode valueNode in valueNodes)
                {
                    values.Add(valueNode.Attributes["value"].Value);
                }
            }

            UserOption uo = new UserOption(varName, "", varType,
                                           displayText, descr, values, defaultValueBody,
                                           iteratorType, validatorBody, displayToUserBody, resetPerSesion);

            return uo;
        }
        public IColumn ProcessColumnNode(XmlNode node)
        {
            IColumn column = new Column();
            ProcessScriptBase(column, node);
            /*
                <Datatype>int</Datatype>
                <Default />
                <InPrimaryKey>True</InPrimaryKey>
                <IsCalculated>False</IsCalculated>
                <IsComputed>False</IsComputed>
                <IsIdentity>False</IsIdentity>
                <IsNullable>False</IsNullable>
                <IsReadOnly>False</IsReadOnly>
                <IsUnique>True</IsUnique>
                <OrdinalPosition>1</OrdinalPosition>
                <Precision>10</Precision>
                <Scale>0</Scale>
                <Size>0</Size>
             */
            NodeProcessor proc = new NodeProcessor(node);

            column.OriginalDataType = proc.GetString("Datatype");
            column.Default = proc.GetString("Default");
            column.InPrimaryKey = proc.GetBool("InPrimaryKey");
            column.IsCalculated = proc.GetBool("IsCalculated");
            column.IsComputed = proc.GetBool("IsComputed");
            column.IsIdentity = proc.GetBool("IsIdentity");
            column.IsNullable = proc.GetBool("IsNullable");
            column.IsReadOnly = proc.GetBool("IsReadOnly");
            column.IsUnique = proc.GetBool("IsUnique");
            column.OrdinalPosition = proc.GetInt("OrdinalPosition");
            column.Precision = proc.GetInt("Precision");
            column.Scale = proc.GetInt("Scale");
            column.Size = proc.GetLong("Size");

            return column;
        }
        public IIndex ProcessIndexNode(XmlNode node, ITable parent, IDatabase db)
        {
            IIndex index = new Index();
            index.Parent = parent;
            ProcessScriptBase(index, node);
            /*
                <IsUnique>True</IsUnique>
                <IsClustered>False</IsClustered>
                <Datatype>Unique</Datatype>
                <Columns>
                  <ColumnName>ColumnT13</ColumnName>
                </Columns>
             */
            NodeProcessor proc = new NodeProcessor(node);

            index.IsUnique = proc.GetBool("IsUnique");
            index.IsClustered = proc.GetBool("IsClustered");
            index.IndexType = proc.GetEnum<DatabaseIndexType>("Datatype");

            var columnNodeList = node.SelectNodes("Columns/ColumnName");

            if (columnNodeList != null)
                foreach (XmlNode columnRef in columnNodeList)
                    index.AddColumn(columnRef.InnerText);

            return index;
        }
        private ConnectionStringHelper LoadGenericDatabaseData(XmlNode node, DatabaseTypes databaseType)
        {
            NodeProcessor proc = new NodeProcessor(node);

            var connectionHelper = new ConnectionStringHelper();

            if (string.IsNullOrEmpty(connectionHelper.ServerName))
            {
                switch (databaseType)
                {
                    case DatabaseTypes.SQLCE:
                    //case DatabaseTypes.SQLServer2000:
                    case DatabaseTypes.SQLServer2005:
                        connectionHelper.ServerName = Environment.MachineName;
                        break;
                    case DatabaseTypes.SQLServerExpress:
                        connectionHelper.ServerName = Environment.MachineName + "\\SQLEXPRESS";
                        break;
                    case DatabaseTypes.MySQL:
                        connectionHelper.ServerName = "localhost";
                        break;
                    case DatabaseTypes.Oracle:
                        connectionHelper.ServerName = "localhost";
                        break;
                    case DatabaseTypes.PostgreSQL:
                        connectionHelper.ServerName = "localhost";
                        break;
                    case DatabaseTypes.Firebird:
                        connectionHelper.ServerName = "localhost";
                        break;
                    case DatabaseTypes.SQLite:
                        connectionHelper.ServerName = Environment.MachineName;
                        break;
                    default:
                        throw new NotImplementedException("Database type not handled yet: " + databaseType.ToString());

                }
            }
            connectionHelper.CurrentDbType = databaseType;

            if (proc.Exists("ServerName"))
                connectionHelper.ServerName = proc.GetString("ServerName");

            if (proc.Exists("DatabaseName"))
            {
                connectionHelper.DatabaseName = proc.GetString("DatabaseName");
                connectionHelper.UseFileName = false;
            }
            if (proc.Exists("FileName"))
            {
                connectionHelper.FileName = proc.GetString("FileName");
                connectionHelper.UseFileName = true;
            }
            if (proc.Exists("UseIntegratedSecurity"))
                connectionHelper.UseIntegratedSecurity = proc.GetBool("UseIntegratedSecurity");

            if (proc.Exists("UserName"))
                connectionHelper.UserName = proc.GetString("UserName");

            if (proc.Exists("Password"))
            {
                string password = "";
                try
                {
                    password = proc.GetString("Password").Decrypt();
                }
                catch
                {
                    // Do nothing
                    password = "";
                }
                connectionHelper.Password = password;
            }
            if (proc.Exists("Port"))
                connectionHelper.Port = proc.GetInt("Port");

            if (proc.Exists("ServiceName"))
                connectionHelper.ServiceName = proc.GetString("ServiceName");

            if (proc.Exists("SchemaName"))
                connectionHelper.ServiceName = proc.GetString("SchemaName");

            if (proc.Exists("UseDirectConnection"))
                connectionHelper.UseDirectConnection = proc.GetBool("UseDirectConnection");
            else
                connectionHelper.UseDirectConnection = false;

            return connectionHelper;
        }
        public IKey ProcessKeyNode(XmlNode node, ITable parent, IDatabase db)
        {
            IKey key = new Key();
            key.Parent = parent;
            ProcessScriptBase(key, node);
            /*
                <Keytype>Primary</Keytype>
                <Columns>
                  <ColumnName>ColumnT11</ColumnName>
                </Columns>
                <ReferencedKey>
                    <KeyName>ForeignKey</KeyName>
                    <TableName>Table2</TableName>
                </ReferencedKey>
             */
            NodeProcessor proc = new NodeProcessor(node);

            key.Keytype = proc.GetEnum<DatabaseKeyType>("Keytype");
            key.IsUnique = proc.GetBool("IsUnique");

            var columnNodeList = node.SelectNodes("Columns/ColumnName");
            if (columnNodeList != null)
            {
                foreach (XmlNode columnRef in columnNodeList)
                {
                    key.AddColumn(columnRef.InnerText);
                }
            }

            return key;
        }