public override Point GetFormalGateGraphNodePosition(XmlElement diagramElement,XmlElement formalGateElement,MessageEndKind messageEndType)
        {
            Point relevantPosition;
            string relevantPositionString="";
            string messageElementId;
            //string formalGateElementId;
            string relevantAnchorageElementId="";
            XmlElement relevantAnchorageElement;

            messageElementId=formalGateElement.GetAttribute(UmlModel.MESSAGE_ATTR_NAME);
            string messageQuery=ELEMENT_TYPE_MESSAGE_FOR_ID_QUERY+this.hrefPrefix+messageElementId+QUERY_END;
            XmlElement messageElement=(XmlElement)diagramElement.SelectSingleNode(messageQuery,this.namespaceManager);
            XmlElement messageGraphNode=this.GetGraphElementForElementElement(messageElement);
            string emfQuerys=messageGraphNode.GetAttribute(UmlModel.ANCHOR_ATTR_NAME);

            ArrayList convertedAnchorageQueries=converter.ConvertEmfQuery(emfQuerys);

            if(messageEndType==MessageEndKind.sourceEnd)
            {
                relevantAnchorageElementId=(string)convertedAnchorageQueries[0];
            }
            else if(messageEndType==MessageEndKind.destinationEnd)
            {
                relevantAnchorageElementId=(string)convertedAnchorageQueries[1];
            }

            relevantAnchorageElement=GetAnchorageElement(relevantAnchorageElementId,diagramElement);
            relevantPositionString=relevantAnchorageElement.GetAttribute(UmlModel.POSITION_ATTR_NAME);
            relevantPosition=this.GetPositionForPositionString(relevantPositionString);

            return relevantPosition;
        }
 public abstract Point GetFormalGateGraphNodePosition(XmlElement diagramElement, XmlElement formalGateElement,MessageEndKind eventKind);