QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgsstoredexpressionmanager.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsstoredexpressionmanager.cpp
3  -------------------
4  begin : August 2019
5  copyright : (C) 2019 David Signer
6  email : david at opengis dot ch
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 "qgis.h"
20 
21 
22 #include <QDomElement>
23 
24 QString QgsStoredExpressionManager::addStoredExpression( const QString &name, const QString &expression, const QgsStoredExpression::Category &tag )
25 {
26  QgsStoredExpression storedExpression( name, expression, tag );
27 
28  mStoredExpressions.append( storedExpression );
29 
30  return storedExpression.id;
31 }
32 
34 {
35  int i = 0;
36  for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
37  {
38  if ( storedExpression.id == id )
39  {
40  mStoredExpressions.removeAt( i );
41  //leave the loop after editing source
42  break;
43  }
44  ++i;
45  }
46 }
47 
48 void QgsStoredExpressionManager::updateStoredExpression( const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag )
49 {
50  int i = 0;
51  for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
52  {
53  if ( storedExpression.id == id )
54  {
55  QgsStoredExpression newStoredExpression = storedExpression;
56  newStoredExpression.name = name;
57  newStoredExpression.expression = expression;
58  newStoredExpression.tag = tag;
59  mStoredExpressions.replace( i, newStoredExpression );
60  //leave the loop after editing source
61  break;
62  }
63  ++i;
64  }
65 }
66 
67 void QgsStoredExpressionManager::addStoredExpressions( const QList< QgsStoredExpression > &storedExpressions )
68 {
69  mStoredExpressions.append( storedExpressions );
70 }
71 
73 {
74  QList< QgsStoredExpression > storedExpressions;
75 
76  for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
77  {
78  if ( storedExpression.tag & tag )
79  {
81  }
82  }
83  return storedExpressions;
84 }
85 
87 {
88  for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
89  {
90  if ( storedExpression.id == id )
91  {
92  return storedExpression;
93  }
94  }
95  return QgsStoredExpression();
96 }
97 
99 {
100  for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
101  {
102  if ( storedExpression.expression == expression && storedExpression.tag & tag )
103  {
104  return storedExpression;
105  }
106  }
107  return QgsStoredExpression();
108 }
109 
111 {
112  mStoredExpressions.clear();
113 }
114 
115 bool QgsStoredExpressionManager::writeXml( QDomNode &layerNode ) const
116 {
117  QDomElement aStoredExpressions = layerNode.ownerDocument().createElement( QStringLiteral( "storedexpressions" ) );
118 
119  for ( const QgsStoredExpression &storedExpression : std::as_const( mStoredExpressions ) )
120  {
121  QDomElement aStoredExpression = layerNode.ownerDocument().createElement( QStringLiteral( "storedexpression" ) );
122  aStoredExpression.setAttribute( QStringLiteral( "name" ), storedExpression.name );
123  aStoredExpression.setAttribute( QStringLiteral( "expression" ), storedExpression.expression );
124  aStoredExpression.setAttribute( QStringLiteral( "tag" ), storedExpression.tag );
125  aStoredExpressions.appendChild( aStoredExpression );
126  }
127  layerNode.appendChild( aStoredExpressions );
128 
129  return true;
130 }
131 
132 bool QgsStoredExpressionManager::readXml( const QDomNode &layerNode )
133 {
135 
136  QDomNode aaNode = layerNode.namedItem( QStringLiteral( "storedexpressions" ) );
137 
138  if ( !aaNode.isNull() )
139  {
140  QDomNodeList aStoredExpressions = aaNode.toElement().elementsByTagName( QStringLiteral( "storedexpression" ) );
141  for ( int i = 0; i < aStoredExpressions.size(); ++i )
142  {
143  QDomElement aStoredExpression = aStoredExpressions.at( i ).toElement();
144  addStoredExpression( aStoredExpression.attribute( QStringLiteral( "name" ) ), aStoredExpression.attribute( QStringLiteral( "expression" ) ), QgsStoredExpression::Category( aStoredExpression.attribute( QStringLiteral( "tag" ) ).toInt() ) );
145  }
146  }
147  return true;
148 }
void removeStoredExpression(const QString &id)
Removes an expression to the list.
QgsStoredExpression storedExpression(const QString &id) const
Returns an expression according to the id.
bool writeXml(QDomNode &layerNode) const
Writes the stored expressions out in XML format.
void clearStoredExpressions()
Clears list of stored expressions.
QgsStoredExpression findStoredExpressionByExpression(const QString &expression, const QgsStoredExpression::Category &tag=QgsStoredExpression::Category::All) const
Returns an expression according to the expression text.
QList< QgsStoredExpression > storedExpressions(const QgsStoredExpression::Category &tag=QgsStoredExpression::Category::All)
Returns the list of named expressions.
void addStoredExpressions(const QList< QgsStoredExpression > &storedExpressions)
Appends a list of expressions to the existing list.
void updateStoredExpression(const QString &id, const QString &name, const QString &expression, const QgsStoredExpression::Category &tag)
Updates an expression by id.
bool readXml(const QDomNode &layerNode)
Reads the stored expressions in in XML format.
QString addStoredExpression(const QString &name, const QString &expression, const QgsStoredExpression::Category &tag=QgsStoredExpression::Category::FilterExpression)
Adds an expression to the list.
Stored expression containing name, content (expression text) and a category tag.
QString expression
expression text
Category
Categories of use cases FilterExpression for stored expressions to filter attribute table DefaultValu...
QString id
generated uuid used for identification
Category tag
category of the expression use case
QString name
descriptive name of the expression