/// <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; }
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()); }
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); }
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 {
protected virtual IEnumerable <EntityAttribute> GetAttributesToIterate(EntityMetadata relatedEntity, EntityAssociation usedRelationship) { return(relatedEntity.Schema.Attributes); }
private static bool HasProjection(IEnumerable <ProjectionField> projectionFields, EntityAssociation association) { return(projectionFields.Any(a => a.Name.StartsWith(association.Qualifier))); }