Branch data Line data Source code
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 : : 18 : : #include "qgsalgorithmraiseexception.h" 19 : : 20 : : ///@cond PRIVATE 21 : : 22 : : // 23 : : // QgsRaiseExceptionAlgorithm 24 : : // 25 : : 26 : 0 : QString QgsRaiseExceptionAlgorithm::name() const 27 : : { 28 : 0 : return QStringLiteral( "raiseexception" ); 29 : : } 30 : : 31 : 0 : QgsProcessingAlgorithm::Flags QgsRaiseExceptionAlgorithm::flags() const 32 : : { 33 : 0 : return QgsProcessingAlgorithm::flags() | FlagHideFromToolbox | FlagCustomException | FlagSkipGenericModelLogging; 34 : : } 35 : : 36 : 0 : QString QgsRaiseExceptionAlgorithm::displayName() const 37 : : { 38 : 0 : return QObject::tr( "Raise exception" ); 39 : : } 40 : : 41 : 0 : QStringList QgsRaiseExceptionAlgorithm::tags() const 42 : : { 43 : 0 : return QObject::tr( "abort,warn,error,cancel" ).split( ',' ); 44 : 0 : } 45 : : 46 : 0 : QString QgsRaiseExceptionAlgorithm::group() const 47 : : { 48 : 0 : return QObject::tr( "Modeler tools" ); 49 : : } 50 : : 51 : 0 : QString QgsRaiseExceptionAlgorithm::groupId() const 52 : : { 53 : 0 : return QStringLiteral( "modelertools" ); 54 : : } 55 : : 56 : 0 : QString QgsRaiseExceptionAlgorithm::shortHelpString() const 57 : : { 58 : 0 : return QObject::tr( "This algorithm raises an exception and cancels a model's execution.\n\n" 59 : : "The exception message can be customized, and optionally an expression based condition " 60 : : "can be specified. If an expression condition is used, then the exception will only " 61 : : "be raised if the expression result is true. A false result indicates that no exception " 62 : : "will be raised, and the model execution can continue uninterrupted." ); 63 : : } 64 : : 65 : 0 : QString QgsRaiseExceptionAlgorithm::shortDescription() const 66 : : { 67 : 0 : return QObject::tr( "Raises an exception and cancels a model's execution." ); 68 : : } 69 : : 70 : 0 : QgsRaiseExceptionAlgorithm *QgsRaiseExceptionAlgorithm::createInstance() const 71 : : { 72 : 0 : return new QgsRaiseExceptionAlgorithm(); 73 : : } 74 : : 75 : 0 : void QgsRaiseExceptionAlgorithm::initAlgorithm( const QVariantMap & ) 76 : : { 77 : 0 : addParameter( new QgsProcessingParameterString( QStringLiteral( "MESSAGE" ), QObject::tr( "Error message" ) ) ); 78 : 0 : addParameter( new QgsProcessingParameterExpression( QStringLiteral( "CONDITION" ), QObject::tr( "Condition" ), QVariant(), QString(), true ) ); 79 : 0 : } 80 : : 81 : 0 : QVariantMap QgsRaiseExceptionAlgorithm::processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback * ) 82 : : { 83 : 0 : const QString expression = parameterAsExpression( parameters, QStringLiteral( "CONDITION" ), context ); 84 : 0 : if ( !expression.isEmpty() ) 85 : : { 86 : 0 : QgsExpressionContext expContext = createExpressionContext( parameters, context ); 87 : 0 : QgsExpression exp( expression ); 88 : 0 : if ( exp.hasParserError() ) 89 : : { 90 : 0 : throw QgsProcessingException( QObject::tr( "Error parsing condition expression: %1" ).arg( exp.parserErrorString() ) ); 91 : : } 92 : 0 : if ( !exp.evaluate( &expContext ).toBool() ) 93 : 0 : return QVariantMap(); 94 : 0 : } 95 : : 96 : 0 : const QString error = parameterAsString( parameters, QStringLiteral( "MESSAGE" ), context ); 97 : 0 : throw QgsProcessingException( error ); 98 : 0 : } 99 : : 100 : : 101 : : // 102 : : // QgsRaiseWarningAlgorithm 103 : : // 104 : : 105 : 0 : QString QgsRaiseWarningAlgorithm::name() const 106 : : { 107 : 0 : return QStringLiteral( "raisewarning" ); 108 : : } 109 : : 110 : 0 : QgsProcessingAlgorithm::Flags QgsRaiseWarningAlgorithm::flags() const 111 : : { 112 : 0 : return QgsProcessingAlgorithm::flags() | FlagHideFromToolbox | FlagSkipGenericModelLogging; 113 : : } 114 : : 115 : 0 : QString QgsRaiseWarningAlgorithm::displayName() const 116 : : { 117 : 0 : return QObject::tr( "Raise warning" ); 118 : : } 119 : : 120 : 0 : QStringList QgsRaiseWarningAlgorithm::tags() const 121 : : { 122 : 0 : return QObject::tr( "abort,warn,error,cancel" ).split( ',' ); 123 : 0 : } 124 : : 125 : 0 : QString QgsRaiseWarningAlgorithm::group() const 126 : : { 127 : 0 : return QObject::tr( "Modeler tools" ); 128 : : } 129 : : 130 : 0 : QString QgsRaiseWarningAlgorithm::groupId() const 131 : : { 132 : 0 : return QStringLiteral( "modelertools" ); 133 : : } 134 : : 135 : 0 : QString QgsRaiseWarningAlgorithm::shortHelpString() const 136 : : { 137 : 0 : return QObject::tr( "This algorithm raises a warning message in the log.\n\n" 138 : : "The warning message can be customized, and optionally an expression based condition " 139 : : "can be specified. If an expression condition is used, then the warning will only " 140 : : "be logged if the expression result is true. A false result indicates that no warning " 141 : : "will be logged." ); 142 : : } 143 : : 144 : 0 : QString QgsRaiseWarningAlgorithm::shortDescription() const 145 : : { 146 : 0 : return QObject::tr( "Raises an warning message." ); 147 : : } 148 : : 149 : 0 : QgsRaiseWarningAlgorithm *QgsRaiseWarningAlgorithm::createInstance() const 150 : : { 151 : 0 : return new QgsRaiseWarningAlgorithm(); 152 : : } 153 : : 154 : 0 : void QgsRaiseWarningAlgorithm::initAlgorithm( const QVariantMap & ) 155 : : { 156 : 0 : addParameter( new QgsProcessingParameterString( QStringLiteral( "MESSAGE" ), QObject::tr( "Warning message" ) ) ); 157 : 0 : addParameter( new QgsProcessingParameterExpression( QStringLiteral( "CONDITION" ), QObject::tr( "Condition" ), QVariant(), QString(), true ) ); 158 : 0 : } 159 : : 160 : 0 : QVariantMap QgsRaiseWarningAlgorithm::processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) 161 : : { 162 : 0 : const QString expression = parameterAsExpression( parameters, QStringLiteral( "CONDITION" ), context ); 163 : 0 : if ( !expression.isEmpty() ) 164 : : { 165 : 0 : QgsExpressionContext expContext = createExpressionContext( parameters, context ); 166 : 0 : QgsExpression exp( expression ); 167 : 0 : if ( exp.hasParserError() ) 168 : : { 169 : 0 : throw QgsProcessingException( QObject::tr( "Error parsing condition expression: %1" ).arg( exp.parserErrorString() ) ); 170 : : } 171 : 0 : if ( !exp.evaluate( &expContext ).toBool() ) 172 : 0 : return QVariantMap(); 173 : 0 : } 174 : : 175 : 0 : const QString warning = parameterAsString( parameters, QStringLiteral( "MESSAGE" ), context ); 176 : 0 : feedback->reportError( warning ); 177 : 0 : return QVariantMap(); 178 : 0 : } 179 : : 180 : : ///@endcond