protected EdgeKey GetBackwardEdgeKey(LevelKey myPath, int desiredBELevel, IGraphDB myGraphDB, SecurityToken mySecurityToken, Int64 myTransactionToken) { #region data IVertexType tempType; IAttributeDefinition tempAttr; #endregion tempType = myGraphDB.GetVertexType <IVertexType>( mySecurityToken, myTransactionToken, new RequestGetVertexType(myPath.Edges[desiredBELevel].VertexTypeID), (stats, vertexType) => vertexType); tempAttr = tempType.GetAttributeDefinition(myPath.Edges[desiredBELevel].AttributeID); if (tempAttr.Kind != AttributeType.IncomingEdge) { return(new EdgeKey(tempType.ID, tempAttr.ID)); } else { IIncomingEdgeDefinition incomingEdgeDefinition = tempAttr as IIncomingEdgeDefinition; return(new EdgeKey(incomingEdgeDefinition.RelatedEdgeDefinition.SourceVertexType.ID, incomingEdgeDefinition.RelatedEdgeDefinition.ID)); } }
public ServiceIncomingEdgeDefinition(IIncomingEdgeDefinition myIncomingEdgeDefinition) : base(myIncomingEdgeDefinition) { if (myIncomingEdgeDefinition != null) { this.RelatedEdgeDefinition = new ServiceOutgoingEdgeDefinition(myIncomingEdgeDefinition.RelatedEdgeDefinition); } }
public static bool HasValue(this IIncomingEdgeDefinition myProperty, IVertex myVertex) { if (myProperty == null) { throw new NullReferenceException(); } return(myVertex.HasIncomingVertices(myProperty.RelatedEdgeDefinition.SourceVertexType.ID, myProperty.ID)); }
/// <summary> /// Resolves an attribute /// </summary> private IEdgeView ResolveIncomingEdgeValue(IIncomingEdgeDefinition attrDefinition, IEnumerable<IVertex> myIncomingVertices, Int64 myDepth, EdgeList myEdgeList, IVertex mySourceDBObject, String reference, Boolean myUsingGraph, SecurityToken mySecurityToken, Int64 myTransactionToken) { #region Get levelKey and UsingGraph if (myEdgeList.Level == 0) { myEdgeList = new EdgeList(new EdgeKey(attrDefinition.RelatedType.ID, attrDefinition.ID)); } else { myEdgeList += new EdgeKey(attrDefinition.RelatedType.ID, attrDefinition.ID); } // at some deeper level we could get into graph independend results. From this time, we can use the GUID index rather than asking the graph all the time if (myUsingGraph) { myUsingGraph = _ExpressionGraph.IsGraphRelevant(new LevelKey(myEdgeList.Edges, _graphdb, mySecurityToken, myTransactionToken), mySourceDBObject); } #endregion #region SetReference attribute -> return new Edge IEnumerable<IVertexView> resultList = null; if (myUsingGraph) { var dbos = _ExpressionGraph.Select(new LevelKey(myEdgeList.Edges, _graphdb, mySecurityToken, myTransactionToken), mySourceDBObject, true); resultList = GetVertices(mySecurityToken, myTransactionToken, attrDefinition.RelatedEdgeDefinition.SourceVertexType, dbos, myDepth, myEdgeList, reference, myUsingGraph); } else { resultList = GetVertices(mySecurityToken, myTransactionToken, attrDefinition.RelatedEdgeDefinition.SourceVertexType, myIncomingVertices, myDepth, myEdgeList, reference, myUsingGraph); } return new HyperEdgeView(null, resultList.Select(aTargetVertex => new SingleEdgeView(null, aTargetVertex))); #endregion }
public List <FuncParameter> Execute(IVertexType myTypeOfDBObject, IVertex myDBObject, String myReference, GQLPluginManager myPluginManager, IGraphDB myGraphDB, SecurityToken mySecurityToken, Int64 myTransactionToken) { List <FuncParameter> evaluatedParams = new List <FuncParameter>(); int paramCounter = 0; FuncParameter validationOutput; //ParameterValue currentParameter; for (int i = 0; i < Parameters.Count; i++) { ParameterValue currentParameter = Function.GetParameter(paramCounter); if (Parameters[i] is BinaryExpressionDefinition) { ((BinaryExpressionDefinition)Parameters[i]).Validate(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken); #region handle BinExp var calculatedGraphResult = ((BinaryExpressionDefinition)Parameters[i]).Calculon(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, new CommonUsageGraph(myGraphDB, mySecurityToken, myTransactionToken)); var extractedDBOs = calculatedGraphResult.Select(new LevelKey(myTypeOfDBObject.ID, myGraphDB, mySecurityToken, myTransactionToken), null, true); #region validation validationOutput = ValidateAndAddParameter(currentParameter, extractedDBOs, null); evaluatedParams.Add(validationOutput); #endregion #endregion } else { if (Parameters[i] is IDChainDefinition) { #region handle IDNode var tempIDChain = (IDChainDefinition)Parameters[i]; tempIDChain.Validate(myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, false); if (currentParameter.Value is IAttributeDefinition) { #region validation validationOutput = ValidateAndAddParameter(currentParameter, tempIDChain.LastAttribute, null); evaluatedParams.Add(validationOutput); #endregion } else { if ((tempIDChain.LastAttribute == null) && (tempIDChain.SelectType != TypesOfSelect.None)) { #region IDNode with asterisk #region validation validationOutput = ValidateAndAddParameter(currentParameter, tempIDChain, null); evaluatedParams.Add(validationOutput); #endregion #endregion } else { switch (tempIDChain.LastAttribute.Kind) { case AttributeType.Property: #region Property IPropertyDefinition propertyDefinition = (IPropertyDefinition)tempIDChain.LastAttribute; IComparable value = null; if (myDBObject.HasProperty(propertyDefinition.ID)) { value = propertyDefinition.GetValue(myDBObject); } #region validation validationOutput = ValidateAndAddParameter(currentParameter, value, tempIDChain.LastAttribute); evaluatedParams.Add(validationOutput); #endregion #endregion break; case AttributeType.IncomingEdge: #region IncomingEdge IIncomingEdgeDefinition incomingEdgeAttribute = (IIncomingEdgeDefinition)tempIDChain.LastAttribute; IEnumerable <IVertex> dbos = new List <IVertex>(); if (myDBObject.HasIncomingVertices(incomingEdgeAttribute.RelatedEdgeDefinition.SourceVertexType.ID, incomingEdgeAttribute.RelatedEdgeDefinition.ID)) { dbos = myDBObject.GetIncomingVertices(incomingEdgeAttribute.RelatedEdgeDefinition.SourceVertexType.ID, incomingEdgeAttribute.RelatedEdgeDefinition.ID); } #region validation validationOutput = ValidateAndAddParameter(currentParameter, dbos, tempIDChain.LastAttribute); evaluatedParams.Add(validationOutput); #endregion #endregion break; case AttributeType.OutgoingEdge: #region outgoing Edge IOutgoingEdgeDefinition outgoingEdgeAttribute = (IOutgoingEdgeDefinition)tempIDChain.LastAttribute; IEnumerable <IVertex> outgoingDBOs = new List <IVertex>(); if (myDBObject.HasOutgoingEdge(outgoingEdgeAttribute.ID)) { outgoingDBOs = myDBObject.GetOutgoingEdge(outgoingEdgeAttribute.ID).GetTargetVertices(); } #region validation validationOutput = ValidateAndAddParameter(currentParameter, outgoingDBOs, tempIDChain.LastAttribute); evaluatedParams.Add(validationOutput); #endregion #endregion break; default: break; } } } #endregion } else { #region any other #region validation validationOutput = ValidateAndAddParameter(currentParameter, Parameters[i], null); evaluatedParams.Add(validationOutput); #endregion #endregion } } #region increase parameter counter if (!currentParameter.VariableNumOfParams) { paramCounter++; } #endregion } return(evaluatedParams); }