From a968378024bc44dddaa700c3ffe7ffc4b1304bdd Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 4 Jul 2017 11:08:39 +0200
Subject: [PATCH] xmlApi provides the tag name

---
 alib2common/src/container/ObjectsBitset.h   |  8 +++++++-
 alib2common/src/container/ObjectsDeque.h    |  8 +++++++-
 alib2common/src/container/ObjectsList.h     |  8 +++++++-
 alib2common/src/container/ObjectsMap.h      |  8 +++++++-
 alib2common/src/container/ObjectsPair.h     |  8 +++++++-
 alib2common/src/container/ObjectsSet.h      |  8 +++++++-
 alib2common/src/container/ObjectsTree.h     |  8 +++++++-
 alib2common/src/container/ObjectsTrie.h     |  8 +++++++-
 alib2common/src/container/ObjectsTuple.h    |  8 +++++++-
 alib2common/src/container/ObjectsVariant.h  |  6 ++++++
 alib2common/src/container/ObjectsVector.h   |  8 +++++++-
 alib2common/src/core/xmlApi.hpp             | 12 +++++++++++-
 alib2common/src/primitive/Bool.cpp          |  6 +++++-
 alib2common/src/primitive/Bool.h            |  1 +
 alib2common/src/primitive/Character.cpp     |  6 +++++-
 alib2common/src/primitive/Character.h       |  1 +
 alib2common/src/primitive/Double.cpp        |  6 +++++-
 alib2common/src/primitive/Double.h          |  1 +
 alib2common/src/primitive/Integer.cpp       |  6 +++++-
 alib2common/src/primitive/Integer.h         |  1 +
 alib2common/src/primitive/String.cpp        |  6 +++++-
 alib2common/src/primitive/String.h          |  1 +
 alib2common/src/primitive/Unsigned.cpp      |  6 +++++-
 alib2common/src/primitive/Unsigned.h        |  1 +
 alib2common/src/primitive/UnsignedLong.cpp  |  6 +++++-
 alib2common/src/primitive/UnsignedLong.h    |  1 +
 alib2common/src/sax/FromXMLParserHelper.cpp | 10 +++++-----
 alib2common/src/sax/FromXMLParserHelper.h   |  3 +--
 28 files changed, 135 insertions(+), 25 deletions(-)

diff --git a/alib2common/src/container/ObjectsBitset.h b/alib2common/src/container/ObjectsBitset.h
index dc5d599ea1..f9c5a8d2b9 100644
--- a/alib2common/src/container/ObjectsBitset.h
+++ b/alib2common/src/container/ObjectsBitset.h
@@ -74,6 +74,7 @@ template < size_t N >
 struct xmlApi < std::bitset < N > > {
 	static std::bitset < N > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::bitset < N > & data );
 };
 
@@ -84,7 +85,12 @@ std::bitset < N > xmlApi < std::bitset < N > >::parse ( std::deque < sax::Token
 
 template < size_t N >
 bool xmlApi < std::bitset < N > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsBitset::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < size_t N >
+std::string xmlApi < std::bitset < N > >::xmlTagName ( ) {
+	return container::ObjectsBitset::getXmlTagName();
 }
 
 template < size_t N >
diff --git a/alib2common/src/container/ObjectsDeque.h b/alib2common/src/container/ObjectsDeque.h
index 5ae4b7d699..a0b9e9b0cb 100644
--- a/alib2common/src/container/ObjectsDeque.h
+++ b/alib2common/src/container/ObjectsDeque.h
@@ -157,6 +157,7 @@ template < typename T >
 struct xmlApi < std::deque < T > > {
 	static std::deque < T > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::deque < T > & data );
 };
 
@@ -167,7 +168,12 @@ std::deque < T > xmlApi < std::deque < T > >::parse ( std::deque < sax::Token >:
 
 template < typename T >
 bool xmlApi < std::deque < T > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsDeque < >::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < typename T >
+std::string xmlApi < std::deque < T > >::xmlTagName ( ) {
+	return container::ObjectsDeque < >::getXmlTagName();
 }
 
 template < typename T >
diff --git a/alib2common/src/container/ObjectsList.h b/alib2common/src/container/ObjectsList.h
index ca09218046..23ae170fa7 100644
--- a/alib2common/src/container/ObjectsList.h
+++ b/alib2common/src/container/ObjectsList.h
@@ -157,6 +157,7 @@ template < typename T >
 struct xmlApi < std::list < T > > {
 	static std::list < T > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::list < T > & data );
 };
 
@@ -167,7 +168,12 @@ std::list < T > xmlApi < std::list < T > >::parse ( std::deque < sax::Token >::i
 
 template < typename T >
 bool xmlApi < std::list < T > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsList < >::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < typename T >
+std::string xmlApi < std::list < T > >::xmlTagName ( ) {
+	return container::ObjectsList < >::getXmlTagName();
 }
 
 template < typename T >
diff --git a/alib2common/src/container/ObjectsMap.h b/alib2common/src/container/ObjectsMap.h
index 44735e5b53..2cc501c85f 100644
--- a/alib2common/src/container/ObjectsMap.h
+++ b/alib2common/src/container/ObjectsMap.h
@@ -160,6 +160,7 @@ template < typename T, typename R >
 struct xmlApi < std::map < T, R > > {
 	static std::map < T, R > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::map < T, R > & data );
 };
 
@@ -170,7 +171,12 @@ std::map < T, R > xmlApi < std::map < T, R > >::parse ( std::deque < sax::Token
 
 template < typename T, typename R >
 bool xmlApi < std::map < T, R > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsMap < >::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < typename T, typename R >
+std::string xmlApi < std::map < T, R > >::xmlTagName ( ) {
+	return container::ObjectsMap < >::getXmlTagName();
 }
 
 template < typename T, typename R >
diff --git a/alib2common/src/container/ObjectsPair.h b/alib2common/src/container/ObjectsPair.h
index c2cbcc2f32..60ff385ae3 100644
--- a/alib2common/src/container/ObjectsPair.h
+++ b/alib2common/src/container/ObjectsPair.h
@@ -153,6 +153,7 @@ template < typename T, typename R >
 struct xmlApi < std::pair < T, R > > {
 	static std::pair < T, R > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::pair < T, R > & data );
 };
 
@@ -163,7 +164,12 @@ std::pair < T, R > xmlApi < std::pair < T, R > >::parse ( std::deque < sax::Toke
 
 template < typename T, typename R >
 bool xmlApi < std::pair < T, R > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsPair < >::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < typename T, typename R >
+std::string xmlApi < std::pair < T, R > >::xmlTagName ( ) {
+	return container::ObjectsPair < >::getXmlTagName();
 }
 
 template < typename T, typename R >
diff --git a/alib2common/src/container/ObjectsSet.h b/alib2common/src/container/ObjectsSet.h
index acf734f329..f2d7399670 100644
--- a/alib2common/src/container/ObjectsSet.h
+++ b/alib2common/src/container/ObjectsSet.h
@@ -158,6 +158,7 @@ template < typename T >
 struct xmlApi < std::set < T > > {
 	static std::set < T > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::set < T > & data );
 };
 
@@ -168,7 +169,12 @@ std::set < T > xmlApi < std::set < T > >::parse ( std::deque < sax::Token >::ite
 
 template < typename T >
 bool xmlApi < std::set < T > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsSet < >::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < typename T >
+std::string xmlApi < std::set < T > >::xmlTagName ( ) {
+	return container::ObjectsSet < >::getXmlTagName();
 }
 
 template < typename T >
diff --git a/alib2common/src/container/ObjectsTree.h b/alib2common/src/container/ObjectsTree.h
index 3b13bce372..114258239e 100644
--- a/alib2common/src/container/ObjectsTree.h
+++ b/alib2common/src/container/ObjectsTree.h
@@ -193,6 +193,7 @@ template < typename T >
 struct xmlApi < std::tree < T > > {
 	static std::tree < T > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::tree < T > & data );
 };
 
@@ -203,7 +204,12 @@ std::tree < T > xmlApi < std::tree < T > >::parse ( std::deque < sax::Token >::i
 
 template < typename T >
 bool xmlApi < std::tree < T > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsTree < >::getXmlTagName ( ) );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+}
+
+template < typename T >
+std::string xmlApi < std::tree < T > >::xmlTagName ( ) {
+	return container::ObjectsTree < >::getXmlTagName ( );
 }
 
 template < typename T >
diff --git a/alib2common/src/container/ObjectsTrie.h b/alib2common/src/container/ObjectsTrie.h
index 0ce858dc02..aee90811ac 100644
--- a/alib2common/src/container/ObjectsTrie.h
+++ b/alib2common/src/container/ObjectsTrie.h
@@ -185,6 +185,7 @@ template < typename T, typename R >
 struct xmlApi < std::trie < T, R > > {
 	static std::trie < T, R > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::trie < T, R > & data );
 };
 
@@ -195,7 +196,12 @@ std::trie < T, R > xmlApi < std::trie < T, R > >::parse ( std::deque < sax::Toke
 
 template < typename T, typename R >
 bool xmlApi < std::trie < T, R > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsTrie < >::getXmlTagName ( ) );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ) );
+}
+
+template < typename T, typename R >
+std::string xmlApi < std::trie < T, R > >::xmlTagName ( ) {
+	return container::ObjectsTrie < >::getXmlTagName ( );
 }
 
 template < typename T, typename R >
diff --git a/alib2common/src/container/ObjectsTuple.h b/alib2common/src/container/ObjectsTuple.h
index 7118b7a958..196a653f94 100644
--- a/alib2common/src/container/ObjectsTuple.h
+++ b/alib2common/src/container/ObjectsTuple.h
@@ -73,6 +73,7 @@ template < typename ... Ts >
 struct xmlApi < std::tuple < Ts ... > > {
 	static std::tuple < Ts ... > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::tuple < Ts ... > & data );
 };
 
@@ -83,7 +84,12 @@ std::tuple < Ts ... > xmlApi < std::tuple < Ts ... > >::parse ( std::deque < sax
 
 template < typename ... Ts >
 bool xmlApi < std::tuple < Ts ... > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsTuple::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < typename ... Ts >
+std::string xmlApi < std::tuple < Ts ... > >::xmlTagName ( ) {
+	return container::ObjectsTuple::getXmlTagName();
 }
 
 template < typename ... Ts >
diff --git a/alib2common/src/container/ObjectsVariant.h b/alib2common/src/container/ObjectsVariant.h
index 47fb46cb87..22a8f2709c 100644
--- a/alib2common/src/container/ObjectsVariant.h
+++ b/alib2common/src/container/ObjectsVariant.h
@@ -111,6 +111,7 @@ template < typename ... Ts >
 struct xmlApi < std::variant < Ts ... > > {
 	static std::variant < Ts ... > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::variant < Ts ... > & data );
 };
 
@@ -124,6 +125,11 @@ bool xmlApi < std::variant < Ts ... > >::first ( const std::deque < sax::Token >
 	return container::firstVariantHelper < std::variant < Ts ... >, Ts ... > ( input );
 }
 
+template < typename ... Ts >
+std::string xmlApi < std::variant < Ts ... > >::xmlTagName ( ) {
+	throw ::exception::CommonException ( "Variant does not have xmlTagName." );
+}
+
 template < typename ... Ts >
 void xmlApi < std::variant < Ts ... > >::compose ( std::deque < sax::Token > & output, const std::variant < Ts ... > & input ) {
 	return container::ObjectsVariant::compose < Ts ... > ( output, input );
diff --git a/alib2common/src/container/ObjectsVector.h b/alib2common/src/container/ObjectsVector.h
index 1a7dd5de68..5ee06a051c 100644
--- a/alib2common/src/container/ObjectsVector.h
+++ b/alib2common/src/container/ObjectsVector.h
@@ -157,6 +157,7 @@ template < typename T >
 struct xmlApi < std::vector < T > > {
 	static std::vector < T > parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, const std::vector < T > & data );
 };
 
@@ -167,7 +168,12 @@ std::vector < T > xmlApi < std::vector < T > >::parse ( std::deque < sax::Token
 
 template < typename T >
 bool xmlApi < std::vector < T > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsVector < >::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+}
+
+template < typename T >
+std::string xmlApi < std::vector < T > >::xmlTagName ( ) {
+	return container::ObjectsVector < >::getXmlTagName();
 }
 
 template < typename T >
diff --git a/alib2common/src/core/xmlApi.hpp b/alib2common/src/core/xmlApi.hpp
index e4096793d0..f57dd9b6b2 100644
--- a/alib2common/src/core/xmlApi.hpp
+++ b/alib2common/src/core/xmlApi.hpp
@@ -173,6 +173,12 @@ public:
 		return true;
 	}
 
+	static std::string xmlTagName ( ) {
+		std::string target = std::type_name < Group > ( );
+
+		throw ::exception::CommonException ( "Type " + target + " does not have xmlTagName." );
+	}
+
 	static void compose ( std::deque < sax::Token > & output, const Group & data ) {
 		xmlApiOutputContext & context = ( xmlApiOutputContext & ) output;
 
@@ -215,7 +221,11 @@ struct xmlApi < Type, typename std::enable_if < std::is_base_of < ObjectBase, Ty
 	}
 
 	static bool first ( const std::deque < sax::Token >::const_iterator & input ) {
-		return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, Type::getXmlTagName() );
+		return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+	}
+
+	static std::string xmlTagName ( ) {
+		return Type::getXmlTagName();
 	}
 
 	static void compose ( std::deque < sax::Token > & output, const Type & data ) {
diff --git a/alib2common/src/primitive/Bool.cpp b/alib2common/src/primitive/Bool.cpp
index 4bca416762..3bcf20c114 100644
--- a/alib2common/src/primitive/Bool.cpp
+++ b/alib2common/src/primitive/Bool.cpp
@@ -94,7 +94,11 @@ bool xmlApi<bool>::parse(std::deque<sax::Token>::iterator& input) {
 }
 
 bool xmlApi<bool>::first(const std::deque<sax::Token>::const_iterator& input) {
-	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::Bool::getXmlTagName());
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName());
+}
+
+std::string xmlApi<bool>::xmlTagName() {
+	return primitive::Bool::getXmlTagName();
 }
 
 void xmlApi<bool>::compose(std::deque<sax::Token>& output, bool data) {
diff --git a/alib2common/src/primitive/Bool.h b/alib2common/src/primitive/Bool.h
index 70f29fe605..68c3d0857c 100644
--- a/alib2common/src/primitive/Bool.h
+++ b/alib2common/src/primitive/Bool.h
@@ -82,6 +82,7 @@ template < >
 struct xmlApi < bool > {
 	static bool parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, bool data );
 };
 
diff --git a/alib2common/src/primitive/Character.cpp b/alib2common/src/primitive/Character.cpp
index 6830c2428a..297ced502f 100644
--- a/alib2common/src/primitive/Character.cpp
+++ b/alib2common/src/primitive/Character.cpp
@@ -83,7 +83,11 @@ char xmlApi<char>::parse(std::deque<sax::Token>::iterator& input) {
 }
 
 bool xmlApi<char>::first(const std::deque<sax::Token>::const_iterator& input) {
-	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::Character::getXmlTagName());
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName());
+}
+
+std::string xmlApi<char>::xmlTagName() {
+	return primitive::Character::getXmlTagName();
 }
 
 void xmlApi<char>::compose(std::deque<sax::Token>& output, char data) {
diff --git a/alib2common/src/primitive/Character.h b/alib2common/src/primitive/Character.h
index 8ed29bec4c..8d44ae1814 100644
--- a/alib2common/src/primitive/Character.h
+++ b/alib2common/src/primitive/Character.h
@@ -82,6 +82,7 @@ template < >
 struct xmlApi < char > {
 	static char parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, char data );
 };
 
diff --git a/alib2common/src/primitive/Double.cpp b/alib2common/src/primitive/Double.cpp
index 573d7eade4..3acb1e041f 100644
--- a/alib2common/src/primitive/Double.cpp
+++ b/alib2common/src/primitive/Double.cpp
@@ -88,7 +88,11 @@ int xmlApi<double>::parse(std::deque<sax::Token>::iterator& input) {
 }
 
 bool xmlApi<double>::first(const std::deque<sax::Token>::const_iterator& input) {
-	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::Double::getXmlTagName());
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName());
+}
+
+std::string xmlApi<double>::xmlTagName() {
+	return primitive::Double::getXmlTagName();
 }
 
 void xmlApi<double>::compose(std::deque<sax::Token>& output, double data) {
diff --git a/alib2common/src/primitive/Double.h b/alib2common/src/primitive/Double.h
index 578b8bb3c9..abff90e059 100644
--- a/alib2common/src/primitive/Double.h
+++ b/alib2common/src/primitive/Double.h
@@ -82,6 +82,7 @@ template < >
 struct xmlApi < double > {
 	static int parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, double data );
 };
 
diff --git a/alib2common/src/primitive/Integer.cpp b/alib2common/src/primitive/Integer.cpp
index 97ff2f1402..89b960661d 100644
--- a/alib2common/src/primitive/Integer.cpp
+++ b/alib2common/src/primitive/Integer.cpp
@@ -83,7 +83,11 @@ int xmlApi<int>::parse(std::deque<sax::Token>::iterator& input) {
 }
 
 bool xmlApi<int>::first(const std::deque<sax::Token>::const_iterator& input) {
-	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::Integer::getXmlTagName());
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName());
+}
+
+std::string xmlApi<int>::xmlTagName() {
+	return primitive::Integer::getXmlTagName();
 }
 
 void xmlApi<int>::compose(std::deque<sax::Token>& output, int data) {
diff --git a/alib2common/src/primitive/Integer.h b/alib2common/src/primitive/Integer.h
index 1e1aaf0e9f..bdecb3ce5a 100644
--- a/alib2common/src/primitive/Integer.h
+++ b/alib2common/src/primitive/Integer.h
@@ -82,6 +82,7 @@ template < >
 struct xmlApi < int > {
 	static int parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, int data );
 };
 
diff --git a/alib2common/src/primitive/String.cpp b/alib2common/src/primitive/String.cpp
index 38d18e52a8..0799334fd7 100644
--- a/alib2common/src/primitive/String.cpp
+++ b/alib2common/src/primitive/String.cpp
@@ -86,7 +86,11 @@ std::string xmlApi<std::string>::parse(std::deque<sax::Token>::iterator& input)
 }
 
 bool xmlApi<std::string>::first(const std::deque<sax::Token>::const_iterator& input) {
-	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::String::getXmlTagName());
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName());
+}
+
+std::string xmlApi<std::string>::xmlTagName() {
+	return primitive::String::getXmlTagName();
 }
 
 void xmlApi<std::string>::compose(std::deque<sax::Token>& output, std::string data) {
diff --git a/alib2common/src/primitive/String.h b/alib2common/src/primitive/String.h
index 9e4c166d79..a3624f3d93 100644
--- a/alib2common/src/primitive/String.h
+++ b/alib2common/src/primitive/String.h
@@ -83,6 +83,7 @@ template < >
 struct xmlApi < std::string > {
 	static std::string parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, std::string data );
 };
 
diff --git a/alib2common/src/primitive/Unsigned.cpp b/alib2common/src/primitive/Unsigned.cpp
index a76c27e0d9..0b0f02eb56 100644
--- a/alib2common/src/primitive/Unsigned.cpp
+++ b/alib2common/src/primitive/Unsigned.cpp
@@ -87,7 +87,11 @@ unsigned xmlApi<unsigned>::parse(std::deque<sax::Token>::iterator& input) {
 }
 
 bool xmlApi<unsigned>::first(const std::deque<sax::Token>::const_iterator& input) {
-	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::Unsigned::getXmlTagName());
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName());
+}
+
+std::string xmlApi<unsigned>::xmlTagName() {
+	return primitive::Unsigned::getXmlTagName();
 }
 
 void xmlApi<unsigned>::compose(std::deque<sax::Token>& output, unsigned data) {
diff --git a/alib2common/src/primitive/Unsigned.h b/alib2common/src/primitive/Unsigned.h
index 22f5b22980..3dfe67dd7f 100644
--- a/alib2common/src/primitive/Unsigned.h
+++ b/alib2common/src/primitive/Unsigned.h
@@ -84,6 +84,7 @@ template < >
 struct xmlApi < unsigned > {
 	static unsigned parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, unsigned data );
 };
 
diff --git a/alib2common/src/primitive/UnsignedLong.cpp b/alib2common/src/primitive/UnsignedLong.cpp
index 245439b736..0fed03b14f 100644
--- a/alib2common/src/primitive/UnsignedLong.cpp
+++ b/alib2common/src/primitive/UnsignedLong.cpp
@@ -83,7 +83,11 @@ unsigned long xmlApi<unsigned long>::parse(std::deque<sax::Token>::iterator& inp
 }
 
 bool xmlApi<unsigned long>::first(const std::deque<sax::Token>::const_iterator& input) {
-	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, primitive::UnsignedLong::getXmlTagName());
+	return sax::FromXMLParserHelper::isToken(input, sax::Token::TokenType::START_ELEMENT, xmlTagName ( ));
+}
+
+std::string xmlApi<unsigned long>::xmlTagName() {
+	return primitive::UnsignedLong::getXmlTagName();
 }
 
 void xmlApi<unsigned long>::compose(std::deque<sax::Token>& output, unsigned long data) {
diff --git a/alib2common/src/primitive/UnsignedLong.h b/alib2common/src/primitive/UnsignedLong.h
index 807d6ab449..6ca67cc428 100644
--- a/alib2common/src/primitive/UnsignedLong.h
+++ b/alib2common/src/primitive/UnsignedLong.h
@@ -82,6 +82,7 @@ template < >
 struct xmlApi < unsigned long > {
 	static unsigned long parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
+	static std::string xmlTagName ( );
 	static void compose ( std::deque < sax::Token > & output, unsigned long data );
 };
 
diff --git a/alib2common/src/sax/FromXMLParserHelper.cpp b/alib2common/src/sax/FromXMLParserHelper.cpp
index e1ec1ababe..98a83748ae 100644
--- a/alib2common/src/sax/FromXMLParserHelper.cpp
+++ b/alib2common/src/sax/FromXMLParserHelper.cpp
@@ -67,7 +67,7 @@ std::string FromXMLParserHelper::getTokenData(std::deque<Token>::const_iterator
 	}
 }
 
-std::deque< sax::Token > FromXMLParserHelper::parseSingle(const std::string& input) {
+std::deque< sax::Token > FromXMLParserHelper::parseInput(const std::string& input) {
 	std::deque < sax::Token > res;
 	sax::SaxParseInterface::parseFile ( input, res );
 	return res;
@@ -81,10 +81,10 @@ std::deque < std::deque < sax::Token > > FromXMLParserHelper::parseInput(bool ne
 			throw exception::CommonException("Multiple parameters when single required.");
 
 		for ( const std::string & fileName : input.getValue() ) {
-			inputTokens.emplace_back ( parseSingle ( fileName ) );
+			inputTokens.emplace_back ( parseInput ( fileName ) );
 		}
 	} else {
-		inputTokens.emplace_back ( parseSingle ( "-" ) );
+		inputTokens.emplace_back ( parseInput ( "-" ) );
 	}
 
 	return inputTokens;
@@ -92,9 +92,9 @@ std::deque < std::deque < sax::Token > > FromXMLParserHelper::parseInput(bool ne
 
 std::deque < sax::Token > FromXMLParserHelper::parseInput(/*const*/ TCLAP::ValueArg < std::string >& input) {
 	if ( input.isSet ( ) ) {
-		return parseSingle ( input.getValue() );
+		return parseInput ( input.getValue() );
 	} else {
-		return parseSingle ( "-" );
+		return parseInput ( "-" );
 	}
 }
 } /* namespace sax */
diff --git a/alib2common/src/sax/FromXMLParserHelper.h b/alib2common/src/sax/FromXMLParserHelper.h
index f91a588fac..a211c555ba 100644
--- a/alib2common/src/sax/FromXMLParserHelper.h
+++ b/alib2common/src/sax/FromXMLParserHelper.h
@@ -33,8 +33,7 @@ public:
 	static void skipAttributes ( std::deque < Token >::const_iterator & input, Token::TokenType type );
 	static void skipAttributes ( std::deque < Token >::iterator & input, Token::TokenType type );
 
-private:
-	static std::deque< sax::Token > parseSingle(const std::string& input);
+	static std::deque< sax::Token > parseInput(const std::string& input);
 };
 
 } /* namespace sax */
-- 
GitLab