コード例 #1
0
        internal protected virtual bool ResolvePropertiesTo(FtMetaSequence sequence, FtMetaFieldList fieldList, FtMetaSequenceList existingSequences, out string errorDescription)
        {
            errorDescription = "";
            bool result = false;

            foreach (FtMetaSequence.PropertyId id in Enum.GetValues(typeof(FtMetaSequence.PropertyId)))
            {
                switch (id)
                {
                case FtMetaSequence.PropertyId.Name:
                    result = ResolveName(sequence, existingSequences, out errorDescription);
                    break;

                case FtMetaSequence.PropertyId.Root:
                    result = ResolveRoot(sequence, out errorDescription);
                    break;

                case FtMetaSequence.PropertyId.FieldIndices:
                    result = ResolveFieldIndices(sequence, fieldList, out errorDescription);
                    break;

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

                if (!result)
                {
                    break;
                }
            }
            return(result);
        }
コード例 #2
0
        private bool ResolveFieldIndices(FtMetaSequence sequence, FtMetaFieldList fieldList, out string errorDescription)
        {
            errorDescription = "";
            bool   result = true;
            string attributeValue;

            if (!attributeDictionary.TryGetValue(FtMetaSequence.PropertyId.FieldIndices, out attributeValue))
            {
                fieldIndices = new int[0];
            }
            else
            {
                int[] propertyValue;
                if (FtCommaText.TryParse(attributeValue, out propertyValue, out errorDescription))
                {
                    fieldIndices = propertyValue;
                }
                else
                {
                    errorDescription = string.Format(Properties.Resources.SequenceReadElement_ResolveFieldIndices_Invalid, attributeValue);
                    result           = false;
                }
            }

            return(result);
        }
コード例 #3
0
        protected virtual bool ResolveProperties(FtMetaSequenceItem item, FtMetaFieldList fieldList, out string errorDescription)
        {
            errorDescription = "";
            bool result = true;

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

                case FtMetaSequenceItem.PropertyId.FieldIndex:
                    result = ResolveFieldIndex(item, fieldList, out errorDescription);
                    break;

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

                if (!result)
                {
                    break;
                }
            }
            return(result);
        }
コード例 #4
0
        // properties

        private bool ResolveFieldIndex(FtMetaSequenceItem item, FtMetaFieldList fieldList, out string errorDescription)
        {
            errorDescription = "";
            bool   result = true;
            string attributeValue;

            if (!attributeDictionary.TryGetValue(FtMetaSequenceItem.PropertyId.FieldIndex, out attributeValue))
            {
                errorDescription = string.Format(Properties.Resources.SequenceItemReadElement_ResolveFieldIndex_Missing);
                result           = false;
            }
            else
            {
                int fieldIndex;
                if (FtStandardText.TryParse(attributeValue, out fieldIndex))
                {
                    if (fieldIndex < 0 || fieldIndex >= fieldList.Count)
                    {
                        errorDescription = string.Format(Properties.Resources.SequenceItemReadElement_ResolveFieldIndex_OutOfRange, fieldIndex);
                    }
                    else
                    {
                        item.Field = fieldList[fieldIndex];
                    }
                }
                else
                {
                    errorDescription = string.Format(Properties.Resources.SequenceItemReadElement_ResolveFieldIndex_Invalid, attributeValue);
                    result           = false;
                }
            }

            return(result);
        }
コード例 #5
0
 internal protected virtual bool ResolveTo(FtMetaSequenceItem item, FtMetaFieldList fieldList, FtMetaSequenceList sequenceList, out string errorDescription)
 {
     if (!ResolveProperties(item, fieldList, out errorDescription))
     {
         return(false);
     }
     else
     {
         return(ResolveRedirects(item, sequenceList, out errorDescription));
     }
 }
コード例 #6
0
        internal void LoadMeta(FtMetaSequence metaSequence, FtMetaFieldList metaFieldList, FtFieldDefinitionList fieldDefinitionList)
        {
            name = metaSequence.Name;
            root = metaSequence.Root;

            for (int i = 0; i < metaSequence.ItemList.Count; i++)
            {
                FtSequenceItem Item = itemList.New();
                Item.LoadMeta(metaSequence.ItemList[i], metaFieldList, fieldDefinitionList);
            }
        }
コード例 #7
0
        internal protected virtual bool ResolveItemsTo(FtMetaSequence sequence, FtMetaFieldList fieldList, FtMetaSequenceList sequenceList, out string errorDescription)
        {
            ItemSorter.Rec[]          sorterRecArray = new ItemSorter.Rec[itemList.Count + fieldIndices.Length];
            SequenceItemReadElement[] sortedItemElements;

            for (int i = 0; i < itemList.Count; i++)
            {
                SequenceItemReadElement itemElement = itemList[i];

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

            int elementallyDefinedItemCount = itemList.Count;

            for (int i = 0; i < fieldIndices.Length; i++)
            {
                SequenceItemReadElement itemElement = new SequenceItemReadElement();
                // Add FieldIndex to element as if it were read from an attribute.
                int    fieldIndex     = fieldIndices[i];
                string attributeName  = SequenceItemPropertyIdFormatter.ToAttributeName(FtMetaSequenceItem.PropertyId.FieldIndex);
                string attributeValue = FtStandardText.Get(fieldIndex);
                if (!itemElement.TryAddOrIgnoreAttribute(attributeName, attributeValue, out errorDescription))
                {
                    throw FtInternalException.Create(InternalError.SequenceReadElement_ResolveItemsTo_TryAddOrIgnoreAttribute, errorDescription); // program error
                }
                else
                {
                    int implicitIndex = elementallyDefinedItemCount + i;
                    sorterRecArray[implicitIndex].Target   = itemElement;
                    sorterRecArray[implicitIndex].Implicit = implicitIndex;
                    sorterRecArray[implicitIndex].Explicit = -1;
                }
            }

            int duplicateExplicitIndex;

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

                for (int i = 0; i < sortedItemElements.Length; i++)
                {
                    SequenceItemReadElement itemElement = sortedItemElements[i];
                    FtMetaSequenceItem      item        = sequence.ItemList.New();
                    if (!itemElement.ResolveTo(item, fieldList, sequenceList, out errorDescription))
                    {
                        result = false;
                        break;
                    }
                }

                return(result);
            }
        }