Contents of /trunk/kdelibs4/patches/kdelibs4-4.6.5-newer-desktop-ontologies.patch
Parent Directory | Revision Log
Revision 1439 -
(show annotations)
(download)
Mon Jul 25 15:09:23 2011 UTC (13 years, 2 months ago) by niro
File size: 11947 byte(s)
Mon Jul 25 15:09:23 2011 UTC (13 years, 2 months ago) by niro
File size: 11947 byte(s)
-added patch to fix build of kdepim4-runtime with >=desktop-ontologies-0.7
1 | commit 1f796983aa8385da77f30813041b40e208c17391 |
2 | Author: Vishesh Handa <handa.vish@gmail.com> |
3 | Date: Thu May 19 20:52:30 2011 +0530 |
4 | |
5 | Make KDEPIM 4.6 compile with master |
6 | |
7 | This makes the rcgen produce add/setProperty( QList<T> ) functions for |
8 | properties with nrl:maxCardinality and nrl:cardinality = 1. This was |
9 | required because with SDO 0.7 the cardinalities of many properties |
10 | have been set. |
11 | |
12 | BUG: 268595 |
13 | |
14 | diff --git a/nepomuk/rcgen/codegenerator.cpp b/nepomuk/rcgen/codegenerator.cpp |
15 | index bc670e6..1bb2736 100644 |
16 | --- a/nepomuk/rcgen/codegenerator.cpp |
17 | +++ b/nepomuk/rcgen/codegenerator.cpp |
18 | @@ -194,33 +194,28 @@ bool CodeGenerator::writeHeader( const ResourceClass *resourceClass, QTextStream |
19 | while( it.hasNext() ) { |
20 | const Property* p = it.next(); |
21 | |
22 | - if( p->literalRange().isEmpty() && |
23 | - !p->range() ) { |
24 | - if ( !quiet ) |
25 | - qDebug() << "(CodeGenerator::writeSource) type not defined for property: " << p->name() << endl; |
26 | - continue; |
27 | - } |
28 | - |
29 | - if ( m_mode == SafeMode ) { |
30 | - ms << writeComment( QString("Get property '%1'. ").arg(p->name()) + p->comment(), 2*4 ) << endl; |
31 | - ms << " " << m_code->propertyGetterDeclaration( p, resourceClass ) << ";" << endl; |
32 | - ms << endl; |
33 | + if( p->maxCardinality() == 1 || p->cardinality() == 1 ) { |
34 | + Property * prop = const_cast<Property *>(p); |
35 | + bool isList = prop->isList(); |
36 | + |
37 | + prop->setIsList( true ); |
38 | + if( !writePropertyHeader( prop, resourceClass, ms ) ) |
39 | + continue; |
40 | + |
41 | + prop->setIsList( false ); |
42 | + if( !writePropertyHeader( prop, resourceClass, ms ) ) |
43 | + continue; |
44 | + |
45 | + writePropertyUriHeader( prop, ms ); |
46 | + |
47 | + prop->setIsList( isList ); |
48 | } |
49 | - |
50 | - ms << writeComment( QString("Set property '%1'. ").arg(p->name()) + p->comment(), 2*4 ) << endl; |
51 | - ms << " " << m_code->propertySetterDeclaration( p, resourceClass ) << ";" << endl; |
52 | - ms << endl; |
53 | - |
54 | - if( p->isList() ) { |
55 | - ms << writeComment( QString("Add a value to property '%1'. ").arg(p->name()) + p->comment(), 2*4 ) << endl; |
56 | - ms << " " << m_code->propertyAdderDeclaration( p, resourceClass ) << ";" << endl; |
57 | - ms << endl; |
58 | + else { |
59 | + if( !writePropertyHeader( p, resourceClass, ms ) ) |
60 | + continue; |
61 | + writePropertyUriHeader( p, ms ); |
62 | } |
63 | - |
64 | - ms << writeComment( QString( "\\return The URI of the property '%1'." ).arg( p->name() ), 2*4 ) << endl; |
65 | - ms << " " << "static QUrl " << p->name()[0].toLower() << p->name().mid(1) << "Uri();" << endl; |
66 | - ms << endl; |
67 | - |
68 | + |
69 | if( !p->hasSimpleType() ) |
70 | includes.insert( p->typeString( true ) ); |
71 | } |
72 | @@ -299,6 +294,42 @@ bool CodeGenerator::writeHeader( const ResourceClass *resourceClass, QTextStream |
73 | return true; |
74 | } |
75 | |
76 | +bool CodeGenerator::writePropertyHeader(const Property* p, const ResourceClass* resourceClass, QTextStream& ms) const |
77 | +{ |
78 | + if( p->literalRange().isEmpty() && |
79 | + !p->range() ) { |
80 | + if ( !quiet ) |
81 | + qDebug() << "(CodeGenerator::writeSource) type not defined for property: " << p->name() << endl; |
82 | + return false; |
83 | + } |
84 | + |
85 | + if ( m_mode == SafeMode ) { |
86 | + ms << writeComment( QString("Get property '%1'. ").arg(p->name()) + p->comment(), 2*4 ) << endl; |
87 | + ms << " " << m_code->propertyGetterDeclaration( p, resourceClass ) << ";" << endl; |
88 | + ms << endl; |
89 | + } |
90 | + |
91 | + ms << writeComment( QString("Set property '%1'. ").arg(p->name()) + p->comment(), 2*4 ) << endl; |
92 | + ms << " " << m_code->propertySetterDeclaration( p, resourceClass ) << ";" << endl; |
93 | + ms << endl; |
94 | + |
95 | + if( p->isList() ) { |
96 | + ms << writeComment( QString("Add a value to property '%1'. ").arg(p->name()) + p->comment(), 2*4 ) << endl; |
97 | + ms << " " << m_code->propertyAdderDeclaration( p, resourceClass ) << ";" << endl; |
98 | + ms << endl; |
99 | + } |
100 | + |
101 | + return true; |
102 | +} |
103 | + |
104 | +void CodeGenerator::writePropertyUriHeader(const Property* p, QTextStream& ts) const |
105 | +{ |
106 | + ts << writeComment( QString( "\\return The URI of the property '%1'." ).arg( p->name() ), 2*4 ) << endl; |
107 | + ts << " " << "static QUrl " << p->name()[0].toLower() << p->name().mid(1) << "Uri();" << endl; |
108 | + ts << endl; |
109 | +} |
110 | + |
111 | + |
112 | bool CodeGenerator::writeSource( const ResourceClass* resourceClass, QTextStream& stream ) const |
113 | { |
114 | QString s = sourceTemplate( m_mode ); |
115 | @@ -318,29 +349,31 @@ bool CodeGenerator::writeSource( const ResourceClass* resourceClass, QTextStream |
116 | while( it.hasNext() ) { |
117 | const Property* p = it.next(); |
118 | |
119 | - if( p->literalRange().isEmpty() && |
120 | - !p->range() ) { |
121 | - if ( !quiet ) |
122 | - qDebug() << "(CodeGenerator::writeSource) type not defined for property: " << p->name() << endl; |
123 | - continue; |
124 | + if( p->maxCardinality() == 1 || p->cardinality() == 1 ) { |
125 | + Property * prop = const_cast<Property *>(p); |
126 | + bool isList = prop->isList(); |
127 | + |
128 | + prop->setIsList( true ); |
129 | + if( !writePropertySource( prop, resourceClass, ms ) ) |
130 | + continue; |
131 | + |
132 | + prop->setIsList( false ); |
133 | + if( !writePropertySource( prop, resourceClass, ms ) ) |
134 | + continue; |
135 | + |
136 | + writePropertyUriSource( prop, resourceClass, ms ); |
137 | + |
138 | + prop->setIsList( isList ); |
139 | } |
140 | - |
141 | + else { |
142 | + if( !writePropertySource( p, resourceClass, ms ) ) |
143 | + continue; |
144 | + writePropertyUriSource( p, resourceClass, ms ); |
145 | + } |
146 | + |
147 | if ( !p->hasSimpleType() ) { |
148 | includes.append( QString( "#include \"%1.h\"" ).arg( p->typeString( true ).toLower() ) ); |
149 | } |
150 | - |
151 | - if ( m_mode == SafeMode ) |
152 | - ms << m_code->propertyGetterDefinition( p, resourceClass ) << endl; |
153 | - |
154 | - ms << m_code->propertySetterDefinition( p, resourceClass ) << endl; |
155 | - if( p->isList() ) |
156 | - ms << m_code->propertyAdderDefinition( p, resourceClass ) << endl; |
157 | - |
158 | - // write the static method that returns the property's Uri |
159 | - ms << "QUrl " << resourceClass->name( m_nameSpace ) << "::" << p->name()[0].toLower() << p->name().mid(1) << "Uri()" << endl |
160 | - << "{" << endl |
161 | - << " return QUrl::fromEncoded(\"" << p->uri().toString() << "\");" << endl |
162 | - << "}" << endl << endl; |
163 | } |
164 | |
165 | it = resourceClass->allReverseProperties(); |
166 | @@ -395,6 +428,32 @@ bool CodeGenerator::writeSource( const ResourceClass* resourceClass, QTextStream |
167 | return true; |
168 | } |
169 | |
170 | +bool CodeGenerator::writePropertySource(const Property* p, const ResourceClass* resourceClass, QTextStream& ms) const |
171 | +{ |
172 | + if( p->literalRange().isEmpty() && !p->range() ) { |
173 | + if ( !quiet ) |
174 | + qDebug() << "(CodeGenerator::writeSource) type not defined for property: " << p->name() << endl; |
175 | + return false; |
176 | + } |
177 | + |
178 | + if ( m_mode == SafeMode ) |
179 | + ms << m_code->propertyGetterDefinition( p, resourceClass ) << endl; |
180 | + |
181 | + ms << m_code->propertySetterDefinition( p, resourceClass ) << endl; |
182 | + if( p->isList() ) |
183 | + ms << m_code->propertyAdderDefinition( p, resourceClass ) << endl; |
184 | + |
185 | + return true; |
186 | +} |
187 | + |
188 | +void CodeGenerator::writePropertyUriSource(const Property* p, const ResourceClass* resourceClass, QTextStream& ts) const |
189 | +{ |
190 | + // write the static method that returns the property's Uri |
191 | + ts << "QUrl " << resourceClass->name( m_nameSpace ) << "::" << p->name()[0].toLower() << p->name().mid(1) << "Uri()" << endl |
192 | + << "{" << endl |
193 | + << " return QUrl::fromEncoded(\"" << p->uri().toString() << "\");" << endl |
194 | + << "}" << endl << endl; |
195 | +} |
196 | |
197 | bool CodeGenerator::writeSources( const QString& dir ) |
198 | { |
199 | diff --git a/nepomuk/rcgen/codegenerator.h b/nepomuk/rcgen/codegenerator.h |
200 | index dc786a4..f26a875 100644 |
201 | --- a/nepomuk/rcgen/codegenerator.h |
202 | +++ b/nepomuk/rcgen/codegenerator.h |
203 | @@ -22,6 +22,7 @@ class AbstractCode; |
204 | class ResourceClass; |
205 | class QString; |
206 | class QTextStream; |
207 | +class Property; |
208 | |
209 | class CodeGenerator |
210 | { |
211 | @@ -47,7 +48,13 @@ private: |
212 | bool writeHeader( const ResourceClass* resourceClass, QTextStream& ) const; |
213 | bool writeSource( const ResourceClass* resourceClass, QTextStream& ) const; |
214 | bool writeDummyClasses( const QString &folder ) const; |
215 | + |
216 | + bool writePropertyHeader( const Property* p, const ResourceClass* resourceClass, QTextStream& ms ) const; |
217 | + bool writePropertySource( const Property* p, const ResourceClass* resourceClass, QTextStream& ms ) const; |
218 | |
219 | + void writePropertyUriHeader( const Property* p, QTextStream& ts ) const; |
220 | + void writePropertyUriSource( const Property* p, const ResourceClass* resourceClass, QTextStream& ts ) const; |
221 | + |
222 | QString visibilityHeader() const; |
223 | QString visibilityExportMacro() const; |
224 | |
225 | diff --git a/nepomuk/rcgen/ontologyparser.cpp b/nepomuk/rcgen/ontologyparser.cpp |
226 | index 50e3397..f9f8673 100644 |
227 | --- a/nepomuk/rcgen/ontologyparser.cpp |
228 | +++ b/nepomuk/rcgen/ontologyparser.cpp |
229 | @@ -164,7 +164,14 @@ bool OntologyParser::parse( const QString& filename, const QString& serializatio |
230 | } |
231 | else if( s.predicate().uri() == Soprano::Vocabulary::NRL::maxCardinality() || |
232 | s.predicate().uri() == Soprano::Vocabulary::NRL::cardinality() ) { |
233 | - d->getProperty(s.subject().uri())->setIsList( s.object().literal().toInt() > 1 ); |
234 | + Property * p = d->getProperty(s.subject().uri()); |
235 | + int cValue = s.object().literal().toInt(); |
236 | + |
237 | + p->setIsList( cValue > 1 ); |
238 | + if( s.predicate().uri() == Soprano::Vocabulary::NRL::maxCardinality() ) |
239 | + p->setMaxCardinality( cValue ); |
240 | + else |
241 | + p->setCardinality( cValue ); |
242 | } |
243 | else if( s.predicate().uri() == Soprano::Vocabulary::RDFS::comment() ) { |
244 | d->comments[s.subject().uri()] = s.object().literal().toString(); |
245 | diff --git a/nepomuk/rcgen/property.cpp b/nepomuk/rcgen/property.cpp |
246 | index 1baa04c..51d9c07 100644 |
247 | --- a/nepomuk/rcgen/property.cpp |
248 | +++ b/nepomuk/rcgen/property.cpp |
249 | @@ -27,7 +27,9 @@ Property::Property() |
250 | : m_range( 0 ), |
251 | m_isList( true ), |
252 | m_domain( 0 ), |
253 | - m_inverseProperty( 0 ) |
254 | + m_inverseProperty( 0 ), |
255 | + m_maxCardinality( -1 ), |
256 | + m_cardinality( -1 ) |
257 | { |
258 | } |
259 | |
260 | @@ -204,3 +206,24 @@ QString Property::literalTypeConversionMethod() const |
261 | |
262 | return QString(); |
263 | } |
264 | + |
265 | +void Property::setMaxCardinality(int value) |
266 | +{ |
267 | + m_maxCardinality = value; |
268 | +} |
269 | + |
270 | +int Property::maxCardinality() const |
271 | +{ |
272 | + return m_maxCardinality; |
273 | +} |
274 | + |
275 | +int Property::cardinality() const |
276 | +{ |
277 | + return m_cardinality; |
278 | +} |
279 | + |
280 | +void Property::setCardinality(int value) |
281 | +{ |
282 | + m_cardinality = value; |
283 | +} |
284 | + |
285 | diff --git a/nepomuk/rcgen/property.h b/nepomuk/rcgen/property.h |
286 | index a72ab5d..a09006d 100644 |
287 | --- a/nepomuk/rcgen/property.h |
288 | +++ b/nepomuk/rcgen/property.h |
289 | @@ -139,6 +139,25 @@ public: |
290 | */ |
291 | bool hasSimpleType() const; |
292 | |
293 | + /** |
294 | + * Sets the max cardinality of the property |
295 | + */ |
296 | + void setMaxCardinality( int value ); |
297 | + |
298 | + /** |
299 | + * Returns the max cardinality of the property |
300 | + */ |
301 | + int maxCardinality() const; |
302 | + |
303 | + /** |
304 | + * Sets the cardinality of the property |
305 | + */ |
306 | + void setCardinality( int value ); |
307 | + |
308 | + /** |
309 | + * Returns the cardinality of the property |
310 | + */ |
311 | + int cardinality() const; |
312 | private: |
313 | QUrl m_uri; |
314 | ResourceClass* m_range; |
315 | @@ -147,6 +166,8 @@ private: |
316 | bool m_isList; |
317 | ResourceClass* m_domain; |
318 | Property* m_inverseProperty; |
319 | + int m_maxCardinality; |
320 | + int m_cardinality; |
321 | }; |
322 | |
323 | #endif |