Ejemplo n.º 1
0
        /// <summary>
        ///     Creates a list of Association fields for all the properties that use NakedObjects.
        /// </summary>
        private IEnumerable <IAssociationSpecImmutable> CreateRefPropertySpecs(IEnumerable <PropertyInfo> foundProperties, IObjectSpecImmutable spec)
        {
            var specs = new List <IAssociationSpecImmutable>();

            foreach (PropertyInfo property in foundProperties)
            {
                Log.DebugFormat("Identified 1-1 association method {0}", property);
                Log.DebugFormat("One-to-One association {0} -> {1}", property.Name, property);

                // create a reference property spec
                var  identifier   = new IdentifierImpl(metamodel, FullName, property.Name);
                Type propertyType = property.PropertyType;
                IObjectSpecBuilder propertySpec = reflector.LoadSpecification(propertyType);
                var referenceProperty           = new OneToOneAssociationSpecImmutable(identifier, spec, propertySpec);

                // Process facets for the property
                FacetFactorySet.Process(reflector, property, new IntrospectorMethodRemover(methods), referenceProperty, FeatureType.Property);
                specs.Add(referenceProperty);
            }

            return(specs);
        }
        private static void Process(ISpecification holder)
        {
            var facets = new List <IFacet>();

            if (holder is MemberSpecImmutable)
            {
                facets.Add(new NamedFacetNone(holder));
                facets.Add(new DescribedAsFacetNone(holder));
            }

            if (holder is AssociationSpecImmutable)
            {
                facets.Add(new ImmutableFacetNever(holder));
                facets.Add(new PropertyDefaultFacetNone(holder));
                facets.Add(new PropertyValidateFacetNone(holder));
            }

            var immutable = holder as OneToOneAssociationSpecImmutable;

            if (immutable != null)
            {
                OneToOneAssociationSpecImmutable association = immutable;
                facets.Add(new MaxLengthFacetZero(holder));
                DefaultTypicalLength(facets, association.ReturnSpec, immutable);
                facets.Add(new MultiLineFacetNone(holder));
            }

            if (holder is ActionSpecImmutable)
            {
                facets.Add(new ExecutedFacetDefault(holder));
                facets.Add(new ActionDefaultsFacetNone(holder));
                facets.Add(new ActionChoicesFacetNone(holder));
                facets.Add(new PageSizeFacetDefault(holder));
            }

            FacetUtils.AddFacets(facets);
        }