From b950035bcc3dfe90a033bfb02dfb090b91c284f6 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Tue, 16 Jan 2018 18:24:29 +0100
Subject: [PATCH] DomainObjectBuilder class was turned to namespace.

---
 GUI/coregui/Models/DomainObjectBuilder.cpp    | 34 +++++++------------
 GUI/coregui/Models/DomainObjectBuilder.h      | 20 +++++------
 .../Models/DomainSimulationBuilder.cpp        |  5 ++-
 GUI/coregui/Models/JobItemUtils.cpp           |  9 ++---
 GUI/coregui/Models/JobModelFunctions.cpp      |  3 +-
 .../Views/InfoWidgets/PySampleWidget.cpp      |  3 +-
 6 files changed, 29 insertions(+), 45 deletions(-)

diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp
index 0e3d99f27cb..b2ef69b1270 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.cpp
+++ b/GUI/coregui/Models/DomainObjectBuilder.cpp
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      GUI/coregui/Models/DomainObjectBuilder.cpp
-//! @brief     Implements class DomainObjectBuilder
+//! @brief     Implements DomainObjectBuilder namespace
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -15,25 +15,18 @@
 #include "DomainObjectBuilder.h"
 #include "BeamItem.h"
 #include "ComboProperty.h"
-#include "DetectorItems.h"
-#include "GISASSimulation.h"
 #include "GUIHelpers.h"
-#include "IInterferenceFunction.h"
-#include "Instrument.h"
 #include "InstrumentItems.h"
 #include "InterferenceFunctionItems.h"
 #include "LayerItem.h"
-#include "MultiLayer.h"
 #include "ParticleDistributionItem.h"
 #include "ParticleLayoutItem.h"
 #include "TransformToDomain.h"
 
-
-std::unique_ptr<MultiLayer> DomainObjectBuilder::buildMultiLayer(
-    const SessionItem& multilayer_item) const
+std::unique_ptr<MultiLayer> DomainObjectBuilder::buildMultiLayer(const SessionItem& multilayer_item)
 {
     auto P_multilayer = TransformToDomain::createMultiLayer(multilayer_item);
-    QVector<SessionItem *> children = multilayer_item.children();
+    QVector<SessionItem*> children = multilayer_item.children();
     for (int i = 0; i < children.size(); ++i) {
         if (children[i]->modelType() == Constants::LayerType) {
             auto P_layer = buildLayer(*children[i]);
@@ -52,10 +45,10 @@ std::unique_ptr<MultiLayer> DomainObjectBuilder::buildMultiLayer(
     return P_multilayer;
 }
 
-std::unique_ptr<Layer> DomainObjectBuilder::buildLayer(const SessionItem& item) const
+std::unique_ptr<Layer> DomainObjectBuilder::buildLayer(const SessionItem& item)
 {
     auto P_layer = TransformToDomain::createLayer(item);
-    QVector<SessionItem *> children = item.children();
+    QVector<SessionItem*> children = item.children();
     for (int i = 0; i < children.size(); ++i) {
         if (children[i]->modelType() == Constants::ParticleLayoutType) {
             auto P_layout = buildParticleLayout(*children[i]);
@@ -67,11 +60,10 @@ std::unique_ptr<Layer> DomainObjectBuilder::buildLayer(const SessionItem& item)
     return P_layer;
 }
 
-std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(
-        const SessionItem& item) const
+std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(const SessionItem& item)
 {
     auto P_layout = TransformToDomain::createParticleLayout(item);
-    QVector<SessionItem *> children = item.getItems();
+    QVector<SessionItem*> children = item.getItems();
     for (int i = 0; i < children.size(); ++i) {
         auto P_particle = TransformToDomain::createIParticle(*children[i]);
         if (P_particle) {
@@ -79,10 +71,9 @@ std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(
             continue;
         }
         if (children[i]->modelType() == Constants::ParticleDistributionType) {
-            auto prop
-                = children[i]
-                      ->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER)
-                      .value<ComboProperty>();
+            auto prop = children[i]
+                            ->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER)
+                            .value<ComboProperty>();
             QString par_name = prop.getValue();
             if (par_name == ParticleDistributionItem::NO_SELECTION) {
                 auto grandchildren = children[i]->getItems();
@@ -120,14 +111,15 @@ std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(
 }
 
 std::unique_ptr<IInterferenceFunction>
-DomainObjectBuilder::buildInterferenceFunction(const SessionItem& item) const
+DomainObjectBuilder::buildInterferenceFunction(const SessionItem& item)
 {
     auto iffItem = dynamic_cast<const InterferenceFunctionItem*>(&item);
     Q_ASSERT(iffItem);
     return iffItem->createInterferenceFunction();
 }
 
-std::unique_ptr<Instrument> DomainObjectBuilder::buildInstrument(const InstrumentItem& instrumentItem) const
+std::unique_ptr<Instrument>
+DomainObjectBuilder::buildInstrument(const InstrumentItem& instrumentItem)
 {
     return instrumentItem.createInstrument();
 }
diff --git a/GUI/coregui/Models/DomainObjectBuilder.h b/GUI/coregui/Models/DomainObjectBuilder.h
index f0a636fa5a1..80d66ea0cd7 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.h
+++ b/GUI/coregui/Models/DomainObjectBuilder.h
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      GUI/coregui/Models/DomainObjectBuilder.h
-//! @brief     Defines class DomainObjectBuilder
+//! @brief     Defines DomainObjectBuilder namespace
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -18,24 +18,22 @@
 #include "WinDllMacros.h"
 #include <memory>
 
-class Instrument;
 class MultiLayer;
 class Layer;
+class Instrument;
 class ParticleLayout;
 class IInterferenceFunction;
-class Beam;
 class SessionItem;
 class InstrumentItem;
 
-class BA_CORE_API_ DomainObjectBuilder
+namespace DomainObjectBuilder
 {
-public:
-    std::unique_ptr<MultiLayer> buildMultiLayer(const SessionItem &multilayer_item) const;
-    std::unique_ptr<Layer> buildLayer(const SessionItem &item) const;
-    std::unique_ptr<ParticleLayout> buildParticleLayout(const SessionItem &item) const;
-    std::unique_ptr<IInterferenceFunction>
-    buildInterferenceFunction(const SessionItem &item) const;
-    std::unique_ptr<Instrument> buildInstrument(const InstrumentItem& instrumentItem) const;
+BA_CORE_API_ std::unique_ptr<MultiLayer> buildMultiLayer(const SessionItem& multilayer_item);
+BA_CORE_API_ std::unique_ptr<Layer> buildLayer(const SessionItem& item);
+BA_CORE_API_ std::unique_ptr<ParticleLayout> buildParticleLayout(const SessionItem& item);
+BA_CORE_API_ std::unique_ptr<IInterferenceFunction>
+buildInterferenceFunction(const SessionItem& item);
+BA_CORE_API_ std::unique_ptr<Instrument> buildInstrument(const InstrumentItem& instrumentItem);
 };
 
 #endif // DOMAINOBJECTBUILDER_H
diff --git a/GUI/coregui/Models/DomainSimulationBuilder.cpp b/GUI/coregui/Models/DomainSimulationBuilder.cpp
index 27005be6c0d..ec8c0de55f3 100644
--- a/GUI/coregui/Models/DomainSimulationBuilder.cpp
+++ b/GUI/coregui/Models/DomainSimulationBuilder.cpp
@@ -36,12 +36,11 @@ std::unique_ptr<Simulation> DomainSimulationBuilder::createSimulation(const Mult
                         " or InstrumentItem is not defined.");
         throw GUIHelpers::Error(message);
     }
-    DomainObjectBuilder builder;
 
     if (auto gisasInstrument = dynamic_cast<const GISASInstrumentItem*>(instrumentItem)) {
         std::unique_ptr<GISASSimulation> result(new GISASSimulation);
-        auto P_multilayer = builder.buildMultiLayer(*sampleItem);
-        auto P_instrument = builder.buildInstrument(*gisasInstrument);
+        auto P_multilayer = DomainObjectBuilder::buildMultiLayer(*sampleItem);
+        auto P_instrument = DomainObjectBuilder::buildInstrument(*gisasInstrument);
         result->setSample(*P_multilayer);
         result->setInstrument(*P_instrument);
         TransformToDomain::addDistributionParametersToSimulation(*gisasInstrument->beamItem(), result.get());
diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp
index 2a838d7e3ed..80d00e5a928 100644
--- a/GUI/coregui/Models/JobItemUtils.cpp
+++ b/GUI/coregui/Models/JobItemUtils.cpp
@@ -154,8 +154,7 @@ AxesUnits JobItemUtils::preferableGUIAxesUnits(AxesUnits default_units)
 void JobItemUtils::setIntensityItemAxesUnits(IntensityDataItem* intensityItem,
                                               const GISASInstrumentItem* instrumentItem)
 {
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*instrumentItem);
+    auto instrument = DomainObjectBuilder::buildInstrument(*instrumentItem);
     instrument->initDetector();
     setIntensityItemAxesUnits(intensityItem, instrument->getDetector());
 }
@@ -201,8 +200,7 @@ void JobItemUtils::updateAxesTitle(IntensityDataItem* intensityItem)
 void JobItemUtils::createDefaultDetectorMap(IntensityDataItem* intensityItem,
                                             const GISASInstrumentItem* instrumentItem)
 {
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*instrumentItem);
+    auto instrument = DomainObjectBuilder::buildInstrument(*instrumentItem);
     instrument->initDetector();
     AxesUnits units = instrument->getDetector()->defaultAxesUnits();
     auto detector = instrument->getDetector();
@@ -217,8 +215,7 @@ void JobItemUtils::createDefaultDetectorMap(IntensityDataItem* intensityItem,
 OutputData<double>* JobItemUtils::createDetectorMap(const GISASInstrumentItem* instrumentItem,
                                                      AxesUnits units)
 {
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*instrumentItem);
+    auto instrument = DomainObjectBuilder::buildInstrument(*instrumentItem);
     instrument->initDetector();
 
     if (units == AxesUnits::DEFAULT)
diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp
index fd05c995245..bdf54a109eb 100644
--- a/GUI/coregui/Models/JobModelFunctions.cpp
+++ b/GUI/coregui/Models/JobModelFunctions.cpp
@@ -107,8 +107,7 @@ void JobModelFunctions::cropRealData(JobItem *jobItem) {
     // adjusting real data to the size of region of interest
     IntensityDataItem *intensityItem = realData->intensityDataItem();
 
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*jobItem->instrumentItem());
+    auto instrument = DomainObjectBuilder::buildInstrument(*jobItem->instrumentItem());
     instrument->initDetector();
 
     AxesUnits requested_units
diff --git a/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp b/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp
index ce6f4cfc195..d083af21877 100644
--- a/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp
+++ b/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp
@@ -162,9 +162,8 @@ QString PySampleWidget::generateCodeSnippet()
     QString result;
 
     for(const MultiLayerItem* sampleItem : m_sampleModel->topItems<MultiLayerItem>()) {
-        DomainObjectBuilder builder;
         try {
-            auto multilayer = builder.buildMultiLayer(*sampleItem);
+            auto multilayer = DomainObjectBuilder::buildMultiLayer(*sampleItem);
             if (!result.isEmpty())
                 result.append("\n");
             result.append(QString::fromStdString(
-- 
GitLab