QGIS API Documentation 3.99.0-Master (357b655ed83)
Loading...
Searching...
No Matches
qgsalgorithmraiseexception.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsalgorithmraiseexception.cpp
3 ---------------------
4 begin : February 2020
5 copyright : (C) 2020 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19
20#include <QString>
21
22using namespace Qt::StringLiterals;
23
25
26//
27// QgsRaiseExceptionAlgorithm
28//
29
30QString QgsRaiseExceptionAlgorithm::name() const
31{
32 return u"raiseexception"_s;
33}
34
35Qgis::ProcessingAlgorithmFlags QgsRaiseExceptionAlgorithm::flags() const
36{
38}
39
40QString QgsRaiseExceptionAlgorithm::displayName() const
41{
42 return QObject::tr( "Raise exception" );
43}
44
45QStringList QgsRaiseExceptionAlgorithm::tags() const
46{
47 return QObject::tr( "abort,warn,error,cancel" ).split( ',' );
48}
49
50QString QgsRaiseExceptionAlgorithm::group() const
51{
52 return QObject::tr( "Modeler tools" );
53}
54
55QString QgsRaiseExceptionAlgorithm::groupId() const
56{
57 return u"modelertools"_s;
58}
59
60QString QgsRaiseExceptionAlgorithm::shortHelpString() const
61{
62 return QObject::tr( "This algorithm raises an exception and cancels a model's execution.\n\n"
63 "The exception message can be customized, and optionally an expression based condition "
64 "can be specified. If an expression condition is used, then the exception will only "
65 "be raised if the expression result is true. A false result indicates that no exception "
66 "will be raised, and the model execution can continue uninterrupted." );
67}
68
69QString QgsRaiseExceptionAlgorithm::shortDescription() const
70{
71 return QObject::tr( "Raises an exception and cancels a model's execution." );
72}
73
74QgsRaiseExceptionAlgorithm *QgsRaiseExceptionAlgorithm::createInstance() const
75{
76 return new QgsRaiseExceptionAlgorithm();
77}
78
79void QgsRaiseExceptionAlgorithm::initAlgorithm( const QVariantMap & )
80{
81 addParameter( new QgsProcessingParameterString( u"MESSAGE"_s, QObject::tr( "Error message" ) ) );
82 addParameter( new QgsProcessingParameterExpression( u"CONDITION"_s, QObject::tr( "Condition" ), QVariant(), QString(), true ) );
83}
84
85QVariantMap QgsRaiseExceptionAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
86{
87 const QString expression = parameterAsExpression( parameters, u"CONDITION"_s, context );
88 if ( !expression.isEmpty() )
89 {
90 const QgsExpressionContext expContext = createExpressionContext( parameters, context );
91 QgsExpression exp( expression );
92 if ( exp.hasParserError() )
93 {
94 throw QgsProcessingException( QObject::tr( "Error parsing condition expression: %1" ).arg( exp.parserErrorString() ) );
95 }
96 if ( !exp.evaluate( &expContext ).toBool() )
97 return QVariantMap();
98 }
99
100 const QString error = parameterAsString( parameters, u"MESSAGE"_s, context );
101 throw QgsProcessingException( error );
102}
103
104
105//
106// QgsRaiseWarningAlgorithm
107//
108
109QString QgsRaiseWarningAlgorithm::name() const
110{
111 return u"raisewarning"_s;
112}
113
114Qgis::ProcessingAlgorithmFlags QgsRaiseWarningAlgorithm::flags() const
115{
117}
118
119QString QgsRaiseWarningAlgorithm::displayName() const
120{
121 return QObject::tr( "Raise warning" );
122}
123
124QStringList QgsRaiseWarningAlgorithm::tags() const
125{
126 return QObject::tr( "abort,warn,error,cancel" ).split( ',' );
127}
128
129QString QgsRaiseWarningAlgorithm::group() const
130{
131 return QObject::tr( "Modeler tools" );
132}
133
134QString QgsRaiseWarningAlgorithm::groupId() const
135{
136 return u"modelertools"_s;
137}
138
139QString QgsRaiseWarningAlgorithm::shortHelpString() const
140{
141 return QObject::tr( "This algorithm raises a warning message in the log.\n\n"
142 "The warning message can be customized, and optionally an expression based condition "
143 "can be specified. If an expression condition is used, then the warning will only "
144 "be logged if the expression result is true. A false result indicates that no warning "
145 "will be logged." );
146}
147
148QString QgsRaiseWarningAlgorithm::shortDescription() const
149{
150 return QObject::tr( "Raises an warning message." );
151}
152
153QgsRaiseWarningAlgorithm *QgsRaiseWarningAlgorithm::createInstance() const
154{
155 return new QgsRaiseWarningAlgorithm();
156}
157
158void QgsRaiseWarningAlgorithm::initAlgorithm( const QVariantMap & )
159{
160 addParameter( new QgsProcessingParameterString( u"MESSAGE"_s, QObject::tr( "Warning message" ) ) );
161 addParameter( new QgsProcessingParameterExpression( u"CONDITION"_s, QObject::tr( "Condition" ), QVariant(), QString(), true ) );
162}
163
164QVariantMap QgsRaiseWarningAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
165{
166 const QString expression = parameterAsExpression( parameters, u"CONDITION"_s, context );
167 if ( !expression.isEmpty() )
168 {
169 const QgsExpressionContext expContext = createExpressionContext( parameters, context );
170 QgsExpression exp( expression );
171 if ( exp.hasParserError() )
172 {
173 throw QgsProcessingException( QObject::tr( "Error parsing condition expression: %1" ).arg( exp.parserErrorString() ) );
174 }
175 if ( !exp.evaluate( &expContext ).toBool() )
176 return QVariantMap();
177 }
178
179 const QString warning = parameterAsString( parameters, u"MESSAGE"_s, context );
180 feedback->pushWarning( warning );
181 return QVariantMap();
182}
183
184
185//
186// QgsRaiseMessageAlgorithm
187//
188
189QString QgsRaiseMessageAlgorithm::name() const
190{
191 return u"raisemessage"_s;
192}
193
194Qgis::ProcessingAlgorithmFlags QgsRaiseMessageAlgorithm::flags() const
195{
197}
198
199QString QgsRaiseMessageAlgorithm::displayName() const
200{
201 return QObject::tr( "Raise message" );
202}
203
204QStringList QgsRaiseMessageAlgorithm::tags() const
205{
206 return QObject::tr( "information" ).split( ',' );
207}
208
209QString QgsRaiseMessageAlgorithm::group() const
210{
211 return QObject::tr( "Modeler tools" );
212}
213
214QString QgsRaiseMessageAlgorithm::groupId() const
215{
216 return u"modelertools"_s;
217}
218
219QString QgsRaiseMessageAlgorithm::shortHelpString() const
220{
221 return QObject::tr( "This algorithm raises an information message in the log.\n\n"
222 "The message can be customized, and optionally an expression based condition "
223 "can be specified. If an expression condition is used, then the message will only "
224 "be logged if the expression result is true. A false result indicates that no message "
225 "will be logged." );
226}
227
228QString QgsRaiseMessageAlgorithm::shortDescription() const
229{
230 return QObject::tr( "Raises an information message." );
231}
232
233QgsRaiseMessageAlgorithm *QgsRaiseMessageAlgorithm::createInstance() const
234{
235 return new QgsRaiseMessageAlgorithm();
236}
237
238void QgsRaiseMessageAlgorithm::initAlgorithm( const QVariantMap & )
239{
240 addParameter( new QgsProcessingParameterString( u"MESSAGE"_s, QObject::tr( "Information message" ) ) );
241 addParameter( new QgsProcessingParameterExpression( u"CONDITION"_s, QObject::tr( "Condition" ), QVariant(), QString(), true ) );
242}
243
244QVariantMap QgsRaiseMessageAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
245{
246 const QString expression = parameterAsExpression( parameters, u"CONDITION"_s, context );
247 if ( !expression.isEmpty() )
248 {
249 const QgsExpressionContext expContext = createExpressionContext( parameters, context );
250 QgsExpression exp( expression );
251 if ( exp.hasParserError() )
252 {
253 throw QgsProcessingException( QObject::tr( "Error parsing condition expression: %1" ).arg( exp.parserErrorString() ) );
254 }
255 if ( !exp.evaluate( &expContext ).toBool() )
256 return QVariantMap();
257 }
258
259 const QString info = parameterAsString( parameters, u"MESSAGE"_s, context );
260 feedback->pushInfo( info );
261 return QVariantMap();
262}
263
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
Definition qgis.h:3680
@ HideFromToolbox
Algorithm should be hidden from the toolbox.
Definition qgis.h:3654
@ SkipGenericModelLogging
When running as part of a model, the generic algorithm setup and results logging should be skipped.
Definition qgis.h:3665
@ CustomException
Algorithm raises custom exception notices, don't use the standard ones.
Definition qgis.h:3663
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Handles parsing and evaluation of expressions (formerly called "search strings").
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
virtual void pushWarning(const QString &warning)
Pushes a warning informational message from the algorithm.
An expression parameter for processing algorithms.
A string parameter for processing algorithms.