private bool CollectExecutors(HandlerInvokeGraph invokeGraph, EntityNode entityNode, int argumentIndex) { HandlerArgument argument = this.HandlerArguments[argumentIndex]; if (argumentIndex == (this.HandlerArguments.Count - 1)) { HandlerExecutor item = this.CreateExecutor(); item.ArgumentForMethod[argumentIndex + 1] = entityNode.invokeArgument; this.handlerExecutors.Add(item); return(true); } ArgumentNode argumentNode = invokeGraph.ArgumentNodes[argumentIndex + 1]; List <EntityNode> source = (argument.Collection || argumentNode.linkBreak) ? argumentNode.entityNodes : entityNode.nextArgumentEntityNodes; int count = this.handlerExecutors.Count; bool flag = false; for (int i = 0; i < source.Count <EntityNode>(); i++) { if (this.CollectExecutors(invokeGraph, source[i], argumentIndex + 1)) { if (flag && !argumentNode.argument.Combine) { throw new IllegalCombineException(this.Handler, argumentNode); } flag = true; } } for (int j = count; j < this.handlerExecutors.Count; j++) { this.handlerExecutors[j].ArgumentForMethod[argumentIndex + 1] = entityNode.invokeArgument; } return(flag); }
public void ConvertToCollection() { this.entityNodes.Clear(); EntityNode item = Cache.entityNode.GetInstance().Init(this, null); item.invokeArgument = this.GetCollection(); this.entityNodes.Add(item); }
public bool TryGetEntityNode(Entity entity, out EntityNode entityNode) { NodeClassInstanceDescription classInstanceDescription = this.argument.ClassInstanceDescription; entityNode = null; if (!((EntityInternal)entity).CanCast(classInstanceDescription.NodeDescription)) { return(false); } entityNode = Cache.entityNode.GetInstance().Init(this, entity); return(true); }
protected void FillEntityNodesByJoin(JoinType join, EntityNode fromEntityNode, ArgumentNode toArgumentNode, Entity contextEntity) { toArgumentNode.filled = true; Collections.Enumerator <Entity> enumerator = Collections.GetEnumerator <Entity>(join.GetEntities(Flow.Current.NodeCollector, toArgumentNode.argument.NodeDescription, fromEntityNode.entity)); while (enumerator.MoveNext()) { EntityNode node; Entity current = enumerator.Current; if (((contextEntity == null) || contextEntity.Equals(current)) && toArgumentNode.TryGetEntityNode(current, out node)) { node.nextArgumentEntityNodes.Add(fromEntityNode); toArgumentNode.entityNodes.Add(node); } } }
public void ConvertToOptional() { if (this.IsEmpty()) { this.linkBreak = true; EntityNode item = Cache.entityNode.GetInstance().Init(this, null); item.ConvertToOptional(); this.entityNodes.Add(item); } else { for (int i = 0; i < this.entityNodes.Count; i++) { this.entityNodes[i].ConvertToOptional(); } } }
private void FillEntityNodesByJoin(JoinType join, ICollection <Entity> contextEntities, EntityNode fromEntityNode, ArgumentNode toArgumentNode) { Collections.Enumerator <Entity> enumerator = Collections.GetEnumerator <Entity>(join.GetEntities(Flow.Current.NodeCollector, toArgumentNode.argument.NodeDescription, fromEntityNode.entity)); while (enumerator.MoveNext()) { EntityNode node; Entity current = enumerator.Current; if (!this.FilterByContext(toArgumentNode.argument, current, contextEntities) && toArgumentNode.TryGetEntityNode(current, out node)) { toArgumentNode.entityNodes.Add(node); fromEntityNode.nextArgumentEntityNodes.Add(node); } } }