MLAlgorithmModule
Loading...
Searching...
No Matches
mlAlgorithmModule.h
Go to the documentation of this file.
1// Copyright (c) Fraunhofer MEVIS, Germany. All rights reserved.
2// **InsertLicense** code
3//------------------------------------------------------------------------------
4
5#pragma once
6
8#include <mlModuleIncludes.h>
9#include <FMEException/Exception.h>
10#include <FMEThirdPartyWarningsDisable.h>
11#include <string>
12#include <FMEThirdPartyWarningsRestore.h>
13
14ML_START_NAMESPACE
15
31 public:
37 AlgorithmModule(int numInputImages, int numOutputImages);
38 ~AlgorithmModule() override;
39
51 void handleNotification(Field* field) override;
52
59 void activateAttachments() override;
60
70 void calculateOutputImageProperties(int outputIndex, PagedImage* outputImage) override;
71
72 protected:
84
91 class ML_ALGORITHM_MODULE_EXPORT Error : public fme::Exception {
92 public:
93 Error(const AlgorithmModule::EStatusCode statusCode, const std::string& message);
95 const std::string& getMessage() const;
96
97 private:
99 std::string _message;
100 };
101
107 public:
108 InputObjectError(const std::string& message);
109 ~InputObjectError() override;
110 };
111
117 public:
118 InputParameterError(const std::string& message);
119 ~InputParameterError() override;
120 };
121
128 public:
129 InternalError(const std::string& message);
130 ~InternalError() override;
131 };
132
136 virtual void validateInput() = 0;
137
141 virtual void update() = 0;
142
144 virtual void clear() = 0;
145
151 virtual void setOutputImageProperties(int outputIndex, PagedImage* outputImage);
152
157 bool _isInputField(const Field* field) const;
158
159 private:
160 enum EOnInputChangeBehavior {
161 OICB_Update = 0,
162 OICB_Clear
163 };
164
165 void _addUpdateControlFields();
166 void _addStatusFields();
167 void _addStatusCodeField();
168 bool _isFieldUpdate(Field* field) const;
169 bool _isFieldOnInputChangeBehavior(Field* field) const;
170 bool _shouldUpdateOnInputChange() const;
171 bool _isFieldClear(Field* field) const;
172 bool _hasNamePrefixIn(const std::string& name) const;
173 bool _hasNamePrefixInput(const std::string& name) const;
174 void _handleInputFieldNotification();
175 void _initiateUpdate();
176 void _validateInputAndUpdate();
177 void _handleErrorDuringUpdate(const AlgorithmModule::Error& error);
178 bool _shouldClearOnFailedUpdate();
179 void _setStatusCodeAndMessageFieldValues(const EStatusCode code, const std::string& message);
180 void _clearOutput();
181 void _initiateClear();
182 void _tryToSetOutputImageProperties(int outputIndex, PagedImage* outputImage);
183 void _validateOutputImageValidity(const PagedImage* const outputImage) const;
184 void _handleErrorDuringSetOutputImageProperties(PagedImage* outputImage, const AlgorithmModule::Error& error);
185 void _setImageInvalid(PagedImage* const image);
186
187 bool _hasValidatedInputAndInitiatedUpdate;
188 bool _wasOutputCleared;
189 bool _didSetOutputImagePropertiesFail;
190
192 TypedEnumField<EOnInputChangeBehavior>* onInputChangeBehaviorField;
193
195 NotifyField* updateField;
196
198 NotifyField* clearField;
199
205 NotifyField* updateDoneField;
206
208 TypedEnumField<EStatusCode>* statusCodeField;
209
211 StringField* statusMessageField;
212
214 BoolField* hasValidOutputField;
215
219 BoolField* doNotClearOnFailedUpdateField;
220
222 ML_ABSTRACT_MODULE_CLASS_HEADER(AlgorithmModule)
223};
224
225ML_END_NAMESPACE
#define ML_ALGORITHM_MODULE_EXPORT
Definition MLAlgorithmModuleSystem.h:12
Data structure to indicate an error within an AlgorithmModule derivative's implementation of interfac...
Definition mlAlgorithmModule.h:91
const std::string & getMessage() const
Definition mlAlgorithmModule.cpp:19
Error(const AlgorithmModule::EStatusCode statusCode, const std::string &message)
Definition mlAlgorithmModule.cpp:9
AlgorithmModule::EStatusCode getStatusCode() const
Definition mlAlgorithmModule.cpp:15
InputObjectError(const std::string &message)
Definition mlAlgorithmModule.cpp:24
InputParameterError(const std::string &message)
Definition mlAlgorithmModule.cpp:33
InternalError(const std::string &message)
Definition mlAlgorithmModule.cpp:41
ML-Module base class to simplify development of modules encapsulating an algorithm with dedicated inp...
Definition mlAlgorithmModule.h:30
virtual void validateInput()=0
Validates the values of module's input fields (object and parameter fields).
virtual void setOutputImageProperties(int outputIndex, PagedImage *outputImage)
Sets properties of the output image at output outputIndex.
Definition mlAlgorithmModule.cpp:239
bool _isInputField(const Field *field) const
Returns true if the field is treated as an input field that changes the module parameterization and r...
Definition mlAlgorithmModule.cpp:129
void handleNotification(Field *field) override
Never overwrite this method in derivative!
Definition mlAlgorithmModule.cpp:100
AlgorithmModule(int numInputImages, int numOutputImages)
Forwards given parameters to base class constructor.
Definition mlAlgorithmModule.cpp:53
virtual void update()=0
Executes the algorithm and updates the values of module's output fields with results.
virtual void clear()=0
Clears the values of module's output fields (object and parameter fields).
void calculateOutputImageProperties(int outputIndex, PagedImage *outputImage) override
Never overwrite this method in derivative!
Definition mlAlgorithmModule.cpp:213
void activateAttachments() override
Never overwrite this method in derivative!
Definition mlAlgorithmModule.cpp:94
EStatusCode
Contains possible values of field statusCode.
Definition mlAlgorithmModule.h:74
@ SC_OK
No error occurred.
Definition mlAlgorithmModule.h:76
@ SC_ERROR_INPUT_PARAMETER
An invalid input parameter caused abort of update.
Definition mlAlgorithmModule.h:80
@ SC_ERROR_INTERNAL
An internal error caused abort of update.
Definition mlAlgorithmModule.h:82
@ SC_ERROR_INPUT_OBJECT
An invalid input object caused abort of update.
Definition mlAlgorithmModule.h:78