Small bugfixes

Change-Id: Ic1bf2f0f9d48549b58fe186639efabe772dfc9de
Signed-off-by: Thomas Psota <thomas.psota@iese.fraunhofer.de>
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/common/ElementContainer.h b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/common/ElementContainer.h
index 4d7b630..f6700cc 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/common/ElementContainer.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/common/ElementContainer.h
@@ -17,7 +17,7 @@
 namespace map {
 
 struct ElementContainerPath {
-  static constexpr char IdShort[] = "idShort";
+	static constexpr char IdShort[] = "idShort";
 };
 
 template<typename IElementType>
@@ -98,13 +98,20 @@
 	if (n > this->size())
 		return nullptr;
 
-	// Find element in object tree
-	auto & objectList = this->getMap().template Get<basyx::object::object_list_t&>();
-	auto & obj = objectList.at(n);
+	// Iterate through object map
+	int i = 0;
+	
+	for(const auto & entry : map.Get<basyx::object::object_map_t&>())
+	{
+		if (i++ == n)
+		{
+			// Get id of object and create temporary
+			const auto & id = entry.first;
+			return this->getElement(id);
+		};
+	};
 
-	// Get id of object and create temporary
-	const auto & id = obj.getProperty(ElementContainerPath::IdShort).Get<std::string&>();
-	return this->getElement(id);
+	return nullptr;
 };
 
 
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/qualifier/Identifiable.h b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/qualifier/Identifiable.h
index b50fb5a..91ba983 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/qualifier/Identifiable.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/qualifier/Identifiable.h
@@ -18,7 +18,7 @@
     static constexpr char IdType[] = "idType";
     static constexpr char Id[] = "id";
     static constexpr char AdministrativeInformation[] = "administrativeInformation";
-    static constexpr char Identifier[] = "identifier";
+    static constexpr char Identifier[] = "Identification";
   };
 private:
 	map::AdministrativeInformation administrativeInformation;
@@ -31,8 +31,8 @@
 	bool hasAdministrativeInformation() const noexcept override;
 
 	// Inherited via IIdentifiable
-	const AdministrativeInformation & getAdministrativeInformation() const override;
-	AdministrativeInformation & getAdministrativeInformation() override;
+	const api::IAdministrativeInformation & getAdministrativeInformation() const override;
+	api::IAdministrativeInformation & getAdministrativeInformation() override;
 
 	virtual simple::Identifier getIdentification() const override;
 
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/submodelelement/operation/OperationVariable.h b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/submodelelement/operation/OperationVariable.h
index 670ad91..b688d42 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/submodelelement/operation/OperationVariable.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/map_v2/submodelelement/operation/OperationVariable.h
@@ -43,6 +43,8 @@
 	{
 		return *this->value;
 	};
+
+	virtual inline KeyElements getKeyElementType() const override { return KeyElements::OperationVariable; };
 };
 
 
diff --git a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/simple/aas/AssetAdministrationShell.h b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/simple/aas/AssetAdministrationShell.h
index e52889a..be14ce2 100644
--- a/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/simple/aas/AssetAdministrationShell.h
+++ b/sdks/c++/basys.sdk.cc/include/BaSyx/submodel/simple/aas/AssetAdministrationShell.h
@@ -50,8 +50,8 @@
 	virtual simple::Reference getReference() const override;
 
 	// Inherited via IIdentifiable
-	virtual const AdministrativeInformation & getAdministrativeInformation() const override;
-	virtual AdministrativeInformation & getAdministrativeInformation() override;
+	virtual const api::IAdministrativeInformation & getAdministrativeInformation() const override;
+	virtual api::IAdministrativeInformation & getAdministrativeInformation() override;
 
 	virtual Identifier getIdentification() const override;
 
diff --git a/sdks/c++/basys.sdk.cc/src/server/CMakeLists.txt b/sdks/c++/basys.sdk.cc/src/server/CMakeLists.txt
index 8d40802..95155f4 100644
--- a/sdks/c++/basys.sdk.cc/src/server/CMakeLists.txt
+++ b/sdks/c++/basys.sdk.cc/src/server/CMakeLists.txt
@@ -23,6 +23,7 @@
 
 target_sources(${BASYX_SERVER_LIB_SUFFIX}
     PRIVATE
+	${CMAKE_CURRENT_SOURCE_DIR}/server/TCPServer.cpp
     ${BASYX_SHARED_INCLUDE_DIR}/TCPServer.h
     ${BASYX_SHARED_INCLUDE_DIR}/BaSyxNativeProvider.h
 )
diff --git a/sdks/c++/basys.sdk.cc/src/server/server/TCPServer.cpp b/sdks/c++/basys.sdk.cc/src/server/server/TCPServer.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sdks/c++/basys.sdk.cc/src/server/server/TCPServer.cpp
diff --git a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/HasDataSpecification.cpp b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/HasDataSpecification.cpp
index fafd9df..1f52305 100644
--- a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/HasDataSpecification.cpp
+++ b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/HasDataSpecification.cpp
@@ -13,7 +13,7 @@
 	: vab::ElementMap()
 	, dataSpecification()
 {
-	this->map.insertKey(Path::DataSpecification, basyx::object::make_object_ref(&dataSpecification));
+	this->map.insertKey(Path::DataSpecification, this->dataSpecification);
 }
 
 void HasDataSpecification::addDataSpecification(const simple::Reference & reference)
@@ -36,4 +36,4 @@
 	};
 
 	return dataSpecs;
-}
\ No newline at end of file
+}
diff --git a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/Identifiable.cpp b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/Identifiable.cpp
index c6abe71..882f8ce 100644
--- a/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/Identifiable.cpp
+++ b/sdks/c++/basys.sdk.cc/src/submodel/submodel/map_v2/qualifier/Identifiable.cpp
@@ -33,12 +33,12 @@
 	};
 }
 
-const AdministrativeInformation & Identifiable::getAdministrativeInformation() const
+const api::IAdministrativeInformation & Identifiable::getAdministrativeInformation() const
 {
 	return this->administrativeInformation;
 }
 
-AdministrativeInformation & Identifiable::getAdministrativeInformation()
+api::IAdministrativeInformation & Identifiable::getAdministrativeInformation()
 {
 	return this->administrativeInformation;
 }
diff --git a/sdks/c++/basys.sdk.cc/src/submodel/submodel/simple/aas/AssetAdministrationShell.cpp b/sdks/c++/basys.sdk.cc/src/submodel/submodel/simple/aas/AssetAdministrationShell.cpp
index bf500dc..ec9bed5 100644
--- a/sdks/c++/basys.sdk.cc/src/submodel/submodel/simple/aas/AssetAdministrationShell.cpp
+++ b/sdks/c++/basys.sdk.cc/src/submodel/submodel/simple/aas/AssetAdministrationShell.cpp
@@ -75,12 +75,12 @@
 }
 
 
-const AdministrativeInformation & AssetAdministrationShell::getAdministrativeInformation() const
+const api::IAdministrativeInformation & AssetAdministrationShell::getAdministrativeInformation() const
 {
 	return this->identifiable.getAdministrativeInformation();
 }
 
-AdministrativeInformation & AssetAdministrationShell::getAdministrativeInformation()
+api::IAdministrativeInformation & AssetAdministrationShell::getAdministrativeInformation()
 {
 	return this->identifiable.getAdministrativeInformation();
 }
diff --git a/sdks/c++/basys.sdk.cc/tests/CMakeLists.txt b/sdks/c++/basys.sdk.cc/tests/CMakeLists.txt
index 07135d7..3ab7351 100644
--- a/sdks/c++/basys.sdk.cc/tests/CMakeLists.txt
+++ b/sdks/c++/basys.sdk.cc/tests/CMakeLists.txt
@@ -24,7 +24,6 @@
 
 add_subdirectory(regression/util)
 add_subdirectory(regression/vab)
-add_subdirectory(regression/aas)
 add_subdirectory(regression/submodel)
 
 ### Integration tests ###
diff --git a/sdks/c++/basys.sdk.cc/tests/regression/submodel/api/common/test_ElementContainer.cpp b/sdks/c++/basys.sdk.cc/tests/regression/submodel/api/common/test_ElementContainer.cpp
index 112af29..abd197f 100644
--- a/sdks/c++/basys.sdk.cc/tests/regression/submodel/api/common/test_ElementContainer.cpp
+++ b/sdks/c++/basys.sdk.cc/tests/regression/submodel/api/common/test_ElementContainer.cpp
@@ -52,6 +52,25 @@
 	ASSERT_EQ(propB->getValue(), 5);
 };
 
+TYPED_TEST(ElementContainerTest, TestGetByIndex)
+{
+	auto prop = util::make_unique<Property<int>>("prop1");
+	prop->setValue(5);
+
+	auto prop2 = util::make_unique<Property<float>>("prop2");
+	prop2->setValue(10.0f);
+
+	this->elementContainer->addElement(std::move(prop));
+	this->elementContainer->addElement(std::move(prop2));
+	ASSERT_EQ(this->elementContainer->size(), 2);
+
+	auto submodelElement1 = this->elementContainer->getElement(0);
+	ASSERT_TRUE(submodelElement1->getIdShort() == "prop1" || submodelElement1->getIdShort() == "prop2");
+
+	auto submodelElement2 = this->elementContainer->getElement(0);
+	ASSERT_TRUE(submodelElement2->getIdShort() == "prop1" || submodelElement2->getIdShort() == "prop2");
+};
+
 TYPED_TEST(ElementContainerTest, TestCreate)
 {
 	auto prop = this->elementContainer->template createElement<Property<int>>("testProperty");