Exemplo n.º 1
0
        private bool ResolveInvokationDelay(FtMetaSequenceRedirect redirect, out string errorDescription)
        {
            errorDescription = "";
            bool   result = true;
            string attributeValue;

            if (!attributeDictionary.TryGetValue(FtMetaSequenceRedirect.PropertyId.InvokationDelay, out attributeValue))
            {
                redirect.InvokationDelay = MetaSerializationDefaults.SequenceRedirect.InvokationDelay;
            }
            else
            {
                FtSequenceInvokationDelay propertyValue;
                if (SequenceInvokationDelayFormatter.TryParseAttributeValue(attributeValue, out propertyValue))
                {
                    redirect.InvokationDelay = propertyValue;
                }
                else
                {
                    errorDescription = string.Format(Properties.Resources.SequenceRedirectReadElement_ResolveInvokationDelay_Invalid, attributeValue);
                    result           = false;
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        // properties

        private bool ResolveSequenceName(FtMetaSequenceRedirect redirect, FtMetaSequenceList sequenceList, out string errorDescription)
        {
            bool   result = false;
            string attributeValue;

            if (!attributeDictionary.TryGetValue(FtMetaSequenceRedirect.PropertyId.SequenceName, out attributeValue))
            {
                errorDescription = string.Format(Properties.Resources.SequenceRedirectReadElement_ResolveSequenceName_Missing, FtStandardSequenceRedirectType.ToName(redirectType));
            }
            else
            {
                string sequenceName = attributeValue.Trim();
                int    sequenceIdx  = sequenceList.IndexOfName(sequenceName);
                if (sequenceIdx < 0)
                {
                    errorDescription = string.Format(Properties.Resources.SequenceRedirectReadElement_ResolveSequenceName_NotExist, sequenceName, FtStandardSequenceRedirectType.ToName(redirectType));
                }
                else
                {
                    redirect.Sequence = sequenceList[sequenceIdx];
                    errorDescription  = "";
                    result            = true;
                }
            }

            return(result);
        }
Exemplo n.º 3
0
        private void AllDefaults_Field(FtMetaField field, FtMetaSequence sequence, FtMetaSequence targetSequence, int redirectType, int itemIdx)
        {
            const FtSequenceInvokationDelay SequenceInvokationDelay = FtSequenceInvokationDelay.ftikAfterField;

            if (state == State.Initialise)
            {
                defaultMetaFieldProperties.LoadIntoMetaField(ref field, false);

                FtMetaSequenceItem sequenceItem = sequence.ItemList.New();
                sequenceItem.Field = field;
                FtMetaSequenceRedirect sequenceRedirect = sequenceItem.RedirectList.New(redirectType);
                sequenceRedirect.InvokationDelay = SequenceInvokationDelay;
                sequenceRedirect.Sequence        = targetSequence;
            }
            else
            {
                defaultMetaFieldProperties.AssertMetaFieldAreEqual(field, false);

                FtMetaSequenceItem sequenceItem = sequence.ItemList[itemIdx];
                Assert.AreEqual <FtMetaField>(field, sequenceItem.Field);
                FtMetaSequenceRedirect sequenceRedirect = sequenceItem.RedirectList[0];
                Assert.AreEqual <FtSequenceInvokationDelay>(SequenceInvokationDelay, sequenceRedirect.InvokationDelay);
                Assert.AreEqual <FtMetaSequence>(targetSequence, sequenceRedirect.Sequence);
            }
        }
Exemplo n.º 4
0
        protected virtual bool ResolveRedirects(FtMetaSequenceItem item, FtMetaSequenceList sequenceList, out string errorDescription)
        {
            RedirectSorter.Rec[]          sorterRecArray = new RedirectSorter.Rec[redirectList.Count];
            SequenceRedirectReadElement[] sortedElements;

            for (int i = 0; i < redirectList.Count; i++)
            {
                SequenceRedirectReadElement element = redirectList[i];

                sorterRecArray[i].Target   = element;
                sorterRecArray[i].Implicit = i;
                sorterRecArray[i].Explicit = element.ExplicitIndex;
            }

            int duplicateExplicitIndex;

            if (!RedirectSorter.TrySort(sorterRecArray, out sortedElements, out duplicateExplicitIndex))
            {
                errorDescription = string.Format(Properties.Resources.SequenceItemReadElement_ResolveRedirects_DuplicateExplicitIndex, duplicateExplicitIndex);
                return(false);
            }
            else
            {
                errorDescription = "";
                bool result = true;

                for (int i = 0; i < sortedElements.Length; i++)
                {
                    SequenceRedirectReadElement element = sortedElements[i];
                    int redirectType;
                    if (element.RedirectType == FtStandardSequenceRedirectType.Unknown)
                    {
                        redirectType = item.Field.DefaultSequenceRedirectType;
                    }
                    else
                    {
                        redirectType = element.RedirectType;
                    }
                    FtMetaSequenceRedirect redirect = item.RedirectList.New(redirectType);
                    if (!element.ResolveTo(redirect, sequenceList, out errorDescription))
                    {
                        result = false;
                        break;
                    }
                }

                return(result);
            }
        }
Exemplo n.º 5
0
        protected virtual bool ResolveProperties(FtMetaSequenceRedirect redirect, FtMetaSequenceList sequenceList, out string errorDescription)
        {
            errorDescription = "";
            bool result = true;

            redirectType = redirect.Type; // may have been set to field default

            foreach (FtMetaSequenceRedirect.PropertyId id in Enum.GetValues(typeof(FtMetaSequenceRedirect.PropertyId)))
            {
                switch (id)
                {
                case FtMetaSequenceRedirect.PropertyId.Index:
                case FtMetaSequenceRedirect.PropertyId.Type:
                    // already handled in TryAddOrIgnoreAttribute
                    break;

                case FtMetaSequenceRedirect.PropertyId.SequenceName:
                    result = ResolveSequenceName(redirect, sequenceList, out errorDescription);
                    break;

                case FtMetaSequenceRedirect.PropertyId.InvokationDelay:
                    result = ResolveInvokationDelay(redirect, out errorDescription);
                    break;

                case FtMetaSequenceRedirect.PropertyId.Value:
                    switch (redirectType)
                    {
                    case FtStandardSequenceRedirectType.Boolean:
                        result = ResolveBooleanValue(redirect as FtBooleanMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.CaseInsensitiveString:
                        result = ResolveCaseInsensitiveStringValue(redirect as FtCaseInsensitiveStringMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.Date:
                        result = ResolveDateValue(redirect as FtDateMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.ExactDateTime:
                        result = ResolveExactDateTimeValue(redirect as FtExactDateTimeMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.ExactDecimal:
                        result = ResolveExactDecimalValue(redirect as FtExactDecimalMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.ExactFloat:
                        result = ResolveExactFloatValue(redirect as FtExactFloatMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.ExactInteger:
                        result = ResolveExactIntegerValue(redirect as FtExactIntegerMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.ExactString:
                        result = ResolveExactStringValue(redirect as FtExactStringMetaSequenceRedirect, out errorDescription);
                        break;

                    case FtStandardSequenceRedirectType.Null:
                        // does not have Value
                        result = true;
                        break;

                    default:
                        throw FtInternalException.Create(InternalError.SequenceRedirectReadElement_ResolveProperties_ValueUnsupportedRedirectType,
                                                         id.ToString() + "," + redirectType.ToString());
                    }
                    break;

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

                if (!result)
                {
                    break;
                }
            }
            return(result);
        }
Exemplo n.º 6
0
 internal protected virtual bool ResolveTo(FtMetaSequenceRedirect redirect, FtMetaSequenceList sequenceList, out string errorDescription)
 {
     return(ResolveProperties(redirect, sequenceList, out errorDescription));
 }
Exemplo n.º 7
0
 internal protected override void LoadMeta(FtMetaSequenceRedirect metaSequenceRedirect, FtMetaSequenceList metaSequenceList, FtSequenceList sequenceList)
 {
     base.LoadMeta(metaSequenceRedirect, metaSequenceList, sequenceList);
 }