From ee7d6de8a27925cd47933e6915cc49faaaf2953b Mon Sep 17 00:00:00 2001
From: Tomas Pecka <peckato1@fit.cvut.cz>
Date: Fri, 25 Mar 2022 20:06:33 +0100
Subject: [PATCH] worker: bump core version

We now build against core commmit
6fa14a8d87b625cf90204a79a415e85c87acc465 (0.0.0.r1468.g6fa14a8d8) [1].

This is a commit after new normalization was adopted. Not *that* much
of the API was broken. Notable changes are that core now returns
core::type_details instead of a std::string. Also the
std::__cxx11::basic_string types are gone and replaced with a simple
std::string.

[1] https://gitlab.fit.cvut.cz/algorithms-library-toolkit/automata-library/commit/6fa14a8d87b625cf90204a79a415e85c87acc465
---
 .gitlab-ci.yml                                |  2 +-
 .../WebUI/Toolbar/AlgorithmDrawer.tsx         |  2 +-
 webui/src/reducers/algorithmData.ts           |  3 +-
 worker/Dockerfile                             |  2 +-
 worker/src/utils/alt.cpp                      |  2 +-
 .../src/worker/introspection/introspect.cpp   | 12 +++----
 .../test-src/evaluator/AlgorithmNodeTest.cpp  | 31 +++++++++++++------
 7 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6d06143a..7d4220d1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -22,7 +22,7 @@ image: alpine:3.15
 
 build:worker:
   stage: build
-  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/automata-library/cli:snapshot
+  image: gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/webui-client/core-snapshot:0.0.0.r1468.g6fa14a8d8
   before_script:
     - apk add --no-cache curl && curl https://alt.fit.cvut.cz/repo/alpine/alt-dev-repo.sh | sh
     - apk add --no-cache build-base cmake jsoncpp-dev pkgconf apr-dev spdlog-dev catch2 activemq-cpp-dev argparse
diff --git a/webui/src/components/WebUI/Toolbar/AlgorithmDrawer.tsx b/webui/src/components/WebUI/Toolbar/AlgorithmDrawer.tsx
index f3add59e..7c1e85a6 100644
--- a/webui/src/components/WebUI/Toolbar/AlgorithmDrawer.tsx
+++ b/webui/src/components/WebUI/Toolbar/AlgorithmDrawer.tsx
@@ -76,7 +76,7 @@ export const AlgorithmDrawer = () => {
 			handleButtonClick(
 				'inputString',
 				'string',
-				'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >',
+				'std:string',
 				[],
 				''
 			),
diff --git a/webui/src/reducers/algorithmData.ts b/webui/src/reducers/algorithmData.ts
index c90b19db..46049e27 100644
--- a/webui/src/reducers/algorithmData.ts
+++ b/webui/src/reducers/algorithmData.ts
@@ -206,8 +206,7 @@ export const algorithmReducer = (
 				nodes: state.nodes.update(id, emptyNode, (node) => ({
 					...node,
 					name: 'string',
-					resultType:
-						'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >',
+					resultType: 'std::string',
 					nodeType: 'inputString',
 					value
 				})),
diff --git a/worker/Dockerfile b/worker/Dockerfile
index c01a20d8..a990975f 100644
--- a/worker/Dockerfile
+++ b/worker/Dockerfile
@@ -1,4 +1,4 @@
-ARG BASE_IMAGE=gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/automata-library/cli:snapshot
+ARG BASE_IMAGE=gitlab.fit.cvut.cz:5000/algorithms-library-toolkit/webui-client/core-snapshot:0.0.0.r1468.g6fa14a8d8
 
 #-----------------------------------------------------------------------------------------
 
diff --git a/worker/src/utils/alt.cpp b/worker/src/utils/alt.cpp
index 0bcfb466..5da5a8e5 100644
--- a/worker/src/utils/alt.cpp
+++ b/worker/src/utils/alt.cpp
@@ -5,7 +5,7 @@
 
 std::string abstractValueToString(const std::shared_ptr<abstraction::Value>& val)
 {
-    std::shared_ptr<abstraction::OperationAbstraction> op = abstraction::Registry::getValuePrinterAbstraction(val->getType());
+    std::shared_ptr<abstraction::OperationAbstraction> op = abstraction::Registry::getValuePrinterAbstraction(val->getDeclaredType());
 
     ext::ostringstream oss;
     op->attachInput(val, 0);
diff --git a/worker/src/worker/introspection/introspect.cpp b/worker/src/worker/introspection/introspect.cpp
index 2080a3d6..34fbbf21 100644
--- a/worker/src/worker/introspection/introspect.cpp
+++ b/worker/src/worker/introspection/introspect.cpp
@@ -20,10 +20,9 @@ Json::Value getAlgorithmOverloadJSON(const ext::tuple<abstraction::AlgorithmFull
 
     while (paramsIterator != params.cend() || paramsNamesIterator != paramsNames.cend()) {
         Json::Value paramJSON(Json::objectValue);
-        ;
 
         paramJSON["name"] = *paramsNamesIterator;
-        paramJSON["type"] = std::get<0>(*paramsIterator);
+        paramJSON["type"] = ext::to_string(std::get<0>(*paramsIterator));
 
         paramsJSON.append(paramJSON);
 
@@ -31,7 +30,7 @@ Json::Value getAlgorithmOverloadJSON(const ext::tuple<abstraction::AlgorithmFull
         ++paramsNamesIterator;
     }
 
-    overloadJSON["resultType"] = info.getResult().first;
+    overloadJSON["resultType"] = ext::to_string(info.getResult().first);
     overloadJSON["params"] = paramsJSON;
     if (auto docs = std::get<1>(overload)) {
         overloadJSON["docs"] = *docs;
@@ -85,13 +84,12 @@ Json::Value getCastsJSON()
 {
     Json::Value castsJSON(Json::objectValue);
 
-    for (const ext::tuple<std::string, std::string, bool>& castPair : abstraction::Registry::listCasts()) {
-        const auto& isExplicit = std::get<2>(castPair);
+    for (const auto& [toType, fromType, isExplicit] : abstraction::Registry::listCasts()) {
         if (isExplicit)
             continue;
 
-        const auto& from = std::get<1>(castPair);
-        const auto& to = std::get<0>(castPair);
+        auto from = ext::to_string(fromType);
+        auto to = ext::to_string(toType);
 
         if (castsJSON[from].isNull())
             castsJSON[from] = Json::Value(Json::arrayValue);
diff --git a/worker/test-src/evaluator/AlgorithmNodeTest.cpp b/worker/test-src/evaluator/AlgorithmNodeTest.cpp
index 23071e57..b35f8c6c 100644
--- a/worker/test-src/evaluator/AlgorithmNodeTest.cpp
+++ b/worker/test-src/evaluator/AlgorithmNodeTest.cpp
@@ -57,21 +57,32 @@ TEST_CASE("AlgorithmNode evaluate")
 
 TEST_CASE("AlgorithmNode multiple params evaluate")
 {
-    auto inputInt = std::make_shared<IntNode>("", 4, ext::vector<std::string>());
-    auto inputBool = std::make_shared<BoolNode>("", false, ext::vector<std::string>());
-    auto node = std::make_shared<AlgorithmNode>("", "string::generate::RandomStringFactory", ext::vector<std::string>());
+    auto alphabetSize = std::make_shared<IntNode>("", 4, ext::vector<std::string>());
+    auto randomizeAlphabet = std::make_shared<BoolNode>("", true, ext::vector<std::string>());
+    auto lowerCase = std::make_shared<BoolNode>("", false, ext::vector<std::string>());
+    auto randomAlphabet = std::make_shared<AlgorithmNode>("", "alphabet::generate::GenerateAlphabet", ext::vector<std::string>());
+
+    alphabetSize->createEdge(randomAlphabet, 0);
+    randomizeAlphabet->createEdge(randomAlphabet, 1);
+    lowerCase->createEdge(randomAlphabet, 2);
+
+    auto stringSize = std::make_shared<IntNode>("", 10, ext::vector<std::string>());
+    auto randomString = std::make_shared<AlgorithmNode>("", "string::generate::RandomStringFactory", ext::vector<std::string>());
     auto mockOutputNode = std::make_shared<AlgorithmTestNodeMock>();
 
-    inputInt->createEdge(node, 0);
-    inputInt->createEdge(node, 1);
-    inputBool->createEdge(node, 2);
-    inputBool->createEdge(node, 3);
+    stringSize->createEdge(randomString, 0);
+    randomAlphabet->createEdge(randomString, 1);
+    randomString->createEdge(mockOutputNode, 0);
 
     cli::Environment environment;
-    inputInt->evaluate(environment);
-    inputBool->evaluate(environment);
-    node->evaluate(environment);
+    alphabetSize->evaluate(environment);
+    randomizeAlphabet->evaluate(environment);
+    lowerCase->evaluate(environment);
+    randomAlphabet->evaluate(environment);
+    stringSize->evaluate(environment);
+    randomString->evaluate(environment);
     mockOutputNode->evaluate(environment);
 
     REQUIRE(mockOutputNode->getParams().size() == 1);
+    REQUIRE(abstractValueToString(mockOutputNode->getParams().at(0)).starts_with("(LinearString content"));
 }
-- 
GitLab