Exemple #1
0
        // properties

        private bool ResolveType(FtMetaSubstitution substitution, out string errorDescription)
        {
            errorDescription = "";
            bool   result = true;
            string attributeValue;

            if (!attributeDictionary.TryGetValue(FtMetaSubstitution.PropertyId.Type, out attributeValue))
            {
                substitution.Type = FtMetaSubstitution.DefaultType;
            }
            else
            {
                FtSubstitutionType propertyValue;
                if (SubstitutionTypeFormatter.TryParseAttributeValue(attributeValue, out propertyValue))
                {
                    substitution.Type = propertyValue;
                }
                else
                {
                    errorDescription = string.Format(Properties.Resources.SubstitutionReadElement_ResolveType_Invalid, attributeValue);
                    result           = false;
                }
            }

            return(result);
        }
Exemple #2
0
        protected virtual bool ResolveProperties(FtMetaSubstitution substitution, out string errorDescription)
        {
            errorDescription = "";
            bool result = false;

            foreach (FtMetaSubstitution.PropertyId id in Enum.GetValues(typeof(FtMetaSubstitution.PropertyId)))
            {
                switch (id)
                {
                case FtMetaSubstitution.PropertyId.Type:
                    result = ResolveType(substitution, out errorDescription);
                    break;

                case FtMetaSubstitution.PropertyId.Token:
                    result = ResolveToken(substitution, out errorDescription);
                    break;

                case FtMetaSubstitution.PropertyId.Value:
                    result = ResolveValue(substitution, out errorDescription);
                    break;

                default:
                    throw FtInternalException.Create(InternalError.SubstitutionReadElement_ResolveProperties_UnsupportedPropertyId, id.ToString());
                }

                if (!result)
                {
                    break;
                }
            }
            return(result);
        }
Exemple #3
0
        private bool ResolveToken(FtMetaSubstitution substitution, out string errorDescription)
        {
            errorDescription = "";
            bool   result = true;
            string attributeValue;

            if (!attributeDictionary.TryGetValue(FtMetaSubstitution.PropertyId.Token, out attributeValue))
            {
                errorDescription = string.Format(Properties.Resources.SubstitutionReadElement_ResolveToken_Missing, SubstitutionTypeFormatter.ToAttributeValue(substitution.Type));
                result           = false;
            }
            else
            {
                char propertyValue;
                if (FtStandardText.TryParse(attributeValue, out propertyValue))
                {
                    substitution.Token = propertyValue;
                }
                else
                {
                    errorDescription = string.Format(Properties.Resources.SubstitutionReadElement_ResolveToken_Invalid, attributeValue);
                    result           = false;
                }
            }

            return(result);
        }
Exemple #4
0
        protected virtual bool ResolveSubstitutions(FtMeta meta, out string errorDescription)
        {
            bool result = true;

            errorDescription = "";

            for (int i = 0; i < substitutionList.Count; i++)
            {
                FtMetaSubstitution substitution = meta.SubstitutionList.New();
                if (!substitutionList[i].ResolveTo(substitution, out errorDescription))
                {
                    result = false;
                    break;
                }
            }

            return(result);
        }
Exemple #5
0
        private bool ResolveValue(FtMetaSubstitution substitution, out string errorDescription)
        {
            errorDescription = "";
            bool   result = true;
            string attributeValue;

            if (!attributeDictionary.TryGetValue(FtMetaSubstitution.PropertyId.Value, out attributeValue))
            {
                if (substitution.Type == FtSubstitutionType.String)
                {
                    errorDescription = string.Format(Properties.Resources.SubstitutionReadElement_ResolveValue_MissingForString, substitution.Token.ToString());
                    result           = false;
                }
            }
            else
            {
                substitution.Value = attributeValue;
            }

            return(result);
        }
Exemple #6
0
 internal protected virtual bool ResolveTo(FtMetaSubstitution substitution, out string errorDescription)
 {
     return(ResolveProperties(substitution, out errorDescription));
 }
Exemple #7
0
        public void AllDefaults()
        {
            // Creates Meta with one sequence with one field of each type
            // Sets Meta and fields and sequence redirects properties to default values
            // Saves to XML (Serialize)
            // Compares XML to Expected
            // Creates Meta from XML (Deserialize)
            // Checks properties are as originally set

            state = State.Initialise;

            // Create Meta and set default properties
            FtMeta meta = new FtMeta();

            defaultMetaProperties.LoadIntoMeta(ref meta);

            FtStringMetaField stringField = meta.FieldList.New(FtStandardDataType.String) as FtStringMetaField;

            stringField.Name = StringFieldName;
            FtBooleanMetaField booleanField = meta.FieldList.New(FtStandardDataType.Boolean) as FtBooleanMetaField;

            booleanField.Name = BooleanFieldName;
            FtIntegerMetaField integerField = meta.FieldList.New(FtStandardDataType.Integer) as FtIntegerMetaField;

            integerField.Name = IntegerFieldName;
            FtFloatMetaField floatField = meta.FieldList.New(FtStandardDataType.Float) as FtFloatMetaField;

            floatField.Name = FloatFieldName;
            FtDecimalMetaField decimalField = meta.FieldList.New(FtStandardDataType.Decimal) as FtDecimalMetaField;

            decimalField.Name = DecimalFieldName;
            FtDateTimeMetaField dateTimeField = meta.FieldList.New(FtStandardDataType.DateTime) as FtDateTimeMetaField;

            dateTimeField.Name = DateTimeFieldName;

            FtStringMetaField redirectStringField1 = meta.FieldList.New(FtStandardDataType.String) as FtStringMetaField;

            redirectStringField1.Name = RedirectStringField1Name;
            FtBooleanMetaField redirectBooleanField2 = meta.FieldList.New(FtStandardDataType.Boolean) as FtBooleanMetaField;

            redirectBooleanField2.Name = RedirectBooleanField2Name;
            FtIntegerMetaField redirectIntegerField3 = meta.FieldList.New(FtStandardDataType.Integer) as FtIntegerMetaField;

            redirectIntegerField3.Name = RedirectIntegerField3Name;
            FtFloatMetaField redirectFloatField4 = meta.FieldList.New(FtStandardDataType.Float) as FtFloatMetaField;

            redirectFloatField4.Name = RedirectFloatField4Name;
            FtDecimalMetaField redirectDecimalField5 = meta.FieldList.New(FtStandardDataType.Decimal) as FtDecimalMetaField;

            redirectDecimalField5.Name = RedirectDecimalField5Name;
            FtDateTimeMetaField redirectDateTimeField6 = meta.FieldList.New(FtStandardDataType.DateTime) as FtDateTimeMetaField;

            redirectDateTimeField6.Name = RedirectDateTimeField6Name;

            // Create root sequence
            FtMetaSequence rootSequence = meta.SequenceList.New();

            rootSequence.Name = "Root";
            rootSequence.Root = true;

            // Create redirect target sequence
            FtMetaSequence redirectTargetSequence = meta.SequenceList.New();

            redirectTargetSequence.Name = "RedirectTarget";
            FtMetaSequenceItem     sequenceItem;
            FtMetaSequenceRedirect sequenceRedirect;

            sequenceItem              = redirectTargetSequence.ItemList.New();
            sequenceItem.Field        = redirectStringField1;
            sequenceItem              = redirectTargetSequence.ItemList.New();
            sequenceItem.Field        = redirectBooleanField2;
            sequenceRedirect          = sequenceItem.RedirectList.New(FtStandardSequenceRedirectType.Null);
            sequenceRedirect.Sequence = rootSequence;
            sequenceItem              = redirectTargetSequence.ItemList.New();
            sequenceItem.Field        = redirectIntegerField3;
            sequenceItem              = redirectTargetSequence.ItemList.New();
            sequenceItem.Field        = redirectFloatField4;
            sequenceRedirect          = sequenceItem.RedirectList.New(FtStandardSequenceRedirectType.Null);
            sequenceRedirect.Sequence = rootSequence;
            sequenceItem              = redirectTargetSequence.ItemList.New();
            sequenceItem.Field        = redirectDecimalField5;
            sequenceItem              = redirectTargetSequence.ItemList.New();
            sequenceItem.Field        = redirectDateTimeField6;

            // Create one field of each type and set properties to defaults and put in sequence.  Add default redirect to sequence item redirect list
            AllDefaults_Field(stringField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactString, 0);
            AllDefaults_Field(booleanField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.Boolean, 1);
            booleanField.FalseText = BooleanFalseText;
            booleanField.TrueText  = BooleanTrueText;
            booleanField.Styles    = BooleanStyles;
            AllDefaults_Field(integerField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactInteger, 2);
            integerField.Format = IntegerFieldFormat;
            integerField.Styles = IntegerFieldStyles;
            AllDefaults_Field(floatField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactFloat, 3);
            floatField.Format = FloatFieldFormat;
            floatField.Styles = FloatFieldStyles;
            AllDefaults_Field(decimalField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactDecimal, 4);
            decimalField.Format = DecimalFieldFormat;
            decimalField.Styles = DecimalFieldStyles;
            AllDefaults_Field(dateTimeField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactDateTime, 5);
            dateTimeField.Format = DateTimeFieldFormat;
            dateTimeField.Styles = DateTimeFieldStyles;

            // Add one substitution of default substitution type
            FtMetaSubstitution substitution = meta.SubstitutionList.New();

            substitution.Type  = SubstitutionType;
            substitution.Token = SubstitutionToken;
            substitution.Value = SubstitutionValue;

            // Serialize Meta
            XmlWriter writer = XmlWriter.Create(filePath, xmlWriterSettings);

            FtMetaSerializer.Serialize(meta, writer);
            writer.Close();

            state = State.Assert;

            string DataFilePath = Path.Combine(DataFolder, AllDefaultsFileName);

            if (!TextFilesAreEqual(filePath, DataFilePath))
            {
                Assert.Fail("AllDefaults does not match Test Data");
            }
            else
            {
                FtMeta deserialisedMeta = FtMetaSerializer.Deserialize(filePath);

                defaultMetaProperties.AssertMetaAreEqual(meta);

                rootSequence = meta.SequenceList[0];
                Assert.AreEqual <bool>(true, rootSequence.Root);
                Assert.AreEqual <int>(6, rootSequence.ItemList.Count);
                redirectTargetSequence = meta.SequenceList[1];
                Assert.AreEqual <bool>(false, redirectTargetSequence.Root);
                Assert.AreEqual <int>(6, redirectTargetSequence.ItemList.Count);

                stringField = meta.FieldList[0] as FtStringMetaField;
                Assert.AreEqual <string>(StringFieldName, stringField.Name);
                AllDefaults_Field(stringField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactString, 0);
                booleanField = meta.FieldList[1] as FtBooleanMetaField;
                Assert.AreEqual <string>(BooleanFieldName, booleanField.Name);
                AllDefaults_Field(booleanField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.Boolean, 1);
                Assert.AreEqual <string>(BooleanFalseText, booleanField.FalseText);
                Assert.AreEqual <string>(BooleanTrueText, booleanField.TrueText);
                Assert.AreEqual <FtBooleanStyles>(BooleanStyles, booleanField.Styles);
                integerField = meta.FieldList[2] as FtIntegerMetaField;
                Assert.AreEqual <string>(IntegerFieldName, integerField.Name);
                AllDefaults_Field(integerField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactInteger, 2);
                Assert.AreEqual <string>(IntegerFieldFormat, integerField.Format);
                Assert.AreEqual <NumberStyles>(IntegerFieldStyles, integerField.Styles);
                floatField = meta.FieldList[3] as FtFloatMetaField;
                Assert.AreEqual <string>(FloatFieldName, floatField.Name);
                AllDefaults_Field(floatField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactFloat, 3);
                Assert.AreEqual <string>(FloatFieldFormat, floatField.Format);
                Assert.AreEqual <NumberStyles>(FloatFieldStyles, floatField.Styles);
                decimalField = meta.FieldList[4] as FtDecimalMetaField;
                Assert.AreEqual <string>(DecimalFieldName, decimalField.Name);
                AllDefaults_Field(decimalField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactDecimal, 4);
                Assert.AreEqual <string>(DecimalFieldFormat, decimalField.Format);
                Assert.AreEqual <NumberStyles>(DecimalFieldStyles, decimalField.Styles);
                dateTimeField = meta.FieldList[5] as FtDateTimeMetaField;
                Assert.AreEqual <string>(DateTimeFieldName, dateTimeField.Name);
                AllDefaults_Field(dateTimeField, rootSequence, redirectTargetSequence, FtStandardSequenceRedirectType.ExactDateTime, 5);
                Assert.AreEqual <string>(DateTimeFieldFormat, dateTimeField.Format);
                Assert.AreEqual <DateTimeStyles>(DateTimeFieldStyles, dateTimeField.Styles);

                redirectStringField1 = meta.FieldList[6] as FtStringMetaField;
                Assert.AreEqual <string>(RedirectStringField1Name, redirectStringField1.Name);
                redirectBooleanField2 = meta.FieldList[7] as FtBooleanMetaField;
                Assert.AreEqual <string>(RedirectBooleanField2Name, redirectBooleanField2.Name);
                Assert.AreEqual <string>(BooleanFalseText, redirectBooleanField2.FalseText);
                Assert.AreEqual <string>(BooleanTrueText, redirectBooleanField2.TrueText);
                Assert.AreEqual <FtBooleanStyles>(BooleanStyles, redirectBooleanField2.Styles);
                redirectIntegerField3 = meta.FieldList[8] as FtIntegerMetaField;
                Assert.AreEqual <string>(RedirectIntegerField3Name, redirectIntegerField3.Name);
                Assert.AreEqual <string>(IntegerFieldFormat, redirectIntegerField3.Format);
                Assert.AreEqual <NumberStyles>(IntegerFieldStyles, redirectIntegerField3.Styles);
                redirectFloatField4 = meta.FieldList[9] as FtFloatMetaField;
                Assert.AreEqual <string>(RedirectFloatField4Name, redirectFloatField4.Name);
                Assert.AreEqual <string>(FloatFieldFormat, redirectFloatField4.Format);
                Assert.AreEqual <NumberStyles>(FloatFieldStyles, redirectFloatField4.Styles);
                redirectDecimalField5 = meta.FieldList[10] as FtDecimalMetaField;
                Assert.AreEqual <string>(RedirectDecimalField5Name, redirectDecimalField5.Name);
                Assert.AreEqual <string>(DecimalFieldFormat, redirectDecimalField5.Format);
                Assert.AreEqual <NumberStyles>(DecimalFieldStyles, redirectDecimalField5.Styles);
                redirectDateTimeField6 = meta.FieldList[11] as FtDateTimeMetaField;
                Assert.AreEqual <string>(RedirectDateTimeField6Name, redirectDateTimeField6.Name);
                Assert.AreEqual <string>(DateTimeFieldFormat, redirectDateTimeField6.Format);
                Assert.AreEqual <DateTimeStyles>(DateTimeFieldStyles, redirectDateTimeField6.Styles);

                Assert.AreEqual <FtMetaField>(redirectStringField1, redirectTargetSequence.ItemList[0].Field);
                Assert.AreEqual <int>(0, redirectTargetSequence.ItemList[0].RedirectList.Count);
                Assert.AreEqual <FtMetaField>(redirectBooleanField2, redirectTargetSequence.ItemList[1].Field);
                Assert.AreEqual <int>(1, redirectTargetSequence.ItemList[1].RedirectList.Count);
                Assert.AreEqual <int>(FtStandardSequenceRedirectType.Null, redirectTargetSequence.ItemList[1].RedirectList[0].Type);
                Assert.AreEqual <FtMetaField>(redirectIntegerField3, redirectTargetSequence.ItemList[2].Field);
                Assert.AreEqual <int>(0, redirectTargetSequence.ItemList[2].RedirectList.Count);
                Assert.AreEqual <FtMetaField>(redirectFloatField4, redirectTargetSequence.ItemList[3].Field);
                Assert.AreEqual <int>(1, redirectTargetSequence.ItemList[3].RedirectList.Count);
                Assert.AreEqual <int>(FtStandardSequenceRedirectType.Null, redirectTargetSequence.ItemList[3].RedirectList[0].Type);
                Assert.AreEqual <FtMetaField>(redirectDecimalField5, redirectTargetSequence.ItemList[4].Field);
                Assert.AreEqual <int>(0, redirectTargetSequence.ItemList[4].RedirectList.Count);
                Assert.AreEqual <FtMetaField>(redirectDateTimeField6, redirectTargetSequence.ItemList[5].Field);
                Assert.AreEqual <int>(0, redirectTargetSequence.ItemList[5].RedirectList.Count);
            }
        }