QGIS API Documentation 3.29.0-Master (006c3c0232)
qgsprocessingregistry.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsprocessingregistry.cpp
3 --------------------------
4 begin : December 2016
5 copyright : (C) 2016 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#include "qgsvectorfilewriter.h"
27
29 : QObject( parent )
30{
69 addParameterType( new QgsProcessingParameterTypeVectorTileWriterLayers() );
70 addParameterType( new QgsProcessingParameterTypeFieldMapping() );
71 addParameterType( new QgsProcessingParameterTypeAggregate() );
72 addParameterType( new QgsProcessingParameterTypeTinInputLayers() );
73 addParameterType( new QgsProcessingParameterTypeDxfLayers() );
74 addParameterType( new QgsProcessingParameterTypeMeshDatasetGroups() );
75 addParameterType( new QgsProcessingParameterTypeMeshDatasetTime() );
79}
80
82{
83 const auto constMProviders = mProviders;
84 for ( QgsProcessingProvider *p : constMProviders )
85 {
86 removeProvider( p );
87 }
88
89 const auto parameterTypes = mParameterTypes.values();
90
92 {
93 removeParameterType( type );
94 }
95}
96
98{
99 if ( !provider )
100 return false;
101
102 if ( mProviders.contains( provider->id() ) )
103 {
104 QgsLogger::warning( QStringLiteral( "Duplicate provider %1 registered" ).arg( provider->id() ) );
105 delete provider;
106 return false;
107 }
108
109 if ( !provider->load() )
110 {
111 QgsLogger::warning( QStringLiteral( "Provider %1 cannot load" ).arg( provider->id() ) );
112 delete provider;
113 return false;
114 }
115
116 provider->setParent( this );
117 mProviders[ provider->id()] = provider;
118 emit providerAdded( provider->id() );
119 return true;
120}
121
123{
124 if ( !provider )
125 return false;
126
127 const QString id = provider->id();
128
129 if ( !mProviders.contains( id ) )
130 return false;
131
132 provider->unload();
133
134 delete mProviders.take( id );
135 emit providerRemoved( id );
136 return true;
137}
138
139bool QgsProcessingRegistry::removeProvider( const QString &providerId )
140{
141 QgsProcessingProvider *p = providerById( providerId );
142 return removeProvider( p );
143}
144
146{
147 return mProviders.value( id, nullptr );
148}
149
150QList< const QgsProcessingAlgorithm * > QgsProcessingRegistry::algorithms() const
151{
152 QList< const QgsProcessingAlgorithm * > algs;
153 QMap<QString, QgsProcessingProvider *>::const_iterator it = mProviders.constBegin();
154 for ( ; it != mProviders.constEnd(); ++it )
155 {
156 algs.append( it.value()->algorithms() );
157 }
158 return algs;
159}
160
162{
163 // allow mapping of algorithm via registered algorithm aliases
164 const QString id = mAlgorithmAliases.value( constId, constId );
165
166 QMap<QString, QgsProcessingProvider *>::const_iterator it = mProviders.constBegin();
167 for ( ; it != mProviders.constEnd(); ++it )
168 {
169 const auto constAlgorithms = it.value()->algorithms();
170 for ( const QgsProcessingAlgorithm *alg : constAlgorithms )
171 if ( alg->id() == id )
172 return alg;
173 }
174
175 // try mapping 'qgis' algs to 'native' algs - this allows us to freely move algorithms
176 // from the python 'qgis' provider to the c++ 'native' provider without breaking API
177 // or existing models
178 if ( id.startsWith( QLatin1String( "qgis:" ) ) )
179 {
180 const QString newId = QStringLiteral( "native:" ) + id.mid( 5 );
181 return algorithmById( newId );
182 }
183 return nullptr;
184}
185
186QgsProcessingAlgorithm *QgsProcessingRegistry::createAlgorithmById( const QString &id, const QVariantMap &configuration ) const
187{
188 const QgsProcessingAlgorithm *alg = algorithmById( id );
189 if ( !alg )
190 return nullptr;
191
192 std::unique_ptr< QgsProcessingAlgorithm > creation( alg->create( configuration ) );
193 return creation.release();
194}
195
196void QgsProcessingRegistry::addAlgorithmAlias( const QString &aliasId, const QString &actualId )
197{
198 mAlgorithmAliases.insert( aliasId, actualId );
199}
200
202{
203 if ( !mParameterTypes.contains( type->id() ) )
204 {
205 mParameterTypes.insert( type->id(), type );
206 emit parameterTypeAdded( type );
207 return true;
208 }
209 else
210 {
211 QgsLogger::warning( QStringLiteral( "Duplicate parameter type %1 (\"%2\") registered" ).arg( type->id(), type->name() ) );
212
213 if ( mParameterTypes.value( type->id() ) != type )
214 delete type;
215
216 return false;
217 }
218}
219
221{
222 mParameterTypes.remove( type->id() );
223 emit parameterTypeRemoved( type );
224 delete type;
225}
226
228{
229 return mParameterTypes.value( id );
230}
231
232QList<QgsProcessingParameterType *> QgsProcessingRegistry::parameterTypes() const
233{
234 return mParameterTypes.values();
235}
static void warning(const QString &msg)
Goes to qWarning.
Definition: qgslogger.cpp:122
Abstract base class for processing algorithms.
QgsProcessingAlgorithm * create(const QVariantMap &configuration=QVariantMap()) const SIP_THROW(QgsProcessingException)
Creates a copy of the algorithm, ready for execution.
An annotation layer parameter for processing algorithms.
A authentication configuration parameter for processing algorithms.
A raster band parameter for Processing algorithms.
A boolean parameter for processing algorithms.
A color parameter for Processing algorithms.
A coordinate operation parameter for Processing algorithms.
A crs parameter for processing algorithms.
A database schema name parameter for processing algorithms.
A database table name parameter for processing algorithms.
A datetime parameter for processing algorithms.
A distance parameter for processing algorithms.
A duration parameter for processing algorithms.
An enum based parameter for processing algorithms, allowing for selection from predefined values.
An expression parameter for processing algorithms.
A rectangular map extent parameter for processing algorithms.
A feature sink parameter for Processing algorithms.
An input feature source (such as vector layers) parameter for processing algorithms.
A vector layer or feature source field parameter for processing algorithms.
A generic file based destination parameter, for specifying the destination path for a file (non-map l...
An input file or folder parameter for processing algorithms.
A folder destination parameter, for specifying the destination path for a folder created by the algor...
A geometry parameter for processing algorithms.
A print layout item parameter for Processing algorithms.
A print layout parameter for Processing algorithms.
A generic map layer parameter for processing algorithms.
A map theme parameter for Processing algorithms.
A table (matrix) parameter for processing algorithms.
A mesh layer parameter for processing algorithms.
A parameter for processing algorithms which accepts multiple map layers.
A numeric parameter for processing algorithms.
A pointcloud layer destination parameter, for specifying the destination path for a point cloud layer...
A point cloud layer parameter for processing algorithms.
A point parameter for processing algorithms.
A provider connection name parameter for processing algorithms.
A numeric range parameter for processing algorithms.
A raster layer destination parameter, for specifying the destination path for a raster layer created ...
A raster layer parameter for processing algorithms.
A scale parameter for processing algorithms.
A string parameter for processing algorithms.
A vector layer destination parameter, for specifying the destination path for a vector layer created ...
A vector layer parameter for processing algorithms.
Makes metadata of processing parameters available.
virtual QString name() const =0
A human readable and translatable short name for this parameter type.
virtual QString id() const =0
A static id for this type which will be used for storing this parameter type.
Abstract base class for processing providers.
virtual void unload()
Unloads the provider.
virtual QString id() const =0
Returns the unique provider id, used for identifying the provider.
virtual bool load()
Loads the provider.
void removeParameterType(QgsProcessingParameterType *type)
Unregister a custom parameter type from processing.
void parameterTypeAdded(QgsProcessingParameterType *type)
Emitted when a new parameter type has been added to the registry.
QgsProcessingAlgorithm * createAlgorithmById(const QString &id, const QVariantMap &configuration=QVariantMap()) const
Creates a new instance of an algorithm by its ID.
QgsProcessingProvider * providerById(const QString &id)
Returns a matching provider by provider ID.
void parameterTypeRemoved(QgsProcessingParameterType *type)
Emitted when a parameter type has been removed from the registry and is about to be deleted.
QList< const QgsProcessingAlgorithm * > algorithms() const
Returns a list of all available algorithms from registered providers.
QgsProcessingParameterType * parameterType(const QString &id) const
Returns the parameter type registered for id.
bool removeProvider(QgsProcessingProvider *provider)
Removes a provider implementation from the registry (the provider object is deleted).
bool addParameterType(QgsProcessingParameterType *type)
Register a new parameter type for processing.
QgsProcessingRegistry(QObject *parent=nullptr)
Constructor for QgsProcessingRegistry.
const QgsProcessingAlgorithm * algorithmById(const QString &id) const
Finds an algorithm by its ID.
void providerAdded(const QString &id)
Emitted when a provider has been added to the registry.
QList< QgsProcessingParameterType * > parameterTypes() const
Returns a list with all known parameter types.
bool addProvider(QgsProcessingProvider *provider)
Add a processing provider to the registry.
void providerRemoved(const QString &id)
Emitted when a provider is removed from the registry.
void addAlgorithmAlias(const QString &aliasId, const QString &actualId)
Adds a new alias to an existing algorithm.
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53