Example #1
0
        private ISchemaRequiredField GetCollectionField(PropertyInfo child, KeyValuePair <int, AgreementSchemaType> parent)
        {
            var collectionStrategy = new CollectionStrategy <ISchemaRequiredField>(
                dictionaryAction: collectionType =>
            {
                var keyValueTypes = CollectionElementTypeProvider.Get(collectionType);
                var keyType       = keyValueTypes[0];
                var keySchema     = dictionaryBase.Get(keyType);
                var valueType     = keyValueTypes[1];
                var valueSchema   = dictionaryBase.Get(valueType);

                return(new DictionaryRequiredField(name: child.Name,
                                                   level: parent.Key,
                                                   type: string.Format(TypesNamesConsts.DictionaryOf,
                                                                       dictionaryRootNameBase.Get(keyType),
                                                                       dictionaryRootNameBase.Get(valueType)),
                                                   keyFields: keySchema,
                                                   valueFields: valueSchema));
            },
                simpleNonGenericAction: collectionType =>
            {
                var elementType = CollectionElementTypeProvider.Get(collectionType)[0];
                return(new ComplexCollectionRequiredField(
                           name: child.Name,
                           level: parent.Key,
                           type: TypesNamesConsts.CollectionOf + elementType.Name,
                           requiredFields: GetRequiredFields(elementType)));
            },
                complexNonGenericAction: collectionType =>
            {
                var elementType = CollectionElementTypeProvider.Get(collectionType)[0];
                return(new SimpleCollectionRequiredField(
                           name: child.Name,
                           level: parent.Key,
                           type: TypesNamesConsts.CollectionOf + elementType.FullName));
            });

            return(collectionStrategy.Get(child.PropertyType));
        }
Example #2
0
        private ISchemaRequiredField GetField(PropertyInfo child, KeyValuePair <int, AgreementSchemaType> parent)
        {
            var fieldStrategy = new TypeStrategy <ISchemaRequiredField>(
                simpleTypeAction: type => new SimpleRequiredField(name: child.Name,
                                                                  level: parent.Key,
                                                                  type: child.PropertyType.ToString()),
                collectionTypeAction: type => GetCollectionField(child, parent),
                complexTypeAction: type =>
            {
                var nextLevel = parent.Key + 1;
                complexTypeStack.Push(new KeyValuePair <int, AgreementSchemaType>(nextLevel, new AgreementSchemaType(child.PropertyType.Name, child.PropertyType)));

                return(new ClassRequiredField(name: child.Name,
                                              level: parent.Key,
                                              type: parent.Value.Name == TypesNamesConsts.InitialType ?
                                              child.PropertyType.Name :
                                              parent.Value.Name));
            });

            return(fieldStrategy.Get(child.PropertyType));
        }