1 /*============================================================================
3 The Medical Imaging Interaction Toolkit (MITK)
5 Copyright (c) German Cancer Research Center (DKFZ)
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
11 ============================================================================*/
13 #include <mitkModelFitProviderBase.h>
14 #include <mitkExceptionMacro.h>
16 #include <mitkExtractTimeGrid.h>
17 #include <mitkModelFitInfo.h>
19 #include <usGetModuleContext.h>
20 #include <usModuleContext.h>
21 #include <usPrototypeServiceFactory.h>
25 template<class TModelFactory>
26 class ModelFitProviderBase<TModelFactory>::Impl
29 Impl() : m_Ranking(0), m_ReferenceFactory(TModelFactory::New())
33 Impl(const Impl &other) = default;
35 void SetRanking(int ranking)
40 int GetRanking() const
45 us::ServiceRegistration<IModelFitProvider> m_Reg;
47 using ModelFactoryType = TModelFactory;
49 typename ModelFactoryType::Pointer m_ReferenceFactory;
52 template<class TModelFactory>
53 ModelFitProviderBase<TModelFactory>::ModelFitProviderBase() : d()
57 template<class TModelFactory>
58 ModelFitProviderBase<TModelFactory>::~ModelFitProviderBase()
63 template<class TModelFactory>
64 ModelFitProviderBase<TModelFactory>::ModelFitProviderBase(const ModelFitProviderBase &other) : IModelFitProvider(), d(new Impl(*other.d.get()))
68 template<class TModelFactory>
69 itk::SmartPointer<ModelFactoryBase>
70 ModelFitProviderBase<TModelFactory>::GenerateFactory() const
72 return TModelFactory::New().GetPointer();
75 template<class TModelFactory>
76 ModelBase::TimeGridType
77 ModelFitProviderBase<TModelFactory>::GetVariableGrid(const modelFit::ModelFitInfo* fitInfo) const
81 mitkThrow() << "Error. Cannot get variable grid for model. Passed model fit info is null.";
84 if (!fitInfo->inputImage.IsNotNull())
86 mitkThrow() << "Error. Cannot get variable grid for model. Passed model fit info has no input image.";
88 return mitk::ExtractTimeGrid(fitInfo->inputImage);
92 template<class TModelFactory>
93 us::ServiceRegistration<IModelFitProvider>
94 ModelFitProviderBase<TModelFactory>::RegisterService(us::ModuleContext *context)
99 if (context == nullptr)
101 context = us::GetModuleContext();
106 us::ServiceProperties props = this->GetServiceProperties();
107 d->m_Reg = context->RegisterService<IModelFitProvider>(this, props);
111 template<class TModelFactory>
113 ModelFitProviderBase<TModelFactory>::UnregisterService()
117 d->m_Reg.Unregister();
119 catch (const std::exception &)
124 template<class TModelFactory>
125 us::ServiceProperties
126 ModelFitProviderBase<TModelFactory>::GetServiceProperties() const
128 us::ServiceProperties result;
130 result[IModelFitProvider::PROP_MODEL_CLASS_ID()] = this->d->m_ReferenceFactory->GetClassID();
131 result[IModelFitProvider::PROP_MODEL_TYPE()] = this->d->m_ReferenceFactory->GetModelType();
132 result[us::ServiceConstants::SERVICE_RANKING()] = this->GetRanking();
136 template<class TModelFactory>
138 ModelFitProviderBase<TModelFactory>::SetRanking(int ranking) { d->SetRanking(ranking); }
140 template<class TModelFactory>
142 ModelFitProviderBase<TModelFactory>::GetRanking() const { return d->GetRanking(); }