[REQIF] Walking through the reqif file seems to work with the parser
authorandre ebersold <andre.ebersold@siemens.com>
Wed, 19 Jun 2024 13:50:59 +0000 (15:50 +0200)
committerandre ebersold <andre.ebersold@siemens.com>
Wed, 19 Jun 2024 13:50:59 +0000 (15:50 +0200)
src/xml/reqif/parsers.h.inc
src/xml/reqif/reqif_elements_parser.cpp
src/xml/reqif/reqif_elements_registration.cpp

index 2ed22513c8ce8cf24c132d66679f497851d135c1..349c3cc5beece88c872c06be59fe95a097083b6d 100644 (file)
@@ -9,8 +9,8 @@
 #endif
 
 ROOT_PARSER(REQ-IF,ReqifParser)
-COMPLEX_PARSER(THE-HEADER,ReqifHeaderParser)
-//SIMPLE_PARSER(REQ-IF-HEADER,DescriptionParser)
+COMPLEX_PARSER(THE-HEADER,TheHeaderParser)
+COMPLEX_PARSER(REQ-IF-HEADER,ReqifHeaderParser)
 //SIMPLE_PARSER(CREATION-TIME,DescriptionParser)
 //SIMPLE_PARSER(REQ-IF-TOOL-ID,DescriptionParser)
 //SIMPLE_PARSER(REQ-IF-VERSION,DescriptionParser)
@@ -37,6 +37,8 @@ COMPLEX_PARSER(ATTRIBUTES-DEFINITION-STRING,AttributeDefinitionParser)
 //COMPLEX_PARSER(ATTRIBUTES-DEFINITION-REAL,AttributeDefinitionParser)
 //COMPLEX_PARSER(ATTRIBUTES-DEFINITION-DATE,AttribtuteDefinitionParser)
 //COMPLEX_PARSER(ATTRIBUTES-DEFINITION-XHTML,AttribtuteDefinitionParser)
+COMPLEX_PARSER(ATTRIBUTES-DEFINITION-REF,AttributeDefinitionRefParser)
+
 COMPLEX_PARSER(TYPE,AttributeTypeParser)
 SIMPLE_PARSER(DATATYPE-DEFINITION-STRING-REF,DatatypeRefParser)
 //SIMPLE_PARSER(DATATYPE-DEFINITION-XHTML-REF,DatatypeRefParser)
@@ -84,8 +86,8 @@ COMPLEX_PARSER(SPECIFICATIONS,SpecificationsParser)
 COMPLEX_PARSER(SPECIFICATION,SpecificationParser)
 
 COMPLEX_PARSER(CHILDREN,ChildrenParser)
-//COMPLEX_PARSER(SPEC-HIERACHY,ChildrenParser)
-//COMPLEX_PARSER(OBJECT,ChildrenParser)
+COMPLEX_PARSER(SPEC-HIERACHY,SpecHierarchyParser)
+COMPLEX_PARSER(OBJECT,ObjectParser)
 //SIMPLE_PARSER(SPEC-OBJECT-REF,DatatypeRefParser)
 
 
index 5b555c4f046c05b4624ceaf7c2ab06a977e7e834..38c6de25d4a1c56b9327df85d11b621c14f136b6 100644 (file)
@@ -578,10 +578,10 @@ ROOT_PARSER(ReqifParser,
 {
   if (name == "THE-HEADER" &&  ! ns.empty())
   {
-    s.m_parser = SHARED_PTR<ReqifHeaderParser>(new ReqifHeaderParser(m_Project
+    s.m_parser = SHARED_PTR<TheHeaderParser>(new TheHeaderParser(m_Project
                        , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
-  } else if (name == "TOOL-EXTENSION" && ! ns.empty())
+  } else if (name == "TOOL-EXTENSIONS" && ! ns.empty())
   {
     s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
                        , NULL)
@@ -631,40 +631,127 @@ return l_ok;
 })
 
 // Target Parser Implementation
-COMPLEX_PARSER(ReqifHeaderParser, 
+COMPLEX_PARSER(TheHeaderParser, 
   { 
     if (name == "REQ-IF-HEADER" &&  ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<ReqifHeaderParser>(new ReqifHeaderParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TARGET("ReqifHEaderParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "REQ-IF-HEADER" &&  ! ns.empty())
+    {
+      return true;
+    }
+    return false;
+  }
+  ,
+  { 
+    ANTCC_PARSER_DEBUG_TARGET("ReqifHeaderParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    std::cout<<"REQ-IF-HEADER Attributes : "<<name<<" "<<val<<std::endl;
+    return l_ok;
+  })
+
+
+// Target Parser Implementation
+COMPLEX_PARSER(ReqifHeaderParser, 
+  { 
+    if (name == "CREATION-TIME" &&  ! ns.empty())
     {
       s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
-    } else if (name == "exec" && ns.empty())
+      return true;
+    } 
+    else if (name == "REQ-IF-TOOL-ID" && !ns.empty())
     {
       s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
+      return true;
     }
-    else
+    else if (name == "REQ-IF-VERSION" && !ns.empty())
     {
       s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
+      return true;
     }
-    return true;
+    else if (name == "SOURCE-TOOL-ID" && !ns.empty())
+    {
+      s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    else if (name == "TITLE" && !ns.empty())
+    {
+      s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    else
+    {
+        ANTCC_PARSER_ERROR("ReqifHeaderParser::startElement unsupported Element %s",name.c_str());
+    }
+    return false;
 
   }
   ,
   {
+    std::string result;
     ANTCC_PARSER_DEBUG_TARGET("ReqifHEaderParser end  %s size=%u"
                     ,name.c_str()
                     ,m_context.size());
-    return true;
+    if (name == "CREATION-TIME" &&  ! ns.empty()) {
+      s.m_parser->post(result);
+      std::cout<<"CREATION TIME : "<<result<<std::endl;
+      return true;
+    }
+    else if (name == "REQ-IF-TOOL-ID" && !ns.empty())
+    {
+      s.m_parser->post(result);
+      std::cout<<"TOOL ID : "<<result<<std::endl;
+      return true;
+    }
+    else if (name == "REQ-IF-VERSION" && !ns.empty())
+    {
+      s.m_parser->post(result);
+      std::cout<<"REQ-IF-VERSION : "<<result<<std::endl;
+      return true;
+    }
+    else if (name == "SOURCE-TOOL-ID" && !ns.empty())
+    {
+      s.m_parser->post(result);
+      std::cout<<"SOURCE-TOOL : "<<result<<std::endl;
+      return true;
+    }
+    else if (name == "TITLE" && !ns.empty())
+    {
+      s.m_parser->post(result);
+      std::cout<<"TITLE : "<<result<<std::endl;
+      return true;
+    }
+    return false;
   }
   ,
   { 
     ANTCC_PARSER_DEBUG_TARGET("ReqifHeaderParser Attribute:  %s-> %s"
                     ,name.c_str()
                     ,val.c_str());
+    std::cout<<"REQ-IF-HEADER Attributes : "<<name<<" "<<val<<std::endl;
     return l_ok;
   })
 
@@ -739,9 +826,15 @@ COMPLEX_PARSER(ReqifContentParser,
       return true;
     } else if (name == "SPEC-RELATIONS" && ! ns.empty())
     {
+      s.m_parser = SHARED_PTR<SpecRelationsParser>(new SpecRelationsParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
       return true;
     } else if (name == "SPECIFICATIONS" && ! ns.empty())
     {
+      s.m_parser = SHARED_PTR<SpecificationsParser>(new SpecificationsParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
       return true;
     } else if (name == "SPEC-RELATION-GROUPS" && ! ns.empty())
     {
@@ -857,10 +950,22 @@ COMPLEX_PARSER(TypeParser,
 // Spec Object Type Parser Implementation
 COMPLEX_PARSER(SpecObjectTypeParser,
   { 
-    s.m_parser = SHARED_PTR<SpecAttributesParser>(new SpecAttributesParser(m_Project
+    // Not sure that I need sub element for the Type parser
+    if (name == "SPEC-ATTRIBUTES" &&  ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<SpecAttributesParser>(new SpecAttributesParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
-    return true;
+      return true;
+    } else if (name == "ALTERNATIVE-ID" &&  ! ns.empty())
+    {
+      
+      s.m_parser = SHARED_PTR<TypeParser>(new TypeParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } 
+    return false;
 
   }
   ,
@@ -886,6 +991,7 @@ COMPLEX_PARSER(SpecObjectsParser,
     // Not sure that I need sub element for the Type parser
     if (name == "SPEC-OBJECT" &&  ! ns.empty())
     {
+      std::cout<<"SpecObjects Start "<<name<<"  "<<std::endl;
       s.m_parser = SHARED_PTR<SpecObjectParser>(new SpecObjectParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
@@ -901,7 +1007,11 @@ COMPLEX_PARSER(SpecObjectsParser,
     ANTCC_PARSER_DEBUG_TASK("SpecObjectsParser end  %s size=%u"
                     ,name.c_str()
                     ,m_context.size());
-    return true;
+    if (name == "SPEC-OBJECT" &&  ! ns.empty())
+    {
+      return true;
+    }
+    return false;
   }
   ,
   {
@@ -930,7 +1040,7 @@ COMPLEX_PARSER(SpecObjectParser,
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
       return true;
-    } else if (name == "TYPE" &&  ! ns.empty())
+    } else if (name =="TYPE" &&  ! ns.empty())
     {
       s.m_parser = SHARED_PTR<DatatypeRefParser>(new DatatypeRefParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
@@ -947,13 +1057,36 @@ COMPLEX_PARSER(SpecObjectParser,
     ANTCC_PARSER_DEBUG_TASK("SpecObjectParser end  %s size=%u"
                     ,name.c_str()
                     ,m_context.size());
-    return true;
+    if (name == "ALTERNATIVE-ID" &&  ! ns.empty())
+    {
+      return true;
+    } else if (name == "VALUES" &&  ! ns.empty())
+    {
+      return true;
+    } else if (name =="TYPE" &&  ! ns.empty())
+    {
+      return true;
+    }
+    return false;
   }
   ,
   {
     ANTCC_PARSER_DEBUG_TASK("SpecObjectsParser Attribute:  %s-> %s"
                     ,name.c_str()
                     ,val.c_str());
+    if (name == "IDENTIFIER")
+    {
+        std::cout<<"SpecObject "<<name<<" = "<<val<<std::endl;
+        l_ok = true;
+    } else if (name == "IS-EDITABLE") {
+        l_ok = true;
+    } else if (name == "LAST-CHANGE") {
+        std::cout<<"SpecObject "<<name<<" = "<<val<<std::endl;
+        l_ok = true;
+    } else if (name == "LONG-NAME") {
+           std::cout<<"Attribute-Defintition "<<name<<" = "<<val<<std::endl;
+       l_ok = true;
+    }
     return l_ok;
   })
 
@@ -1001,7 +1134,7 @@ COMPLEX_PARSER(AttributeValueParser,
     if ( name == "DEFINITION" 
                    &&  ! ns.empty())
     {
-      s.m_parser = SHARED_PTR<DatatypeRefParser>(new DatatypeRefParser(m_Project
+      s.m_parser = SHARED_PTR<AttributeDefinitionRefParser>(new AttributeDefinitionRefParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
       return true;
@@ -1020,10 +1153,23 @@ COMPLEX_PARSER(AttributeValueParser,
   }
   ,
   {
+    std::string result;
     ANTCC_PARSER_DEBUG_TASK("AttributeValueParser end  %s size=%u"
                     ,name.c_str()
                     ,m_context.size());
-    return true;
+    if ( name == "DEFINITION" 
+                   &&  ! ns.empty())
+    {
+       ::reqif::Element *el = s.m_parser->post();
+        return true;
+    } else if ( name == "THE-VALUE" 
+                   &&  ! ns.empty())
+    {
+        s.m_parser->post(result);
+        std::cout<<"AttributeValue tag THE-VALUE := "<<result<<std::endl;
+        return true;
+    }
+    return false;
   }
   ,
   {
@@ -1032,6 +1178,7 @@ COMPLEX_PARSER(AttributeValueParser,
                     ,name.c_str()
                     ,val.c_str());
     if (name == "THE-VALUE") {
+        std::cout<<"AttributeValue attr "<<name<<" :="<<val<<std::endl;
         l_ok = true;
     }
     return l_ok;
@@ -1042,11 +1189,22 @@ COMPLEX_PARSER(AttributeValueParser,
 // Spec Object Type Parser Implementation
 COMPLEX_PARSER(SpecAttributesParser,
   { 
-    s.m_parser = SHARED_PTR<AttributeDefinitionParser>(new AttributeDefinitionParser(m_Project
+    if ( ( name == "ATTRIBUTE-DEFINITION-STRING" 
+          || name =="ATTRIBUTE-DEFINITION-BOOLEAN"
+          || name =="ATTRIBUTE-DEFINITION-INTEGER"
+          || name =="ATTRIBUTE-DEFINITION-REAL"
+          || name =="ATTRIBUTE-DEFINITION-ENUMERATATION"
+          || name =="ATTRIBUTE-DEFINITION-DATE"
+          || name =="ATTRIBUTE-DEFINITION-XHTML"
+        )         &&  ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<AttributeDefinitionParser>(new AttributeDefinitionParser(m_Project
                            , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
-    return true;
-
+      return true;
+    }
+    ANTCC_PARSER_ERROR("SpecAttributesParser:startElement unsupported Element %s",name.c_str());
+    return false;
   }
   ,
   {
@@ -1067,13 +1225,13 @@ COMPLEX_PARSER(SpecAttributesParser,
 // Macrodef Parser Implementation
 COMPLEX_PARSER(AttributeDefinitionParser,
   { 
-    if (name == "TYPE" && ns.empty())
+    if (name == "TYPE" && ns.empty())
     {
-      ANTCC_PARSER_DEBUG("TypeParser ignore  %s size=%u"
+      ANTCC_PARSER_DEBUG("AttributeDefinitionParser ignore  %s size=%u"
                     ,name.c_str()
                     ,m_context.size());
-      s.m_parser = SHARED_PTR<TypeParser>(new TypeParser(m_Project
-                   , ::reqif::ElementFactory::get().orderElement("TYPE")
+      s.m_parser = SHARED_PTR<DatatypeRefParser>(new DatatypeRefParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
                  ));
       return true;
     }
@@ -1082,19 +1240,498 @@ COMPLEX_PARSER(AttributeDefinitionParser,
   }
   ,
   {
+    std::string result;
     ANTCC_PARSER_DEBUG_TASK("AttributeDefinitionParser end  %s size=%u"
                     ,name.c_str()
                     ,m_context.size());
-    return true;
+    if (name == "TYPE" && ! ns.empty())
+    {
+        s.m_parser->post(result);
+        std::cout<<"AttributeDefinition TYPE : "<<result<<std::endl;
+        return true;
+    }
+    return false;
   }
   ,
   {
     ANTCC_PARSER_DEBUG_TASK("AttributeDefinitionParser Attribute:  %s-> %s"
                     ,name.c_str()
                     ,val.c_str());
+    if (name == "IDENTIFIER")
+    {
+        l_ok = true;
+    } else if (name == "IS-EDITABLE") {
+        l_ok = true;
+    } else if (name == "LAST-CHANGE") {
+        l_ok = true;
+    } else if (name == "LONG-NAME") {
+           std::cout<<"Attribute-Defintition "<<name<<" = "<<val<<std::endl;
+       l_ok = true;
+    }
     return l_ok;
   })
 
+/*
+            <xsd:element name="ATTRIBUTE-DEFINITION-BOOLEAN-REF" type="REQIF:LOCAL-REF"/>
+            <xsd:element name="ATTRIBUTE-DEFINITION-DATE-REF" type="REQIF:LOCAL-REF"/>
+            <xsd:element name="ATTRIBUTE-DEFINITION-ENUMERATION-REF" type="REQIF:LOCAL-REF"/>
+            <xsd:element name="ATTRIBUTE-DEFINITION-INTEGER-REF" type="REQIF:LOCAL-REF"/>
+            <xsd:element name="ATTRIBUTE-DEFINITION-REAL-REF" type="REQIF:LOCAL-REF"/>
+            <xsd:element name="ATTRIBUTE-DEFINITION-STRING-REF" type="REQIF:LOCAL-REF"/>
+            <xsd:element name="ATTRIBUTE-DEFINITION-XHTML-REF" type="REQIF:LOCAL-REF"/>
+*/
+COMPLEX_PARSER(AttributeDefinitionRefParser,
+  { 
+    ANTCC_PARSER_DEBUG("AttributeDefinitionRefParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if ( (name == "ATTRIBUTE-DEFINITION-BOOLEAN-REF" 
+         || name == "ATTRIBUTE-DEFINITION-DATE-REF"                 
+         || name == "ATTRIBUTE-DEFINITION-ENUMERATION-REF"                  
+         || name == "ATTRIBUTE-DEFINITION-INTEGER-REF"              
+         || name == "ATTRIBUTE-DEFINITION-REAL-REF"                 
+         || name == "ATTRIBUTE-DEFINITION-STRING-REF"               
+         || name == "ATTRIBUTE-DEFINITION-XHTML-REF"                
+       ) && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<DatatypeRefParser>(new DatatypeRefParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement("ATTRIBUTE-DEFINITION-REF")
+                 ));
+      return true;
+    }
+
+    return false;
+
+  }
+  ,
+  {
+    std::string result;
+    ANTCC_PARSER_DEBUG_TASK("AttributeDefinitionRefParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if ( ( name == "ATTRIBUTE-DEFINITION-BOOLEAN-REF" 
+         || name == "ATTRIBUTE-DEFINITION-DATE-REF"                 
+         || name == "ATTRIBUTE-DEFINITION-ENUMERATION-REF"                  
+         || name == "ATTRIBUTE-DEFINITION-INTEGER-REF"              
+         || name == "ATTRIBUTE-DEFINITION-REAL-REF"                 
+         || name == "ATTRIBUTE-DEFINITION-STRING-REF"               
+         || name == "ATTRIBUTE-DEFINITION-XHTML-REF"                
+       ) && ! ns.empty())
+    {
+        s.m_parser->post(result);
+        std::cout<<"AttributeDefinitionRef : "<<result<<std::endl;
+        return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("AttributeDefinitionParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    if (name == "IDENTIFIER")
+    {
+        l_ok = true;
+    } else if (name == "IS-EDITABLE") {
+        l_ok = true;
+    } else if (name == "LAST-CHANGE") {
+        l_ok = true;
+    } else if (name == "LONG-NAME") {
+           std::cout<<"Attribute-Defintition "<<name<<" = "<<val<<std::endl;
+       l_ok = true;
+    }
+    return l_ok;
+  })
+
+
+
+//  SpecRelations Implementation
+COMPLEX_PARSER(SpecRelationsParser,
+  { 
+    if (name == "SPEC-RELATION" && ! ns.empty())
+    {
+      ANTCC_PARSER_DEBUG("SpecRelatsionsParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+      s.m_parser = SHARED_PTR<SpecRelationParser>(new SpecRelationParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecRelationsParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "SPEC-RELATION" && ! ns.empty())
+    {
+      return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecRelationsParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    if (name == "IDENTIFIER")
+    {
+        l_ok = true;
+    } else if (name == "IS-EDITABLE") {
+        l_ok = true;
+    } else if (name == "LAST-CHANGE") {
+        l_ok = true;
+    } else if (name == "LONG-NAME") {
+           std::cout<<"Attribute-Defintition "<<name<<" = "<<val<<std::endl;
+       l_ok = true;
+    }
+    return l_ok;
+  })
+
+
+//  SpecRelations Implementation
+COMPLEX_PARSER(SpecRelationParser,
+  { 
+    if (name == "TARGET" && ! ns.empty())
+    {
+      ANTCC_PARSER_DEBUG("SpecRelatsionParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+      s.m_parser = SHARED_PTR<ObjectParser>(new ObjectParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } else if (name == "VALUES" && ! ns.empty()) {
+      s.m_parser = SHARED_PTR<SpecObjectValuesParser>(new SpecObjectValuesParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+
+    } else if (name == "SOURCE" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<ObjectParser>(new ObjectParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } else if (name == "TYPE" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecRelationsParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "TARGET" && ! ns.empty())
+    {
+      return true;
+    } else if (name == "VALUES" && ! ns.empty())
+    { 
+      return true;
+    } else if (name == "SOURCE" && ! ns.empty())
+    {
+      return true;
+    } else if (name == "TYPE" && ! ns.empty())
+    {
+      return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecRelationsParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    if (name == "IDENTIFIER")
+    {
+        l_ok = true;
+    } else if (name == "IS-EDITABLE") {
+        l_ok = true;
+    } else if (name == "LAST-CHANGE") {
+        l_ok = true;
+    } else if (name == "LONG-NAME") {
+           std::cout<<"Attribute-Defintition "<<name<<" = "<<val<<std::endl;
+       l_ok = true;
+    }
+    return l_ok;
+  })
+
+
+/* Specifications */
+COMPLEX_PARSER(SpecificationsParser,
+  { 
+    ANTCC_PARSER_DEBUG("SpecificationsParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "SPECIFICATION" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<SpecificationParser>(new SpecificationParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecificationsParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "SPECIFICATION" && ! ns.empty())
+    {
+      return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecificationsParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    l_ok = false;
+    return l_ok;
+  })
+
+               
+COMPLEX_PARSER(SpecificationParser,
+  { 
+    ANTCC_PARSER_DEBUG("SpecificationParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "ALTERNATIVE-ID" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<SpecRelationParser>(new SpecRelationParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } else if (name == "VALUES" && ! ns.empty()) {
+      s.m_parser = SHARED_PTR<SpecObjectValuesParser>(new SpecObjectValuesParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+
+    } else if (name == "CHILDREN" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<ChildrenParser>(new ChildrenParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } else if (name == "TYPE" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecRelationsParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "ALTERNATIVE-ID" && ! ns.empty())
+    {
+      return true;
+    } else if (name == "VALUES" && ! ns.empty()) {
+      return true;
+    } else if (name == "CHILDREN" && ! ns.empty()) {
+      return true;
+    } else if (name == "TYPE" && ! ns.empty()) {
+      return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecRelationsParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    if (name == "IDENTIFIER")
+    {
+        l_ok = true;
+    } else if (name == "IS-EDITABLE") {
+        l_ok = true;
+    } else if (name == "LAST-CHANGE") {
+        l_ok = true;
+    } else if (name == "LONG-NAME") {
+           std::cout<<"Attribute-Defintition "<<name<<" = "<<val<<std::endl;
+       l_ok = true;
+    }
+    return l_ok;
+  })
+
+
+COMPLEX_PARSER(ChildrenParser,
+  { 
+    ANTCC_PARSER_DEBUG("ChildrenParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "SPEC-HIERARCHY" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<SpecHierarchyParser>(new SpecHierarchyParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+
+    }
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("ChildrenParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "SPEC-HIERARCHY" && ! ns.empty())
+    {
+      return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("ChildrenParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    l_ok = false;
+    return l_ok;
+  })
+
+               
+
+
+COMPLEX_PARSER(SpecHierarchyParser,
+  { 
+    ANTCC_PARSER_DEBUG("SpecHierachyParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "OBJECT" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<ObjectParser>(new ObjectParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } else if (name == "ALTERNATIVE-ID" && ! ns.empty()) {
+      s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+
+    } 
+    else if (name == "CHILDREN" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<ChildrenParser>(new ChildrenParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } else if (name == "EDITABLE-ATTS" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    }
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecHierarchyParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "OBJECT" && ! ns.empty())
+    {
+      return true;
+    } else if (name == "CHILDREN" && ! ns.empty())
+    {
+      return true;
+    } else if (name == "EDITABLE-ATTS" && ! ns.empty())
+    {
+      return true;
+    } else if (name == "ALTERNATIVE-ID" && ! ns.empty()) {
+      return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("SpecHierarchyParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    /*
+    <xsd:attribute name="DESC" type="xsd:string" use="optional"/>
+    <xsd:attribute name="IDENTIFIER" type="xsd:ID" use="required"/>
+    <xsd:attribute name="IS-EDITABLE" type="xsd:boolean" use="optional"/>
+    <xsd:attribute name="IS-TABLE-INTERNAL" type="xsd:boolean" use="optional"/>
+    <xsd:attribute name="LAST-CHANGE" type="xsd:dateTime" use="required"/>
+    <xsd:attribute name="LONG-NAME" type="xsd:string" use="optional"/>
+    */
+    if (name == "IDENTIFIER")
+    {
+        l_ok = true;
+    } else if (name == "IS-EDITABLE") {
+        l_ok = true;
+    } else if (name == "DESC") {
+        l_ok = true;
+    } else if (name == "IS-TABLE-INTERNAL") {
+        l_ok = true;
+    } else if (name == "LAST-CHANGE") {
+        l_ok = true;
+    } else if (name == "LONG-NAME") {
+           std::cout<<"Attribute-Defintition "<<name<<" = "<<val<<std::endl;
+       l_ok = true;
+    }
+    return l_ok;
+  })
+
+
+COMPLEX_PARSER(ObjectParser,
+  { 
+    ANTCC_PARSER_DEBUG("ObjectParser ignore  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "SPEC-OBJECT-REF" && ! ns.empty())
+    {
+      s.m_parser = SHARED_PTR<DescriptionParser>(new DescriptionParser(m_Project
+                           , ::reqif::ElementFactory::get().orderElement(name.c_str())
+                 ));
+      return true;
+    } 
+    return false;
+
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("ObjectParser end  %s size=%u"
+                    ,name.c_str()
+                    ,m_context.size());
+    if (name == "SPEC-OBJECT-REF" && ! ns.empty())
+    {
+      return true;
+    }
+    return false;
+  }
+  ,
+  {
+    ANTCC_PARSER_DEBUG_TASK("ObjectParser Attribute:  %s-> %s"
+                    ,name.c_str()
+                    ,val.c_str());
+    return false;
+  })
+
+
 
 
 // Description Parser Implementation
index 6da3c3429f685feda69f9f2205b33a2881febe43..b82f45381254d12d1976cb46619f41611cbf5876 100644 (file)
@@ -19,17 +19,27 @@ void register_basic_elements()
   REGISTER(Element,REQ_IF_TOOL_ID,REQ-IF-TOOL-ID)
   REGISTER(Element,REQ_IF_VERSION,REQ-IF-VERSION)
   REGISTER(Element,TITLE,TITLE)
+  REGISTER(Element,CREATION_TIME,CREATION-TIME)
+  REGISTER(Element,SOURCE_TOOL_ID,SOURCE-TOOL-ID)
+
   REGISTER(Element,CORE_CONTENT,CORE-CONTENT)
   REGISTER(Element,REQ_IF_CONTENT,REQ-IF-CONTENT)
-
+  /*REQ-IF-CONTENT sub elements */
   REGISTER(Element,DATATYPES,DATATYPES)
+  REGISTER(Element,SPEC_TYPES,SPEC-TYPES)
+  REGISTER(Element,SPEC_OBJECTS,SPEC-OBJECTS)
+  REGISTER(Element,SPEC_RELATIONS,SPEC-RELATIONS)
+  REGISTER(Element,SPECIFICATIONS,SPECIFICATIONS)
+  REGISTER(Element,SPEC_RELATION_GROUP,SPEC-RELATION-GROUP)
+
+  /* DATATYPES sub elements */
   REGISTER(Element,DATATYPE_DEFINITION_STRING,DATATYPE-DEFINITION-STRING)
   REGISTER(Element,DATATYPE_DEFINITION_DATE,DATATYPE-DEFINITION-DATE)
   REGISTER(Element,DATATYPE_DEFINITION_REAL,DATATYPE-DEFINITION-REAL)
   REGISTER(Element,DATATYPE_DEFINITION_INTEGER,DATATYPE-DEFINITION-INTEGER)
   REGISTER(Element,DATATYPE_DEFINITION_XHTML,DATATYPE-DEFINITION-XHTML)
 
-  REGISTER(Element,SPEC_TYPES,SPEC-TYPES)
+  /* SPEC-TYPES sub elements */
   REGISTER(Element,SPECIFICATION_TYPE,SPECIFICATION-TYPE)
   REGISTER(Element,SPEC_OBJECT_TYPE,SPEC-OBJECT-TYPE)
   REGISTER(Element,SPEC_RELATION_TYPE,SPEC-RELATION-TYPE)
@@ -40,11 +50,50 @@ void register_basic_elements()
   REGISTER(Element,ATTRIBUTE_DEFINITION_INTEGER,ATTRIBUTE-DEFINITION-INTEGER)
   REGISTER(Element,ATTRIBUTE_DEFINITION_DATE,ATTRIBUTE-DEFINITION-DATE)
   REGISTER(Element,ATTRIBUTE_DEFINITION_XHTML,ATTRIBUTE-DEFINITION-XHTML)
+  
+
+  /* SPEC-OBJECTS sub element */
+  REGISTER(Element,SPEC_OBJECT,SPEC-OBJECT)
+  /* SPEC-OBJECT sub element */
+  REGISTER(Element,SPEC_OBJECT_VALUES,VALUES)
+  REGISTER(Element,TYPE,TYPE)
+  
+  /* SPEC-RELATIONS sub element */
+  REGISTER(Element,SPEC_RELATION,SPEC-RELATION)
+  
+  /* SPEC-RELATION sub element */
+  REGISTER(Element,SOURCE,SOURCE)
+  REGISTER(Element,TARGET,TARGET)
 
+  /*  VALUES sub elements */
+  REGISTER(Element,ATTRIBUTE_VALUE_BOOLEAN,ATTRIBUTE-VALUE-BOOLEAN)
+  REGISTER(Element,ATTRIBUTE_VALUE_DATE,ATTRIBUTE-VALUE-DATE)
+  REGISTER(Element,ATTRIBUTE_VALUE_ENUMERATION,ATTRIBUTE-VALUE-ENUMERATION)
+  REGISTER(Element,ATTRIBUTE_VALUE_INTEGER,ATTRIBUTE-VALUE-INTEGER)
+  REGISTER(Element,ATTRIBUTE_VALUE_REAL,ATTRIBUTE-VALUE-REAL)
+  REGISTER(Element,ATTRIBUTE_VALUE_STRING,ATTRIBUTE-VALUE-STRING)
+  REGISTER(Element,ATTRIBUTE_VALUE_XHTML,ATTRIBUTE-VALUE-XHTML)
+  /* ATTRIBUTE-VALUE-xx sub element */
+  REGISTER(Element,DEFINITION,DEFINITION)
+  REGISTER(Element,THE_VALUE,THE-VALUE)
+  /* DEFINITION sub elements  ATTRIBUTE-DEFINITION-xxxx-REF */
+  REGISTER(Element,ATTRIBUTE_DEFINITION_REF,ATTRIBUTE-DEFINITION-REF)
   /* Under XHTML we have HTML tags */
   REGISTER(Element,div,div)
   REGISTER(Element,br,br)
   REGISTER(Element,span,span)
+  /* SPECIFICATIONS sub elements */
+  REGISTER(Element,SPECIFICATION,SPECIFICATION)
+  /* SPECIFICATION sub elements */
+  REGISTER(Element,SPEC_HIERARCHY,SPEC-HIERARCHY)
+  /* - Type is already defind ! */
+  
+  /* SPEC-HIERARCHY sub elements */
+  REGISTER(Element,CHILDREN,CHILDREN)
+  REGISTER(Element,OBJECT,OBJECT)
+
+  /* OBJECT Sub Elements */
+  REGISTER(Element,SPEC_OBJECT_REF,SPEC-OBJECT-REF)
 }