QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
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'" ).arg( name(), description() );
76  if ( !mParentLayerParameterName.isEmpty() )
77  code += QStringLiteral( ", parentLayerParameterName=%1" ).arg( QgsProcessingUtils::stringToPythonLiteral( mParentLayerParameterName ) );
78 
79  if ( mFlags & FlagOptional )
80  code += QLatin1String( ", optional=True" );
81  code += ')';
82  return code;
83  }
84  }
85  return QString();
86 }
87 
89 {
91  map.insert( QStringLiteral( "parent_layer" ), mParentLayerParameterName );
92  return map;
93 }
94 
96 {
98  mParentLayerParameterName = map.value( QStringLiteral( "parent_layer" ) ).toString();
99  return true;
100 }
101 
103 {
104  QStringList depends;
105  if ( !mParentLayerParameterName.isEmpty() )
106  depends << mParentLayerParameterName;
107  return depends;
108 }
109 
111 {
112  return mParentLayerParameterName;
113 }
114 
116 {
117  mParentLayerParameterName = name;
118 }
119 
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:2357
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:474
QgsProcessingParameterDefinition
Base class for the definition of processing parameters.
Definition: qgsprocessingparameters.h:331
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:110
QgsProcessingUtils::stringToPythonLiteral
static QString stringToPythonLiteral(const QString &string)
Converts a string to a Python string literal.
Definition: qgsprocessingutils.cpp:611
QgsProcessing::PythonQgsProcessingAlgorithmSubclass
@ PythonQgsProcessingAlgorithmSubclass
Full Python QgsProcessingAlgorithm subclass.
Definition: qgsprocessing.h:60
QgsProcessingParameterDefinition::fromVariantMap
virtual bool fromVariantMap(const QVariantMap &map)
Restores this parameter to a QVariantMap.
Definition: qgsprocessingparameters.cpp:2370
QgsProcessingParameterDefinition::mFlags
Flags mFlags
Parameter flags.
Definition: qgsprocessingparameters.h:733
QgsProcessingContext
Contains information about the context in which a processing algorithm is executed.
Definition: qgsprocessingcontext.h:44
QgsProcessingParameterDefinition::name
QString name() const
Returns the name of the parameter.
Definition: qgsprocessingparameters.h:460
QgsProcessingParameterFieldMapping::fromVariantMap
bool fromVariantMap(const QVariantMap &map) override
Restores this parameter to a QVariantMap.
Definition: qgsprocessingparameterfieldmap.cpp:95
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:102
QgsProcessingParameterFieldMapping::setParentLayerParameterName
void setParentLayerParameterName(const QString &name)
Sets the name of the parent layer parameter.
Definition: qgsprocessingparameterfieldmap.cpp:115
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:47
QgsProcessingParameterFieldMapping::toVariantMap
QVariantMap toVariantMap() const override
Saves this parameter to a QVariantMap.
Definition: qgsprocessingparameterfieldmap.cpp:88
QgsProcessingUtils::variantToPythonLiteral
static QString variantToPythonLiteral(const QVariant &value)
Converts a variant to a Python literal.
Definition: qgsprocessingutils.cpp:521
QgsProcessingParameterDefinition::FlagOptional
@ FlagOptional
Parameter is optional.
Definition: qgsprocessingparameters.h:425
QgsProcessing::PythonOutputType
PythonOutputType
Available Python output types.
Definition: qgsprocessing.h:59
QgsProcessingParameterFieldMapping::clone
QgsProcessingParameterDefinition * clone() const override
Creates a clone of the parameter definition.
Definition: qgsprocessingparameterfieldmap.cpp:27