public override IMetaEntityExpressionTarget SelectTarget(string expressionPathNode)
        {
            IMetaEntityExpressionTarget head = this;

            if (expressionPathNode.isNullOrEmpty())
            {
                return(head);
            }

            MetaEntityClassProperty property = this.EntityClassDefinition.Properties.FirstOrDefault(x => x.name.Equals(expressionPathNode));

            if (property.type.HasFlag(MetaEntityClassPropertyType.value))
            {
                head = Setters.FirstOrDefault(x => x.name == expressionPathNode);
            }
            else if (property.type.HasFlag(MetaEntityClassPropertyType.entity))
            {
                head = Items.FirstOrDefault(x => x.name == expressionPathNode);

                //if (property.type.HasFlag(MetaEntityClassPropertyType.collection))
                //{
                //    return property;
                //}
                //else
                //{

                //}
            }
            ;

            return(head);
        }
Exemple #2
0
        public TypedObjectWorkshop(MetaEntityNamespaceCollection namespaces, TypedObjectWorkshopSettings workshopSettings, IDataMiningTypeProvider typeProvider)
        {
            Namespaces   = namespaces;
            TypeProvider = typeProvider;

            foreach (TypedObjectProviderDefinition provider in workshopSettings.providers)
            {
                TypedObjectProvider provider_instance = new TypedObjectProvider(provider);

                MetaEntityClass entityClass = Namespaces.FindClass(provider.EntityClassNamePath);
                provider_instance.Deploy(entityClass, typeProvider);

                ObjectProviders.Add(provider_instance);
            }

            foreach (TypedObjectProvider provider in ObjectProviders)
            {
                foreach (TypePropertyMapDefinitionItem itemDefinition in provider.map.items)
                {
                    PropertyInfo pi = provider.type.GetProperty(itemDefinition.typePropertyName);

                    TypePropertyMapItem mapItem = new TypePropertyMapItem()
                    {
                        metaPropertyName = itemDefinition.metaPropertyName,
                        typePropertyName = itemDefinition.typePropertyName,
                        propertyInfo     = pi
                    };

                    //var IListInterface = pi.PropertyType.GetInterface("IList");

                    //Type[] GenericArguments = pi.PropertyType.GetGenericArguments();

                    //if (GenericArguments.Any())
                    //{

                    //}

                    TypedObjectProvider subentity_provider = GetProviderForType(pi.PropertyType);

                    mapItem.TypeProvider = subentity_provider;

                    IMetaEntityExpressionTarget metaTarget = provider.entityClass.SelectTargetByPath(itemDefinition.metaPropertyName);
                    if (metaTarget is MetaEntityClassProperty metaProperty)
                    {
                        mapItem.metaProperty = metaProperty;
                    }

                    if (itemDefinition.converter != null)
                    {
                        IPropertyItemConverter mapConverter = itemDefinition.converter.GetConverter(pi);
                        mapItem.converter = mapConverter;
                    }

                    provider.items.Add(mapItem);
                }
            }
        }
        public static IMetaEntityExpressionTarget SelectTargetByPath(this IMetaEntityExpressionTarget entity, String expression)
        {
            List <String> parts = expression.SplitSmart(".");

            IMetaEntityExpressionTarget head = entity as IMetaEntityExpressionTarget;

            IMetaEntityExpressionTarget lastHead = null;

            foreach (String part in parts)
            {
                if (head != null)
                {
                    if (lastHead != head)
                    {
                        if (head.Parent == null)
                        {
                            if (lastHead != null)
                            {
                                head.Parent = lastHead;
                            }
                        }
                    }
                    lastHead = head;

                    head = head.SelectTarget(part);
                }

                //if (head is MetaEntity entityHead)
                //{

                //    MetaEntityClassProperty property = entityHead.EntityClassDefinition.Properties.FirstOrDefault(x => x.name == part);

                //    if (property.type.HasFlag(MetaEntityClassPropertyType.value))
                //    {
                //        head = entity.Setters.FirstOrDefault(x => x.name == part);
                //    } else if (property.type.HasFlag(MetaEntityClassPropertyType.entity))
                //    {
                //        head = entity.items.FirstOrDefault(x => x.name == part);
                //    };


                //} else if (head is MetaPropertySetter entityProperty) {
                //    return head;
                //}
            }

            return(head);
        }
        public void SetSelection(IMetaEntityExpressionTarget target, Boolean isFirst = true)
        {
            if (target == null)
            {
                return;
            }

            if (isFirst)
            {
                SelectedClass               = null;
                SelectedNamespace           = null;
                SelectedNamespaceCollection = null;
                SelectedProperty            = null;
            }

            if (target is MetaEntityClassProperty targetProperty)
            {
                SelectedProperty = targetProperty;
            }
            else if (target is MetaEntityClass targetClass)
            {
                SelectedClass = targetClass;
            }
            else if (target is MetaEntityNamespace targetNamespace)
            {
                SelectedNamespace = targetNamespace;
            }
            else if (target is MetaEntityNamespaceCollection targetNamespaceCollection)
            {
                SelectedNamespaceCollection = targetNamespaceCollection;
            }

            if (target.Parent != null && target.Parent != target)
            {
                SetSelection(target.Parent, false);
            }
        }
Exemple #5
0
        public override IMetaEntityExpressionTarget SelectTarget(string expressionPathNode)
        {
            if (MetaEntityTools.IsMultinodeExpressionPath(expressionPathNode))
            {
                return(Parent.SelectTargetByPath(expressionPathNode));
            }

            IMetaEntityExpressionTarget head = this;

            MetaEntityClassProperty property = this.Properties.FirstOrDefault(x => x.name == expressionPathNode);

            if (property == null)
            {
                property = new MetaEntityClassProperty()
                {
                    name = expressionPathNode,
                    type = MetaEntityClassPropertyType.none
                };

                AddProperty(property, false);
            }

            return(property);
        }
 public string GetNamepath(IMetaEntityExpressionTarget fromParent = null)
 {
     return(this.GetSelectExpression(fromParent));
 }
        public static String GetSelectExpression(this IMetaEntityExpressionTargetWithPath entity, IMetaEntityExpressionTarget fromParent = null)
        {
            String output = "";

            if (entity.Parent != null)
            {
                if (fromParent != entity.Parent)
                {
                    if (entity.Parent is IMetaEntityExpressionTargetWithPath parentWithPath)
                    {
                        if (entity.Parent != entity)
                        {
                            output = parentWithPath.GetSelectExpression(fromParent);
                        }
                    }
                }
                else
                {
                }
            }
            output = output.add(entity.name, ".");

            return(output);
        }
 public MetaEntityItemSelection(IMetaEntityExpressionTarget target)
 {
     SetSelection(target, true);
 }