QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
qgsprocessingparameterfieldmap.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsprocessingparameterfieldmap.cpp
3  -------------------------
4  begin : June 2020
5  copyright : (C) 2020 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
17 
18 #include "qgsvectorlayer.h"
19 
20 
21 QgsProcessingParameterFieldMapping::QgsProcessingParameterFieldMapping( const QString &name, const QString &description, const QString &parentLayerParameterName, bool optional )
22  : QgsProcessingParameterDefinition( name, description, QVariant(), optional )
23  , mParentLayerParameterName( parentLayerParameterName )
24 {
25 }
26 
28 {
29  return new QgsProcessingParameterFieldMapping( *this );
30 }
31 
33 {
34  return typeName();
35 }
36 
38 {
39  if ( !input.isValid() )
40  return mFlags & FlagOptional;
41 
42  if ( input.type() != QVariant::List )
43  return false;
44 
45  const QVariantList inputList = input.toList();
46  for ( const QVariant &inputItem : inputList )
47  {
48  if ( inputItem.type() != QVariant::Map )
49  return false;
50 
51  const QVariantMap inputItemMap = inputItem.toMap();
52 
53  if ( !inputItemMap.contains( "name" ) )
54  return false;
55  if ( !inputItemMap.contains( "type" ) )
56  return false;
57  if ( !inputItemMap.contains( "expression" ) )
58  return false;
59  }
60 
61  return true;
62 }
63 
65 {
67 }
68 
70 {
71  switch ( outputType )
72  {
74  {
75  QString code = QStringLiteral( "QgsProcessingParameterFieldMapping('%1', %2" )
77  if ( !mParentLayerParameterName.isEmpty() )
78  code += QStringLiteral( ", parentLayerParameterName=%1" ).arg( QgsProcessingUtils::stringToPythonLiteral( mParentLayerParameterName ) );
79 
80  if ( mFlags & FlagOptional )
81  code += QLatin1String( ", optional=True" );
82  code += ')';
83  return code;
84  }
85  }
86  return QString();
87 }
88 
90 {
92  map.insert( QStringLiteral( "parent_layer" ), mParentLayerParameterName );
93  return map;
94 }
95 
97 {
99  mParentLayerParameterName = map.value( QStringLiteral( "parent_layer" ) ).toString();
100  return true;
101 }
102 
104 {
105  QStringList depends;
106  if ( !mParentLayerParameterName.isEmpty() )
107  depends << mParentLayerParameterName;
108  return depends;
109 }
110 
112 {
113  return mParentLayerParameterName;
114 }
115 
117 {
118  mParentLayerParameterName = name;
119 }
120 
QgsProcessingParameterFieldMapping::asPythonString
QString asPythonString(QgsProcessing::PythonOutputType outputType=QgsProcessing::PythonQgsProcessingAlgorithmSubclass) const override
Returns the parameter definition as a Python command which can be used within a Python Processing scr...
Definition: qgsprocessingparameterfieldmap.cpp:69
QgsProcessingParameterFieldMapping::type
QString type() const override
Unique parameter type name.
Definition: qgsprocessingparameterfieldmap.cpp:32
QgsProcessingParameterDefinition::toVariantMap
virtual QVariantMap toVariantMap() const
Saves this parameter to a QVariantMap.
Definition: qgsprocessingparameters.cpp:2895
QgsProcessingParameterFieldMapping::valueAsPythonString
QString valueAsPythonString(const QVariant &value, QgsProcessingContext &context) const override
Returns a string version of the parameter input value, which is suitable for use as an input paramete...
Definition: qgsprocessingparameterfieldmap.cpp:64
qgsprocessingparameterfieldmap.h
QgsProcessingParameterDefinition::description
QString description() const
Returns the description for the parameter.
Definition: qgsprocessingparameters.h:502
QgsProcessingParameterDefinition
Base class for the definition of processing parameters.
Definition: qgsprocessingparameters.h:334
QgsProcessingParameterFieldMapping::parentLayerParameterName
QString parentLayerParameterName() const
Returns the name of the parent layer parameter, or an empty string if this is not set.
Definition: qgsprocessingparameterfieldmap.cpp:111
QgsProcessingUtils::stringToPythonLiteral
static QString stringToPythonLiteral(const QString &string)
Converts a string to a Python string literal.
Definition: qgsprocessingutils.cpp:701
QgsProcessing::PythonQgsProcessingAlgorithmSubclass
@ PythonQgsProcessingAlgorithmSubclass
Full Python QgsProcessingAlgorithm subclass.
Definition: qgsprocessing.h:64
QgsProcessingParameterDefinition::fromVariantMap
virtual bool fromVariantMap(const QVariantMap &map)
Restores this parameter to a QVariantMap.
Definition: qgsprocessingparameters.cpp:2909
QgsProcessingParameterDefinition::mFlags
Flags mFlags
Parameter flags.
Definition: qgsprocessingparameters.h:861
QgsProcessingContext
Contains information about the context in which a processing algorithm is executed.
Definition: qgsprocessingcontext.h:46
QgsProcessingParameterDefinition::name
QString name() const
Returns the name of the parameter.
Definition: qgsprocessingparameters.h:488
QgsProcessingParameterFieldMapping::fromVariantMap
bool fromVariantMap(const QVariantMap &map) override
Restores this parameter to a QVariantMap.
Definition: qgsprocessingparameterfieldmap.cpp:96
QgsProcessingParameterFieldMapping::checkValueIsAcceptable
bool checkValueIsAcceptable(const QVariant &input, QgsProcessingContext *context=nullptr) const override
Checks whether the specified input value is acceptable for the parameter.
Definition: qgsprocessingparameterfieldmap.cpp:37
QgsProcessingParameterFieldMapping::dependsOnOtherParameters
QStringList dependsOnOtherParameters() const override
Returns a list of other parameter names on which this parameter is dependent (e.g.
Definition: qgsprocessingparameterfieldmap.cpp:103
QgsProcessingParameterFieldMapping::setParentLayerParameterName
void setParentLayerParameterName(const QString &name)
Sets the name of the parent layer parameter.
Definition: qgsprocessingparameterfieldmap.cpp:116
QgsProcessingParameterFieldMapping::QgsProcessingParameterFieldMapping
QgsProcessingParameterFieldMapping(const QString &name, const QString &description=QString(), const QString &parentLayerParameterName=QString(), bool optional=false)
Constructor for QgsProcessingParameterFieldMapping.
Definition: qgsprocessingparameterfieldmap.cpp:21
qgsvectorlayer.h
QgsProcessingParameterFieldMapping::typeName
static QString typeName()
Returns the type name for the parameter class.
Definition: qgsprocessingparameterfieldmap.h:60
QgsProcessingParameterFieldMapping::toVariantMap
QVariantMap toVariantMap() const override
Saves this parameter to a QVariantMap.
Definition: qgsprocessingparameterfieldmap.cpp:89
QgsProcessingUtils::variantToPythonLiteral
static QString variantToPythonLiteral(const QVariant &value)
Converts a variant to a Python literal.
Definition: qgsprocessingutils.cpp:599
QgsProcessingParameterDefinition::FlagOptional
@ FlagOptional
Parameter is optional.
Definition: qgsprocessingparameters.h:453
QgsProcessing::PythonOutputType
PythonOutputType
Available Python output types.
Definition: qgsprocessing.h:62
QgsProcessingParameterFieldMapping::clone
QgsProcessingParameterDefinition * clone() const override
Creates a clone of the parameter definition.
Definition: qgsprocessingparameterfieldmap.cpp:27