Exemple #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:MB2D.EntityComponent.EntitySystem"/> class.
        /// Checks if the passed in types are valid components and if not, all components are deregistered
        /// leaving a system that knows about nothing and can't operate on any entities.
        /// </summary>
        /// <param name="components">Components this system is interested in</param>
        public EntitySystem(params Type[] components)
        {
            _entities        = new List <Entity>();
            _toDestroy       = new List <Entity>();
            _components      = new List <Type>();
            _idEntityMap     = new Dictionary <ulong, Entity>();
            _associationType = EntityAssociation.Strict;

            ID = 0;

            // Check if entities components are valid
            foreach (var c in components)
            {
                if (!(typeof(IComponent).IsAssignableFrom(c)))
                {
                    Console.WriteLine("MB2D Engine: '{0}' is not a valid component.", c);
                    _components.Clear();
                    break;
                }
                else
                {
                    _components.Add(c);
                }
            }
        }
    private void BtnSalvar_Click(object sender, EventArgs e)
    {
        Handle            handle          = new Handle(dropPaises.SelectedValue);
        EntityAssociation paisAssociation = new EntityAssociation(handle, paisDefinition);
        EntityBase        pessoa          = Entity.Create(pessoaDefinition);

        pessoa.Fields["NOME"] = txtNome.Text;
        pessoa.Fields["CPF"]  = txtCPF.Text;
        pessoa.Fields["PAIS"] = paisAssociation;
        pessoa.Save();
        PintaGrid();
    }
 public SlicedEntityAssociation(EntityAssociation innerAssociation, IEnumerable <EntityAttribute> slicedAttributes, string context = null)
     : base(innerAssociation.Qualifier, innerAssociation.To, innerAssociation.Attributes, innerAssociation.Collection)
 {
     if (context != null)
     {
         SlicedAttributes = slicedAttributes.Select(slicedAttribute => slicedAttribute.ClonePrependingContext(context)).ToList();
     }
     else
     {
         SlicedAttributes = slicedAttributes;
     }
     EntityName = innerAssociation.EntityName;
 }
Exemple #4
0
        public static string Build(EntityMetadata entityMetadata, EntityAssociation association)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("left join {0} on (", BaseQueryUtil.AliasEntity(association.To, association.Qualifier));

            var attributes = association.Attributes as IList <EntityAssociationAttribute>
                             ?? association.Attributes.ToList();

            for (var i = 0; i < attributes.Count; i++)
            {
                var suffix    = (i < attributes.Count - 1) ? " and " : ")";
                var attribute = attributes[i];

                if (null != attribute.Query)
                {
                    var query = attribute.GetQueryReplacingMarkers(association.Qualifier);
                    query = BaseQueryUtil.EvaluateServiceQuery(query);
                    sb.Append(query + suffix);
                }
                else if (null != attribute.From)
                {
                    var entityNameToUse = association.EntityName ?? entityMetadata.Name;
                    var from            = Parse(entityNameToUse, attribute.From);
                    var to = attribute.To != null?Parse(association.Qualifier, attribute.To) : ParseLiteral(attribute);

                    sb.AppendFormat("{0} = {1}" + suffix, from, to);
                }
                else
                {
                    var value = ParseLiteral(attribute);
                    sb.AppendFormat("{0}.{1} = {2}" + suffix, association.Qualifier, attribute.To, value);
                }
            }
            return(sb.ToString());
        }
Exemple #5
0
        private void FetchAsync(SlicedEntityMetadata entityMetadata, EntityAssociation collectionAssociation, IDictionary <string, ApplicationCompositionSchema> compositionSchemas, IEnumerable <AttributeHolder> entitiesList,
                                ContextHolder ctx, Dictionary <string, EntityRepository.SearchEntityResult> results, PaginatedSearchRequestDto paginatedSearch)
        {
            Quartz.Util.LogicalThreadContext.SetData("context", ctx);
            var lookupAttributes             = collectionAssociation.Attributes;
            var collectionEntityMetadata     = MetadataProvider.Entity(collectionAssociation.To);
            var targetCollectionAttribute    = EntityUtil.GetRelationshipName(collectionAssociation.Qualifier);
            var applicationCompositionSchema = compositionSchemas[collectionAssociation.Qualifier] as ApplicationCompositionCollectionSchema;

            if (applicationCompositionSchema == null)
            {
                throw ExceptionUtil.InvalidOperation("collection schema {0} not found", collectionAssociation.Qualifier);
            }


            var lookupattributes      = lookupAttributes as EntityAssociationAttribute[] ?? lookupAttributes.ToArray();
            var attributeHolders      = entitiesList as AttributeHolder[] ?? entitiesList.ToArray();
            var matchingResultWrapper = new CollectionMatchingResultWrapper();

            var searchRequestDto = BuildSearchRequestDto(applicationCompositionSchema, lookupattributes, matchingResultWrapper, attributeHolders, collectionEntityMetadata, paginatedSearch);

            searchRequestDto.QueryAlias = collectionAssociation.To;

            var firstAttributeHolder = attributeHolders.First();

            if (applicationCompositionSchema.PrefilterFunction != null)
            {
                var dataSet = DataSetProvider.GetInstance().LookupDataSet(entityMetadata.ApplicationName);
                //we will call the function passing the first entry, altough this method could have been invoked for a list of items (printing)
                //TODO: think about it
                var preFilterParam = new CompositionPreFilterFunctionParameters(entityMetadata.AppSchema, searchRequestDto, firstAttributeHolder, applicationCompositionSchema);
                searchRequestDto = PrefilterInvoker.ApplyPreFilterFunction(dataSet, preFilterParam, applicationCompositionSchema.PrefilterFunction);
            }



            EntityRepository.SearchEntityResult queryResult = null;

            if (paginatedSearch == null)
            {
                //if there´s no pagination needed we can just do one thread-query
                queryResult = EntityRepository.GetAsRawDictionary(collectionEntityMetadata, searchRequestDto);
            }
            else
            {
                var tasks = new Task[2];
                tasks[0] = Task.Factory.NewThread(() => {
                    queryResult = EntityRepository.GetAsRawDictionary(collectionEntityMetadata, searchRequestDto);
                });
                // one thread to count results for paginations
                tasks[1] = Task.Factory.NewThread(() => {
                    paginatedSearch.TotalCount = EntityRepository.Count(collectionEntityMetadata, searchRequestDto);
                });
                Task.WaitAll(tasks);
                // add paginationData to result

                // creating a new pagination data in order to have everything calculated correctly
                queryResult.PaginationData = new PaginatedSearchRequestDto(
                    paginatedSearch.TotalCount,
                    paginatedSearch.PageNumber,
                    paginatedSearch.PageSize,
                    paginatedSearch.SearchValues,
                    paginatedSearch.PaginationOptions
                    );
            }
            // one thread to fetch results

            results.Add(collectionAssociation.Qualifier, queryResult);

            if (attributeHolders.Length == 1)
            {
                //default scenario, we have just one entity here
                firstAttributeHolder.Attributes.Add(targetCollectionAttribute, queryResult.ResultList);
                return;
            }
            MatchResults(queryResult, matchingResultWrapper, targetCollectionAttribute);
        }
Exemple #6
0
        private static void HandleCollections <T>(Type entityType, EntityMetadata metadata, ApplicationMetadata applicationMetadata, EntityAssociation collectionAssociation,
                                                  IDictionary <string, object> associationAttributes, JProperty property) where T : Entity
        {
            var       collectionType = metadata.RelatedEntityMetadata(collectionAssociation.Qualifier);
            var       array          = (JArray)property.Value;
            IList <T> collection     = new List <T>();

            foreach (JObject jToken in array)
            {
                JToken idTkn;
                String idValue = null;
                if (jToken.TryGetValue(collectionType.Schema.IdAttribute.Name, out idTkn))
                {
                    var valueFromJson = GetValueFromJson(collectionType.Schema.IdAttribute.Type, idTkn);
                    idValue = valueFromJson == null ? null : valueFromJson.ToString();
                }
                var entity = BuildFromJson <T>(entityType, collectionType, null, jToken, idValue);
                collection.Add(entity);
            }
            associationAttributes.Add(EntityUtil.GetRelationshipName(property.Name), collection);
        }
        protected override IEnumerable <EntityAttribute> GetAttributesToIterate(EntityMetadata relatedEntity, EntityAssociation usedRelationship)
        {
            SlicedEntityMetadata innerMetadata;

            if (usedRelationship.Qualifier != null)
            {
                innerMetadata = InnerMetadatas.FirstOrDefault(i => i.ContextAlias == usedRelationship.Qualifier);
            }
            else
            {
                innerMetadata = InnerMetadatas.FirstOrDefault(i => i.Name == relatedEntity.Name);
            }
            if (innerMetadata != null)
            {
                return(innerMetadata.Schema.Attributes);
            }

            return(base.GetAttributesToIterate(relatedEntity, usedRelationship));
        }
 public static string ToSerialString(this EntityAssociation value) => value switch
 {
Exemple #9
0
 protected virtual IEnumerable <EntityAttribute> GetAttributesToIterate(EntityMetadata relatedEntity, EntityAssociation usedRelationship)
 {
     return(relatedEntity.Schema.Attributes);
 }
Exemple #10
0
 private static bool HasProjection(IEnumerable <ProjectionField> projectionFields, EntityAssociation association)
 {
     return(projectionFields.Any(a => a.Name.StartsWith(association.Qualifier)));
 }