private RDFProperty GetNodeData(XmlNode node)
        {
            // Go up to parent node
            XmlNode     propertyNode = node.ParentNode;
            RDFProperty data         = new RDFProperty();

            // Set name
            data.Name = propertyNode.Attributes[DAMLConstants.RDF_ID].Value;
            // Set Domain
            data.Domain = propertyNode.SelectSingleNode(DAMLConstants.RDFS_DOMAIN, m_mgr).Attributes[DAMLConstants.RDF_RESOURCE].Value;
            // Set Range
            data.Range = propertyNode.SelectSingleNode(DAMLConstants.RDFS_RANGE, m_mgr).Attributes[DAMLConstants.RDF_RESOURCE].Value;
            // Set SubPropertyOf
            data.SubPropertyOf = propertyNode.SelectSingleNode(DAMLConstants.RDFS_SUBPROPERTYOF, m_mgr).Attributes[DAMLConstants.RDF_RESOURCE].Value;

            // Fill in sameValueAs data (if any)
            XmlNode sameValueAsNode = propertyNode.SelectSingleNode(DAMLConstants.DAML_SAMEVALUESAS, m_mgr);

            if (sameValueAsNode != null)
            {
                data.SameValueAs = sameValueAsNode.Attributes[DAMLConstants.RDF_RESOURCE].Value;
            }

            return(data);
        }
Example #2
0
 public void AddParameter(RDFProperty data)
 {
     m_arrParameters.Add(data);
 }
Example #3
0
 public void AddCoOutput(RDFProperty data)
 {
     m_arrCoOutputs.Add(data);
 }
Example #4
0
 public void AddCoCondition(RDFProperty data)
 {
     m_arrCoConditions.Add(data);
 }
Example #5
0
 public void AddConditionalOutput(RDFProperty data)
 {
     m_arrConditionalOutputs.Add(data);
 }
Example #6
0
 public void AddEffect(RDFProperty data)
 {
     m_arrEffects.Add(data);
 }
Example #7
0
 public void AddPrecondition(RDFProperty data)
 {
     m_arrPreconditions.Add(data);
 }
Example #8
0
 // AddXXXX
 public void AddInput(RDFProperty data)
 {
     m_arrInputs.Add(data);
 }
        public DAMLProcess GetProcessData(string strProcessName, enuProcessType processType)
        {
            DAMLProcess retVal = new DAMLProcess();

            try
            {
                XmlNode root       = m_doc.DocumentElement;
                string  strBaseUri = GetNamespaceBaseUri(DAMLConstants.PROCESS_NS);
                string  strUri     = "";
                strUri = strBaseUri;

                switch (processType)
                {
                case enuProcessType.AtomicProcess: strUri += DAMLConstants.DAML_ATOMIC_PROCESS;
                    break;

                case enuProcessType.CompositeProcess: strUri += DAMLConstants.DAML_COMPOSITE_PROCESS;
                    break;

                case enuProcessType.SimpleProcess: strUri += DAMLConstants.DAML_SIMPLE_PROCESS;
                    break;

                default:  throw new ArgumentException("Invalid processType value");
                }
                ;

                string strXPath = DAMLConstants.DAML_CLASS + "[@" + DAMLConstants.RDF_ID + "='" + strProcessName + "']" + "/" + DAMLConstants.RDFS_SUBCLASSOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strUri + "']";

                XmlNode processNode = root.SelectSingleNode(strXPath, m_mgr).ParentNode;

                // No such process exists so just exit - should throw exception since
                // returned DAMLProcess is useless
                if (processNode == null)
                {
                    return(retVal);
                }

                // Set process name
                retVal.Name = processNode.Attributes[DAMLConstants.RDF_ID].Value;
                // Set process type
                retVal.ProcessType = processType;

                // Get inputs from querying RDFProperty nodes in document
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.INPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                XmlNodeList lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddInput(data);
                }

                // Get additional inputs from the process node itself
                // they may be hidden under restictions tagged with
                // daml:sameValueAs
                strXPath = DAMLConstants.DAML_CLASS + "[@" + DAMLConstants.RDF_ID + "='" + retVal.Name + "']" + "/" + DAMLConstants.RDFS_SUBCLASSOF + "/" + DAMLConstants.DAML_RESTRICTION + "/" + DAMLConstants.DAML_ON_PROPERTY + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.INPUT + "']" + "/" + "following-sibling::" + DAMLConstants.DAML_SAMEVALUESAS;
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    string strSameValueAs = node.Attributes[DAMLConstants.RDF_RESOURCE].Value;
                    strSameValueAs = strSameValueAs.Trim(new char[] { '#' });

                    // Go get RDFProperty data
                    strXPath = DAMLConstants.RDF_PROPERTY + "[@" + DAMLConstants.RDF_ID + "='" + strSameValueAs + "']" + "/" + DAMLConstants.RDFS_DOMAIN;
                    XmlNode domainNode = root.SelectSingleNode(strXPath, m_mgr);

                    // Add to list of inputs
                    if (domainNode != null)
                    {
                        RDFProperty data = GetNodeData(domainNode);
                        retVal.AddInput(data);
                    }
                }

                // Get outputs
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.OUTPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddOutput(data);
                }

                // Get preconditions
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.PRECONDITION + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddPrecondition(data);
                }

                // Get effects
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.EFFECT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddEffect(data);
                }

                // Get conditional outputs
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.CONDITIONAL_OUTPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddConditionalOutput(data);
                }

                // Get co-conditions
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.CO_CONDITION + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddCoCondition(data);
                }

                // Get co-outputs
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.CO_OUTPUT + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddCoOutput(data);
                }

                // Get parameters
                strXPath = DAMLConstants.RDF_PROPERTY + "/" + DAMLConstants.RDFS_SUBPROPERTYOF + "[@" + DAMLConstants.RDF_RESOURCE + "='" + strBaseUri + DAMLConstants.PARAMETER + "']" + "/" + "following-sibling::" + DAMLConstants.RDFS_DOMAIN + "[@" + DAMLConstants.RDF_RESOURCE + "='#" + strProcessName + "']";
                lstNodes = root.SelectNodes(strXPath, m_mgr);

                foreach (XmlNode node in lstNodes)
                {
                    RDFProperty data = GetNodeData(node);
                    retVal.AddParameter(data);
                }

                // For each input, fill the process' InputRestrictionMap
                // search on process name
                if (retVal.HasInputs)
                {
                    foreach (RDFProperty Input in retVal.Inputs)
                    {
                        int nRestriction = GetInputRestrictions(retVal.Name, Input.Name);
                        if (nRestriction == 0)
                        {
                            nRestriction = DEFAULT_RESTRICTION;
                        }
                        retVal.AddInputRestriction(Input.Name, nRestriction);
                    }
                }

                // If we are dealing with a complex process we must go get
                // the substeps - need to get process:<type> data
                if (processType == enuProcessType.CompositeProcess)
                {
                    retVal.SubTaskType = GetProcessSubTaskType(retVal.Name);
                    retVal.AddSubProcess(GetSubProcesses(retVal.Name));
                }
            }
            catch (Exception e)
            {
                m_EvtLog.WriteEntry(e.Message, EventLogEntryType.Error);
            }
            return(retVal);
        }