##// END OF EJS Templates
Determines AMDA server at compile time
Alexandre Leroux -
r1146:f38fedd3e3cb
parent child
Show More
@@ -1,28 +1,33
1 #ifndef SCIQLOP_AMDASERVER_H
1 #ifndef SCIQLOP_AMDASERVER_H
2 #define SCIQLOP_AMDASERVER_H
2 #define SCIQLOP_AMDASERVER_H
3
3
4 #include <QLoggingCategory>
4 #include <QLoggingCategory>
5
5
6 #include <memory>
6 #include <memory>
7
7
8 Q_DECLARE_LOGGING_CATEGORY(LOG_AmdaServer)
8 Q_DECLARE_LOGGING_CATEGORY(LOG_AmdaServer)
9
9
10 // Directive used to determine the active AMDA server
11 #ifndef SCIQLOP_AMDA_SERVER
12 #define SCIQLOP_AMDA_SERVER "default"
13 #endif
14
10 /**
15 /**
11 * @brief The AmdaServer class represents the server used to retrieve AMDA data (singleton).
16 * @brief The AmdaServer class represents the server used to retrieve AMDA data (singleton).
12 *
17 *
13 * The server instance is initialized at compile time, as defined by the AMDA_SERVER value.
18 * The server instance is initialized at compile time, as defined by the AMDA_SERVER value.
14 */
19 */
15 class AmdaServer {
20 class AmdaServer {
16 public:
21 public:
17 /// @return the unique instance of the AMDA server
22 /// @return the unique instance of the AMDA server
18 static AmdaServer &instance();
23 static AmdaServer &instance();
19
24
20 virtual ~AmdaServer() noexcept = default;
25 virtual ~AmdaServer() noexcept = default;
21
26
22 /// @return the name of the server
27 /// @return the name of the server
23 virtual QString name() const = 0;
28 virtual QString name() const = 0;
24 /// @return the url of the server (used to retrieve data)
29 /// @return the url of the server (used to retrieve data)
25 virtual QString url() const = 0;
30 virtual QString url() const = 0;
26 };
31 };
27
32
28 #endif // SCIQLOP_AMDASERVER_H
33 #endif // SCIQLOP_AMDASERVER_H
@@ -1,26 +1,45
1 #include "AmdaServer.h"
1 #include "AmdaServer.h"
2
2
3 Q_LOGGING_CATEGORY(LOG_AmdaServer, "AmdaServer")
3 Q_LOGGING_CATEGORY(LOG_AmdaServer, "AmdaServer")
4
4
5 namespace {
5 namespace {
6
6
7 /// Default AMDA server
7 /// Default AMDA server
8 struct AmdaDefaultServer : public AmdaServer {
8 struct AmdaDefaultServer : public AmdaServer {
9 public:
9 public:
10 QString name() const override { return QStringLiteral("AMDA (default)"); }
10 QString name() const override { return QStringLiteral("AMDA (default)"); }
11 QString url() const override { return QStringLiteral("amda.irap.omp.eu"); }
11 QString url() const override { return QStringLiteral("amda.irap.omp.eu"); }
12 };
12 };
13
13
14 /// Alternative AMDA server (tests)
14 /// Alternative AMDA server (tests)
15 struct AmdaTestServer : public AmdaServer {
15 struct AmdaTestServer : public AmdaServer {
16 public:
16 public:
17 QString name() const override { return QStringLiteral("AMDA (test)"); }
17 QString name() const override { return QStringLiteral("AMDA (test)"); }
18 QString url() const override { return QStringLiteral("amdatest.irap.omp.eu"); }
18 QString url() const override { return QStringLiteral("amdatest.irap.omp.eu"); }
19 };
19 };
20
20
21 /// @return an AMDA server instance created from the name of the server passed in parameter. If the
22 /// name does not match any known server, a default server instance is created
23 std::unique_ptr<AmdaServer> createInstance(const QString &server)
24 {
25 if (server == QString{"amdatest"}) {
26 return std::make_unique<AmdaTestServer>();
27 }
28 else {
29 if (server != QString{"default"}) {
30 qCWarning(LOG_AmdaServer())
31 << QObject::tr("Unknown server '%1': default AMDA server will be used").arg(server);
32 }
33
34 return std::make_unique<AmdaDefaultServer>();
35 }
36 }
37
21 } // namespace
38 } // namespace
22
39
23 AmdaServer &AmdaServer::instance()
40 AmdaServer &AmdaServer::instance()
24 {
41 {
25 /// @todo ALX
42 // Creates instance depending on the SCIQLOP_AMDA_SERVER value at compile time
43 static auto instance = createInstance(SCIQLOP_AMDA_SERVER);
44 return *instance;
26 }
45 }
General Comments 0
You need to be logged in to leave comments. Login now