Esempio n. 1
0
        public AddmlFieldDefinition(string name,
                                    int?startPosition,
                                    int?fixedLength,
                                    DataType type,
                                    bool isUnique,
                                    bool isNullable,
                                    int?minLength,
                                    int?maxLength,
                                    FieldIndex foreignKeyIndex,
                                    AddmlRecordDefinition addmlRecordDefinition,
                                    List <string> processes,
                                    List <AddmlCode> codes)
        {
            Name                  = name;
            StartPosition         = startPosition;
            FixedLength           = fixedLength;
            Type                  = type;
            IsUnique              = isUnique;
            IsNullable            = isNullable;
            MinLength             = minLength;
            MaxLength             = maxLength;
            ForeignKeyIndex       = foreignKeyIndex;
            AddmlRecordDefinition = addmlRecordDefinition;
            Processes             = processes;
            Codes                 = codes;

            _index = new FieldIndex(AddmlRecordDefinition.AddmlFlatFileDefinition.Name, AddmlRecordDefinition.Name, Name);
        }
Esempio n. 2
0
        private void AddAddmlFieldDefinitions(AddmlFlatFileDefinition addmlFlatFileDefinition,
                                              flatFileDefinition flatFileDefinition)
        {
            List <recordDefinition> recordDefinitions = GetRecordDefinitions(flatFileDefinition);

            foreach (recordDefinition recordDefinition in recordDefinitions)
            {
                string        recordDefinitionName       = recordDefinition.name;
                int?          recordLength               = GetRecordLength(recordDefinition);
                string        recordDefinitionFieldValue = recordDefinition.recordDefinitionFieldValue;
                List <string> recordProcesses            = GetRecordProcessNames(addmlFlatFileDefinition.Name, recordDefinition.name);

                List <AddmlForeignKey> foreignKeys = GetForeignKeysForRecord(flatFileDefinition, recordDefinition);

                AddmlRecordDefinition addmlRecordDefinition =
                    addmlFlatFileDefinition.AddAddmlRecordDefinition(recordDefinitionName, recordLength, recordDefinitionFieldValue, foreignKeys, recordProcesses);

                List <fieldDefinition> fieldDefinitions = GetFieldDefinitions(recordDefinition);
                foreach (fieldDefinition fieldDefinition in fieldDefinitions)
                {
                    string        name               = fieldDefinition.name;
                    int?          startPosition      = GetStartPosition(fieldDefinition);
                    int?          endPosition        = GetEndPosition(fieldDefinition); // Henter slutt-posisjon med ny funksjon
                    DataType      dataType           = GetFieldType(fieldDefinition.typeReference);
                    bool          isPartOfPrimaryKey = IsPartOfPrimaryKey(recordDefinition, fieldDefinition);
                    bool          isUnique           = IsUnique(fieldDefinition);
                    bool          isNullable         = IsNullable(fieldDefinition);
                    int?          minLength          = GetMinLength(fieldDefinition);
                    int?          maxLength          = GetMaxLength(fieldDefinition);
                    int?          fixedLength        = GetFixedLength(fieldDefinition) ?? endPosition - startPosition + 1;
                    List <string> processes          = GetFieldProcessNames(flatFileDefinition.name, recordDefinition.name,
                                                                            fieldDefinition.name);
                    List <AddmlCode> addmlCodes = GetCodes(fieldDefinition);

                    AddmlFieldDefinition addAddmlFieldDefinition = addmlRecordDefinition.AddAddmlFieldDefinition(
                        name, startPosition, fixedLength, dataType, isUnique, isNullable, minLength,
                        maxLength, processes, addmlCodes, isPartOfPrimaryKey);

                    FieldIndex fieldIndex = new FieldIndex(flatFileDefinition, recordDefinition, fieldDefinition);
                    if (_allFieldDefinitions.ContainsKey(fieldIndex))
                    {
                        throw new AddmlDefinitionParseException("ADDML file already contains a field definition with same index: " + fieldIndex);
                    }
                    _allFieldDefinitions.Add(fieldIndex, addAddmlFieldDefinition);
                }
            }
        }
Esempio n. 3
0
        private FieldIndex GetForeignKeyIndex(recordDefinition recordDefinition,
                                              fieldDefinition fieldDefinition)
        {
            key[] keys = recordDefinition.keys;
            if (keys != null)
            {
                foreach (key key in keys)
                {
                    fieldDefinitionReference[] keyFieldDefinitionReferences = key.fieldDefinitionReferences;
                    foreach (fieldDefinitionReference fieldDefinitionReference in keyFieldDefinitionReferences)
                    {
                        if (fieldDefinitionReference.name.Equals(fieldDefinition.name))
                        {
                            object o = key.Item;
                            if (o is foreignKey)
                            {
                                foreignKey        f       = (foreignKey)o;
                                List <FieldIndex> indexes = GetForeignKeyIndexes(f);

                                // TODO: Is it possible to have reference to more than one AddmlFieldDefinition?
                                if (indexes.Count != 1)
                                {
                                    throw new AddmlDefinitionParseException(
                                              "foreignKey must reference exactly one fieldDefinitionReference. " + f);
                                }

                                FieldIndex index = indexes[0];

                                // Må puttes på til slutt!
                                return(index);

                                /*
                                 * if (!_allFieldDefinitions.ContainsKey(index))
                                 * {
                                 *  return null;
                                 * }
                                 *
                                 * return _allFieldDefinitions[index];
                                 */
                            }
                        }
                    }
                }
            }

            return(null);
        }
Esempio n. 4
0
        public AddmlFieldDefinition AddAddmlFieldDefinition(string name,
                                                            int?startPosition,
                                                            int?fixedLength,
                                                            DataType dataType,
                                                            bool isUnique,
                                                            bool isNullable,
                                                            int?minLength,
                                                            int?maxLength,
                                                            FieldIndex foreignKeyIndex,
                                                            List <string> processes,
                                                            List <AddmlCode> codes,
                                                            bool isPartOfPrimaryKey)
        {
            AddmlFieldDefinition addmlFieldDefinition = new AddmlFieldDefinition(
                name,
                startPosition,
                fixedLength,
                dataType,
                isUnique,
                isNullable,
                minLength,
                maxLength,
                foreignKeyIndex,
                this,
                processes,
                codes);

            if (isPartOfPrimaryKey)
            {
                if (PrimaryKey == null)
                {
                    PrimaryKey = new List <AddmlFieldDefinition>();
                }
                PrimaryKey.Add(addmlFieldDefinition);
            }

            AddmlFieldDefinitions.Add(addmlFieldDefinition);

            return(addmlFieldDefinition);
        }
Esempio n. 5
0
        private void SetForeginKeyReferences(List <AddmlFlatFileDefinition> addmlFlatFileDefinitions)
        {
            foreach (AddmlFlatFileDefinition fileDefinitions in addmlFlatFileDefinitions)
            {
                foreach (AddmlRecordDefinition recordDefinition in fileDefinitions.AddmlRecordDefinitions)
                {
                    foreach (AddmlFieldDefinition fieldDefinition in recordDefinition.AddmlFieldDefinitions)
                    {
                        FieldIndex index = fieldDefinition.ForeignKeyIndex;

                        if (index != null)
                        {
                            if (!_allFieldDefinitions.ContainsKey(index))
                            {
                                throw new AddmlDefinitionParseException("Could not find foreign reference " + index);
                            }

                            fieldDefinition.ForeignKey = _allFieldDefinitions[index];
                        }
                    }
                }
            }
        }
Esempio n. 6
0
 protected bool Equals(FieldIndex other)
 {
     return(string.Equals(_flatFileDefinitionName, other._flatFileDefinitionName) &&
            string.Equals(_recordDefinitionName, other._recordDefinitionName) &&
            string.Equals(_fieldDefinitionName, other._fieldDefinitionName));
 }
Esempio n. 7
0
 public AddmlForeignKeyValue(FieldIndex index, string value)
 {
     Index = index;
     Value = value;
 }