cmis_server 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/cmis_server/atom_pub/entries_controller.rb +2 -1
- data/app/controllers/cmis_server/atom_pub/folder_collection_controller.rb +55 -11
- data/app/controllers/cmis_server/atom_pub/query_controller.rb +44 -16
- data/app/controllers/cmis_server/atom_pub/service_documents_controller.rb +1 -1
- data/app/services/cmis_server/discovery_service.rb +58 -9
- data/app/services/cmis_server/navigation_service.rb +62 -3
- data/app/services/cmis_server/object_service.rb +112 -13
- data/app/views/cmis_server/atom_pub/entries/_cmis_folder_links.atom_entry.builder +1 -1
- data/app/views/cmis_server/atom_pub/entries/_object_entry.atom_entry.builder +4 -3
- data/app/views/cmis_server/atom_pub/entries/type_entry.atom_entry.builder +1 -1
- data/app/views/cmis_server/atom_pub/feeds/feed.atom_feed.builder +3 -0
- data/app/views/cmis_server/atom_pub/query_results_feed.atom_feed.builder +59 -0
- data/app/views/cmis_server/atom_pub/queryable_types_feed.atom_feed.builder +35 -0
- data/app/views/cmis_server/atom_pub/service_documents/_workspace.atom_service.builder +1 -1
- data/config/initializers/cmis_core_configuration.rb +31 -8
- data/lib/cmis_server/atom_pub/entry_parser.rb +57 -22
- data/lib/cmis_server/cmis_object.rb +32 -2
- data/lib/cmis_server/configuration.rb +4 -3
- data/lib/cmis_server/connectors/CORE_CONNECTOR_QUERIES.md +180 -0
- data/lib/cmis_server/connectors/core_connector.rb +189 -69
- data/lib/cmis_server/constants.rb +3 -2
- data/lib/cmis_server/document_adapter.rb +135 -0
- data/lib/cmis_server/document_object.rb +1 -1
- data/lib/cmis_server/engine.rb +95 -0
- data/lib/cmis_server/exceptions.rb +19 -0
- data/lib/cmis_server/folder_adapter.rb +126 -0
- data/lib/cmis_server/property.rb +40 -4
- data/lib/cmis_server/query/parser.rb +11 -0
- data/lib/cmis_server/query/{parser.racc.rb → parser_racc.rb} +2 -2
- data/lib/cmis_server/query/{parser.rex.rb → parser_rex.rb} +6 -1
- data/lib/cmis_server/query/simple_parser.rb +276 -0
- data/lib/cmis_server/query/statement.rb +3 -389
- data/lib/cmis_server/query/statement.rb.bak +395 -0
- data/lib/cmis_server/query.rb +11 -2
- data/lib/cmis_server/renderable_collection.rb +23 -2
- data/lib/cmis_server/repository.rb +1 -1
- data/lib/cmis_server/version.rb +1 -1
- data/lib/cmis_server.rb +13 -0
- metadata +12 -4
@@ -0,0 +1,395 @@
|
|
1
|
+
module CmisServer
|
2
|
+
|
3
|
+
module Query
|
4
|
+
|
5
|
+
module Statement
|
6
|
+
|
7
|
+
class Node
|
8
|
+
|
9
|
+
# def accept(visitor)
|
10
|
+
# klass = self.class.ancestors.find do |ancestor|
|
11
|
+
# visitor.respond_to?("visit_#{demodulize(ancestor.name)}")
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# if klass
|
15
|
+
# visitor.__send__("visit_#{demodulize(klass.name)}", self)
|
16
|
+
# else
|
17
|
+
# raise "No visitor for #{self.class.name}"
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# def to_sql
|
22
|
+
# SQLVisitor.new.visit(self)
|
23
|
+
# end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def demodulize(str)
|
28
|
+
str.split('::')[-1]
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class CmisQuery < Node
|
34
|
+
def initialize(query_expression, order_by)
|
35
|
+
@query_expression = query_expression
|
36
|
+
@order_by = order_by
|
37
|
+
end
|
38
|
+
|
39
|
+
attr_reader :query_expression
|
40
|
+
attr_reader :order_by
|
41
|
+
end
|
42
|
+
|
43
|
+
class Select < Node
|
44
|
+
def initialize(select_list,from,where)
|
45
|
+
@select_list=select_list
|
46
|
+
@from=from
|
47
|
+
@where=where
|
48
|
+
end
|
49
|
+
attr_reader :select_list, :from, :where
|
50
|
+
end
|
51
|
+
|
52
|
+
class All < Node
|
53
|
+
|
54
|
+
def initialize(table=nil)
|
55
|
+
@column=table
|
56
|
+
end
|
57
|
+
|
58
|
+
attr_reader :table
|
59
|
+
end
|
60
|
+
|
61
|
+
class SelectList < Node
|
62
|
+
|
63
|
+
def initialize(columns)
|
64
|
+
@columns = Array(columns)
|
65
|
+
end
|
66
|
+
|
67
|
+
attr_reader :columns
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
class As < Node
|
72
|
+
|
73
|
+
def initialize(value, column)
|
74
|
+
@value = value
|
75
|
+
@column = column
|
76
|
+
end
|
77
|
+
|
78
|
+
attr_reader :value
|
79
|
+
attr_reader :column
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
class QualifiedColumn < Node
|
84
|
+
|
85
|
+
def initialize(column, table, secondary_table=nil)
|
86
|
+
@table = table
|
87
|
+
@column = column
|
88
|
+
end
|
89
|
+
|
90
|
+
attr_reader :table
|
91
|
+
attr_reader :column
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
class FromClause < Node
|
96
|
+
|
97
|
+
def initialize(tables)
|
98
|
+
@tables = Array(tables)
|
99
|
+
end
|
100
|
+
|
101
|
+
attr_reader :tables
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
class WhereClause < Node
|
106
|
+
|
107
|
+
def initialize(search_condition)
|
108
|
+
@search_condition = search_condition
|
109
|
+
end
|
110
|
+
|
111
|
+
attr_reader :search_condition
|
112
|
+
|
113
|
+
def to_h
|
114
|
+
search_condition.to_h
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
class OrderBy < Node
|
120
|
+
|
121
|
+
def initialize(sort_specification)
|
122
|
+
@sort_specification = Array(sort_specification)
|
123
|
+
end
|
124
|
+
|
125
|
+
attr_reader :sort_specification
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
class JoinedTable < Node
|
130
|
+
|
131
|
+
def initialize(left, right)
|
132
|
+
@left = left
|
133
|
+
@right = right
|
134
|
+
end
|
135
|
+
|
136
|
+
attr_reader :left
|
137
|
+
attr_reader :right
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
class QualifiedJoin < JoinedTable
|
142
|
+
|
143
|
+
def initialize(left, right, search_condition)
|
144
|
+
super(left, right)
|
145
|
+
@search_condition = search_condition
|
146
|
+
end
|
147
|
+
|
148
|
+
attr_reader :search_condition
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
class InnerJoin < QualifiedJoin
|
153
|
+
end
|
154
|
+
|
155
|
+
class LeftJoin < QualifiedJoin
|
156
|
+
end
|
157
|
+
|
158
|
+
class LeftOuterJoin < QualifiedJoin
|
159
|
+
end
|
160
|
+
|
161
|
+
class ComparisonPredicate < Node
|
162
|
+
|
163
|
+
def initialize(left, right)
|
164
|
+
@left = left
|
165
|
+
@right = right
|
166
|
+
end
|
167
|
+
|
168
|
+
attr_reader :left
|
169
|
+
attr_reader :right
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
class Is < ComparisonPredicate
|
174
|
+
end
|
175
|
+
|
176
|
+
class Like < ComparisonPredicate
|
177
|
+
end
|
178
|
+
|
179
|
+
class In < ComparisonPredicate
|
180
|
+
end
|
181
|
+
|
182
|
+
class QuantifiedIn < ComparisonPredicate
|
183
|
+
end
|
184
|
+
|
185
|
+
class InValueList < Node
|
186
|
+
|
187
|
+
def initialize(values)
|
188
|
+
@values = values
|
189
|
+
end
|
190
|
+
|
191
|
+
attr_reader :values
|
192
|
+
|
193
|
+
end
|
194
|
+
|
195
|
+
class FolderPredicate
|
196
|
+
|
197
|
+
def initialize(folder_id, qualifier=nil)
|
198
|
+
@folder_id = folder_id
|
199
|
+
@qualifier = qualifier
|
200
|
+
end
|
201
|
+
|
202
|
+
attr_reader :folder_id
|
203
|
+
attr_reader :qualifier
|
204
|
+
|
205
|
+
end
|
206
|
+
|
207
|
+
class InFolder < FolderPredicate
|
208
|
+
end
|
209
|
+
|
210
|
+
class InTree < FolderPredicate
|
211
|
+
end
|
212
|
+
|
213
|
+
class InColumnList < Node
|
214
|
+
|
215
|
+
def initialize(columns)
|
216
|
+
@columns = columns
|
217
|
+
end
|
218
|
+
|
219
|
+
attr_reader :columns
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
class Between < Node
|
224
|
+
|
225
|
+
def initialize(left, min, max)
|
226
|
+
@left = left
|
227
|
+
@min = min
|
228
|
+
@max = max
|
229
|
+
end
|
230
|
+
|
231
|
+
attr_reader :left
|
232
|
+
attr_reader :min
|
233
|
+
attr_reader :max
|
234
|
+
|
235
|
+
end
|
236
|
+
|
237
|
+
class SearchCondition < Node
|
238
|
+
|
239
|
+
def initialize(left, right)
|
240
|
+
@left = left
|
241
|
+
@right = right
|
242
|
+
end
|
243
|
+
|
244
|
+
attr_reader :left
|
245
|
+
attr_reader :right
|
246
|
+
|
247
|
+
end
|
248
|
+
|
249
|
+
class Or < SearchCondition
|
250
|
+
end
|
251
|
+
|
252
|
+
class And < SearchCondition
|
253
|
+
|
254
|
+
def to_h
|
255
|
+
self.left.to_h.merge(self.right.to_h)
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
259
|
+
|
260
|
+
|
261
|
+
class GreaterOrEquals < ComparisonPredicate
|
262
|
+
end
|
263
|
+
|
264
|
+
class LessOrEquals < ComparisonPredicate
|
265
|
+
end
|
266
|
+
|
267
|
+
class Greater < ComparisonPredicate
|
268
|
+
end
|
269
|
+
|
270
|
+
class Less < ComparisonPredicate
|
271
|
+
end
|
272
|
+
|
273
|
+
class Equals < ComparisonPredicate
|
274
|
+
def to_h
|
275
|
+
{self.left.to_cmis_where_key => self.right.value}
|
276
|
+
end
|
277
|
+
|
278
|
+
end
|
279
|
+
|
280
|
+
class QuantifiedComparison < ComparisonPredicate
|
281
|
+
end
|
282
|
+
|
283
|
+
class Identifier < Node
|
284
|
+
|
285
|
+
def initialize(name)
|
286
|
+
@name = name
|
287
|
+
end
|
288
|
+
|
289
|
+
def to_cmis_where_key
|
290
|
+
CmisServer::Id.new(self.name).to_method_name.to_sym
|
291
|
+
end
|
292
|
+
|
293
|
+
attr_reader :name
|
294
|
+
alias_method :value, :name
|
295
|
+
|
296
|
+
end
|
297
|
+
|
298
|
+
class Table < Identifier
|
299
|
+
end
|
300
|
+
|
301
|
+
class Column < Identifier
|
302
|
+
end
|
303
|
+
|
304
|
+
class FolderId < Identifier
|
305
|
+
end
|
306
|
+
|
307
|
+
|
308
|
+
class Score < Node
|
309
|
+
end
|
310
|
+
|
311
|
+
class True < Node
|
312
|
+
end
|
313
|
+
|
314
|
+
class False < Node
|
315
|
+
end
|
316
|
+
|
317
|
+
class Null < Node
|
318
|
+
end
|
319
|
+
|
320
|
+
class Literal < Node
|
321
|
+
|
322
|
+
def initialize(value)
|
323
|
+
@value = value
|
324
|
+
end
|
325
|
+
|
326
|
+
attr_reader :value
|
327
|
+
|
328
|
+
end
|
329
|
+
|
330
|
+
class DateTime < Literal
|
331
|
+
end
|
332
|
+
|
333
|
+
class Date < Literal
|
334
|
+
end
|
335
|
+
|
336
|
+
class String < Literal
|
337
|
+
end
|
338
|
+
|
339
|
+
class ApproximateFloat < Node
|
340
|
+
|
341
|
+
def initialize(mantissa, exponent)
|
342
|
+
@mantissa = mantissa
|
343
|
+
@exponent = exponent
|
344
|
+
end
|
345
|
+
|
346
|
+
attr_reader :mantissa
|
347
|
+
attr_reader :exponent
|
348
|
+
|
349
|
+
end
|
350
|
+
|
351
|
+
class Float < Literal
|
352
|
+
end
|
353
|
+
|
354
|
+
class Integer < Literal
|
355
|
+
end
|
356
|
+
|
357
|
+
class Unary < Node
|
358
|
+
|
359
|
+
def initialize(value)
|
360
|
+
@value = value
|
361
|
+
end
|
362
|
+
|
363
|
+
attr_reader :value
|
364
|
+
|
365
|
+
end
|
366
|
+
|
367
|
+
class Not < Unary
|
368
|
+
end
|
369
|
+
|
370
|
+
class UnaryPlus < Unary
|
371
|
+
end
|
372
|
+
|
373
|
+
class UnaryMinus < Unary
|
374
|
+
end
|
375
|
+
|
376
|
+
class OrderSpecification < Node
|
377
|
+
|
378
|
+
def initialize(column)
|
379
|
+
@column = column
|
380
|
+
end
|
381
|
+
|
382
|
+
attr_reader :column
|
383
|
+
|
384
|
+
end
|
385
|
+
|
386
|
+
class Ascending < OrderSpecification
|
387
|
+
end
|
388
|
+
|
389
|
+
class Descending < OrderSpecification
|
390
|
+
end
|
391
|
+
|
392
|
+
end
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
data/lib/cmis_server/query.rb
CHANGED
@@ -27,13 +27,34 @@ module CmisServer
|
|
27
27
|
def atompub_properties
|
28
28
|
return @atompub_properties if @atompub_properties
|
29
29
|
if @base_object
|
30
|
+
# Gérer le cas où @base_object peut être un RenderableObject ou un Adapter
|
31
|
+
if @base_object.respond_to?(:base_object)
|
32
|
+
# C'est un RenderableObject
|
33
|
+
base_obj = @base_object.base_object
|
34
|
+
elsif @base_object.respond_to?(:object)
|
35
|
+
# C'est un Adapter
|
36
|
+
base_obj = @base_object.object
|
37
|
+
else
|
38
|
+
# C'est un objet de base
|
39
|
+
base_obj = @base_object
|
40
|
+
end
|
41
|
+
|
30
42
|
{
|
31
|
-
id:
|
32
|
-
title:
|
43
|
+
id: base_obj.cmis_object_id,
|
44
|
+
title: base_obj.cmis_name,
|
33
45
|
edited: DateTime.now,
|
34
46
|
updated: DateTime.now,
|
35
47
|
author: 'unknown',
|
36
48
|
}
|
49
|
+
else
|
50
|
+
# Cas du root folder virtuel
|
51
|
+
{
|
52
|
+
id: 'root_folder_collection',
|
53
|
+
title: 'Root Folders',
|
54
|
+
edited: DateTime.now,
|
55
|
+
updated: DateTime.now,
|
56
|
+
author: 'Core System',
|
57
|
+
}
|
37
58
|
end
|
38
59
|
end
|
39
60
|
|
@@ -123,7 +123,7 @@ module CmisServer
|
|
123
123
|
vendor_name: "AGSI",
|
124
124
|
product_name: "Plugandwork",
|
125
125
|
product_version: "CmisServer Gem v#{CmisServer::VERSION}",
|
126
|
-
root_folder_id:
|
126
|
+
root_folder_id: 'root_folder',
|
127
127
|
latest_change_log_token: 0,
|
128
128
|
cmis_version_supported: CmisServer::CMIS_VERSION_SUPPORTED,
|
129
129
|
capabilities: Capabilities.new(
|
data/lib/cmis_server/version.rb
CHANGED
data/lib/cmis_server.rb
CHANGED
@@ -9,6 +9,19 @@ require "cmis_server/engine_diagnostics"
|
|
9
9
|
require "cmis_server/connectors/base_connector"
|
10
10
|
require "cmis_server/connectors/core_connector"
|
11
11
|
require "cmis_server/connectors/connector_factory"
|
12
|
+
require "cmis_server/atom_pub/entry_parser"
|
13
|
+
require "cmis_server/property"
|
14
|
+
require "cmis_server/property_definition"
|
15
|
+
require "cmis_server/type"
|
16
|
+
require "cmis_server/document_type"
|
17
|
+
require "cmis_server/folder_type"
|
18
|
+
require "cmis_server/cmis_object"
|
19
|
+
require "cmis_server/document_object"
|
20
|
+
require "cmis_server/folder_object"
|
21
|
+
require "cmis_server/renderable_object"
|
22
|
+
require "cmis_server/document_adapter"
|
23
|
+
require "cmis_server/folder_adapter"
|
24
|
+
require "cmis_server/type_registry"
|
12
25
|
|
13
26
|
module CmisServer
|
14
27
|
class << self
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cmis_server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Olivier Dirrenberger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-05-
|
11
|
+
date: 2025-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -195,6 +195,8 @@ files:
|
|
195
195
|
- app/views/cmis_server/atom_pub/entries/type_entry.atom_entry.builder
|
196
196
|
- app/views/cmis_server/atom_pub/feeds/_feed_entry.atom_feed.builder
|
197
197
|
- app/views/cmis_server/atom_pub/feeds/feed.atom_feed.builder
|
198
|
+
- app/views/cmis_server/atom_pub/query_results_feed.atom_feed.builder
|
199
|
+
- app/views/cmis_server/atom_pub/queryable_types_feed.atom_feed.builder
|
198
200
|
- app/views/cmis_server/atom_pub/service_documents/_uri_template.atom_service.builder
|
199
201
|
- app/views/cmis_server/atom_pub/service_documents/_workspace.atom_service.builder
|
200
202
|
- app/views/cmis_server/atom_pub/service_documents/service_document.atom_service.builder
|
@@ -220,17 +222,20 @@ files:
|
|
220
222
|
- lib/cmis_server/base_types.rb
|
221
223
|
- lib/cmis_server/cmis_object.rb
|
222
224
|
- lib/cmis_server/configuration.rb
|
225
|
+
- lib/cmis_server/connectors/CORE_CONNECTOR_QUERIES.md
|
223
226
|
- lib/cmis_server/connectors/base_connector.rb
|
224
227
|
- lib/cmis_server/connectors/connector_factory.rb
|
225
228
|
- lib/cmis_server/connectors/core_connector.rb
|
226
229
|
- lib/cmis_server/constants.rb
|
227
230
|
- lib/cmis_server/content_stream.rb
|
228
231
|
- lib/cmis_server/context.rb
|
232
|
+
- lib/cmis_server/document_adapter.rb
|
229
233
|
- lib/cmis_server/document_object.rb
|
230
234
|
- lib/cmis_server/document_type.rb
|
231
235
|
- lib/cmis_server/engine.rb
|
232
236
|
- lib/cmis_server/engine_diagnostics.rb
|
233
237
|
- lib/cmis_server/exceptions.rb
|
238
|
+
- lib/cmis_server/folder_adapter.rb
|
234
239
|
- lib/cmis_server/folder_object.rb
|
235
240
|
- lib/cmis_server/folder_type.rb
|
236
241
|
- lib/cmis_server/id.rb
|
@@ -244,10 +249,13 @@ files:
|
|
244
249
|
- lib/cmis_server/query.rb
|
245
250
|
- lib/cmis_server/query/parser.output
|
246
251
|
- lib/cmis_server/query/parser.racc
|
247
|
-
- lib/cmis_server/query/parser.
|
252
|
+
- lib/cmis_server/query/parser.rb
|
248
253
|
- lib/cmis_server/query/parser.rex
|
249
|
-
- lib/cmis_server/query/
|
254
|
+
- lib/cmis_server/query/parser_racc.rb
|
255
|
+
- lib/cmis_server/query/parser_rex.rb
|
256
|
+
- lib/cmis_server/query/simple_parser.rb
|
250
257
|
- lib/cmis_server/query/statement.rb
|
258
|
+
- lib/cmis_server/query/statement.rb.bak
|
251
259
|
- lib/cmis_server/renderable_collection.rb
|
252
260
|
- lib/cmis_server/renderable_object.rb
|
253
261
|
- lib/cmis_server/repository.rb
|