rtm-javatmapi 0.2.0 → 0.2.1

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.
@@ -2,8 +2,9 @@
2
2
  # License: Apache License, Version 2.0
3
3
 
4
4
  module Java::OrgTmapiCore::Occurrence
5
-
6
- #include RTM::Occurrence
5
+
6
+ include RTM::Occurrence
7
+ extend Superiseable
7
8
 
8
9
  # Returns the Topic this Occurrence belongs to.
9
10
  #
@@ -27,30 +28,5 @@ module Java::OrgTmapiCore::Occurrence
27
28
  getValue
28
29
  end
29
30
 
30
-
31
- # If argument is a String, this methods sets the string value and
32
- # the datatype implicitly to xsd:string.
33
- #
34
- # If argument is a Locator, this method sets the IRI value and
35
- # the datatype implicitly to xsd:anyURI.
36
- #
37
- # If argument is a Float, this method sets the Float value and
38
- # the datatype implicitly to xsd:float.
39
- #
40
- # If argument is a Fixnum, this method sets Fixnum value and
41
- # the datatype implicitly to xsd:long.
42
- #
43
- # If argument is a Bignum, this method sets Bignum value and
44
- # the datatype implicitly to xsd:integer.
45
- #
46
- # :call-seq:
47
- # value=(argument)
48
- #
49
- def value=(argument)
50
- setValue(argument)
51
- end
52
-
53
-
54
-
55
-
56
31
  end
32
+
@@ -2,11 +2,11 @@
2
2
  # License: Apache License, Version 2.0
3
3
 
4
4
  module Java::OrgTmapiCore::Reifiable
5
-
6
- #include RTM::Reifiable
5
+
6
+ include RTM::Reifiable
7
7
  extend Superiseable
8
-
9
- # Returns the reifier (Topic) of this Reifiable
8
+
9
+ # Returns the reifier (a topic) of this Reifiable
10
10
  # or nil if the Reifiable is not reified.
11
11
  #
12
12
  # :call-seq:
@@ -15,22 +15,12 @@ module Java::OrgTmapiCore::Reifiable
15
15
  def reifier
16
16
  getReifier
17
17
  end
18
-
19
- # Returns the reifier (Topic) of this Reifiable.
20
- # If there is no current reifier, then a reifier will be generated.
21
- #
22
- # :call-seq:
23
- # reifier! -> Topic
24
- #
25
- def reifier!
26
- self.reifier ||= self.topic_map.create_topic
27
- end
28
-
18
+
29
19
  superised
30
20
  # Sets the reifier of this reifiable Construct.
31
21
  # The specified reifier MUST NOT reify another information item.
32
22
  #
33
- # Identifier may be a Topic or Topic-Reference or nil,
23
+ # Identifier may be a topic reference or nil,
34
24
  # if an existing reifier should be removed.
35
25
  #
36
26
  # :call-seq:
@@ -39,7 +29,7 @@ module Java::OrgTmapiCore::Reifiable
39
29
  #
40
30
  def reifier=(identifier=nil)
41
31
  unless identifier
42
- setReifier(identifier)
32
+ setReifier(nil)
43
33
  return
44
34
  end
45
35
  raise("reifier=: identifier muss be a Topic, Locator or String; not given or nil") unless identifier.is_a?(Java::OrgTmapiCore::Topic) || identifier.is_a?(Java::OrgTmapiCore::Locator) || identifier.is_a?(String)
@@ -2,8 +2,8 @@
2
2
  # License: Apache License, Version 2.0
3
3
 
4
4
  module Java::OrgTmapiCore::Role
5
-
6
- #include RTM::Role
5
+
6
+ include RTM::Role
7
7
  extend Superiseable
8
8
 
9
9
  # Returns the Association to which this Role belongs.
@@ -28,7 +28,7 @@ module Java::OrgTmapiCore::Role
28
28
  superised
29
29
  # Sets the role player. Any previous role player will be overriden.
30
30
  #
31
- # Identifier may be a Topic or Topic-Reference.
31
+ # Identifier may be a topic reference.
32
32
  #
33
33
  # :call-seq:
34
34
  # player=(identifier)
@@ -3,8 +3,8 @@
3
3
 
4
4
  module Java::OrgTmapiCore::Scoped
5
5
 
6
+ include RTM::Scoped
6
7
  extend Superiseable
7
- #include RTM::Scoped
8
8
 
9
9
  # Returns the Topics which define the scope of this scoped Construct.
10
10
  # An empty Set represents the unconstrained scope.
@@ -20,7 +20,7 @@ module Java::OrgTmapiCore::Scoped
20
20
  superised
21
21
  # Adds a topic given by the identifier to the scope.
22
22
  #
23
- # Identifier may be a Topic or Topic-Reference.
23
+ # Identifier may be a topic reference.
24
24
  #
25
25
  # :call-seq:
26
26
  # add_theme(identifier)
@@ -37,7 +37,7 @@ module Java::OrgTmapiCore::Scoped
37
37
 
38
38
  # Adds one or several topics to the scope.
39
39
  #
40
- # An identifier may be a Topic or Topic-Reference.
40
+ # An identifier may be a topic reference.
41
41
  #
42
42
  # :call-seq:
43
43
  # add_themes(identifier)
@@ -60,24 +60,19 @@ module Java::OrgTmapiCore::Scoped
60
60
  superised
61
61
  # Removes a topic given by the identifier from the current scope.
62
62
  #
63
- # Identifier may be a Topic or Topic-Reference.
63
+ # Identifier may be a topic reference.
64
64
  #
65
65
  # :call-seq:
66
66
  # remove_theme(identifier)
67
67
  #
68
68
  def remove_theme(identifier)
69
- if identifier.is_a?(Java::OrgTmapiCore::Topic)
70
- removeTheme(identifier)
71
- elsif identifier.is_a?(Java::OrgTmapiCore::Locator) || identifier.is_a?(String)
72
- removeTheme(topic_map.get!(identifier))
73
- else
74
- raise("Identifier must be a Topic, String or Locator")
75
- end
69
+ identifier = topic_map.get(identifier)
70
+ removeTheme(identifier) if identifier.is_a?(Java::OrgTmapiCore::Topic)
76
71
  end
77
72
 
78
73
  # Removes one or several topics from the scope.
79
74
  #
80
- # An identifier may be a Topic or Topic-Reference.
75
+ # An identifier may be a topic reference.
81
76
  #
82
77
  # :call-seq:
83
78
  # remove_themes(identifier)
@@ -2,10 +2,10 @@
2
2
  # License: Apache License, Version 2.0
3
3
 
4
4
  module Java::OrgTmapiCore::Topic
5
-
6
- #include RTM::Topic
5
+
6
+ include RTM::Topic
7
7
  extend Superiseable
8
-
8
+
9
9
  # Returns all Names and Occurrences parented by this Topic.
10
10
  #
11
11
  # :call-seq:
@@ -28,7 +28,7 @@ module Java::OrgTmapiCore::Topic
28
28
  # If the identifier equals :default, all Names
29
29
  # which have the default Name type are returned.
30
30
  #
31
- # Identifier may be a Topic/Topic-Reference or Symbol;
31
+ # Identifier may be a topic reference or Symbol;
32
32
  # or an Array of these.
33
33
  #
34
34
  # :call-seq:
@@ -61,7 +61,7 @@ module Java::OrgTmapiCore::Topic
61
61
  # of all Occurrences of this Topic, which have one of
62
62
  # the identifiers as Occurrence type.
63
63
  #
64
- # Identifier may be a Topic/Topic-Reference or an Array of these.
64
+ # Identifier may be a topic reference or an Array of these.
65
65
  #
66
66
  # :call-seq:
67
67
  # occurrences -> Set of Occurrences
@@ -87,7 +87,7 @@ module Java::OrgTmapiCore::Topic
87
87
  # Creates a Name for this Topic with the specified value.
88
88
  # Value has to be a String.
89
89
  #
90
- # Type may be a Topic/Topic-Reference.
90
+ # Type may be a topic reference.
91
91
  # If given, type specifies the Name Type;
92
92
  # else the created Name will have the default name type.
93
93
  #
@@ -104,7 +104,7 @@ module Java::OrgTmapiCore::Topic
104
104
  def create_name(arg1,arg2 = :nothing, arg3 = :nothing)
105
105
  if (arg2 == :nothing) && (arg3 == :nothing) #arg1 = value
106
106
  raise "create_name(value): value must be a String" unless arg1.is_a?(String)
107
- return createName(arg1,[].to_java(org.tmapi.core.Topic))
107
+ return createName(arg1,new_empty_java_topic_array)
108
108
  end
109
109
  if (arg3 == :nothing)
110
110
  if arg2.is_a?(Array) #arg1 = value, arg2 = scope
@@ -112,10 +112,10 @@ module Java::OrgTmapiCore::Topic
112
112
  arg2.each do |theme|
113
113
  raise "create_name(value, scope): scope must be an Array of Topics/Topic-References" unless (theme.is_a?(String) || theme.is_a?(Java::OrgTmapiCore::Topic) || theme.is_a?(Java::OrgTmapiCore::Locator))
114
114
  end
115
- return arg2.empty? ? createName(arg1,[].to_java(org.tmapi.core.Topic)) : createName(arg1,topic_map.get!(arg2))
115
+ return arg2.empty? ? createName(arg1,new_empty_java_topic_array) : createName(arg1,topic_map.get!(arg2))
116
116
  elsif arg2.is_a?(String) #arg1 = type, arg2 = value
117
117
  raise "create_name(type, value): type must be a Topic/Topic-Reference" unless (arg1.is_a?(String) || arg1.is_a?(Java::OrgTmapiCore::Topic) || arg1.is_a?(Java::OrgTmapiCore::Locator))
118
- return createName(topic_map.get!(arg1),arg2,[].to_java(org.tmapi.core.Topic))
118
+ return createName(topic_map.get!(arg1),arg2,new_empty_java_topic_array)
119
119
  else
120
120
  raise "create_name(?,?): arguments don't match"
121
121
  end
@@ -134,12 +134,12 @@ module Java::OrgTmapiCore::Topic
134
134
  # Creates an Occurrence for this Topic with the specified type and value and
135
135
  # optional scope and datatype.
136
136
  #
137
- # Type specifies the Occurrence type and may be a Topic, String or Locator.
137
+ # Type specifies the Occurrence type and may be a topic reference.
138
138
  #
139
139
  # Value may be a Locator (then the datatype is set to xsd:AnyURI and
140
140
  # must not be given) or String.
141
141
  #
142
- # Scope may be an Array of Topics/Topic-References. If no scope
142
+ # Scope may be an Array of topic reference. If no scope
143
143
  # is given, the Occurrence will be in the unconstrained scope.
144
144
  #
145
145
  # Datatype may be a String or Locator and indicates the datatype of the value.
@@ -151,23 +151,55 @@ module Java::OrgTmapiCore::Topic
151
151
  # create_occurrence(type, value, {:datatype => datatype}) -> Occurrence
152
152
  #
153
153
  def create_occurrence(type,value,params={})
154
- if params[:scope]
155
- raise("scope must be an Array") unless params[:scope].is_a?(Array)
156
- if (value.is_a? Java::OrgTmapiCore::Locator) || !params[:datatype]
157
- return createOccurrence(topic_map.get!(type),value,topic_map.get!(params[:scope]))
158
- else # datatype given, no locator
159
- return createOccurrence(topic_map.get!(type),value,topic_map.create_locator(params[:datatype]),topic_map.get!(params[:scope]))
154
+ # creating a topic for the type
155
+ type = topic_map.get!(type)
156
+ # reading the datatype if given. nil otherwise
157
+ datatype = params[:datatype]
158
+ # reading value and setting datatype if not done before
159
+ unless datatype
160
+ if value.is_a?(Java::OrgTmapiCore::Locator)
161
+ datatype = RTM::PSI[:IRI]
162
+ elsif value.is_a?(String)
163
+ datatype = RTM::PSI[:String]
164
+ elsif value.is_a?(Float)
165
+ datatype = RTM::PSI[:Float]
166
+ elsif value.is_a?(Fixnum)
167
+ datatype = RTM::PSI[:Long]
168
+ elsif value.is_a?(Bignum)
169
+ datatype = RTM::PSI[:Integer]
170
+ elsif value.is_a?(DateTime) #DateTime is a Time and a Date
171
+ datatype ||= RTM::PSI[:DateTime]
172
+ elsif value.is_a?(Time)
173
+ datatype ||= RTM::PSI[:Time]
174
+ elsif value.is_a?(Date)
175
+ datatype ||= RTM::PSI[:Date]
176
+ else
177
+ raise NoDatatypeHandlerAvailableException.new(value)
160
178
  end
161
- else #no scope
162
- if (value.is_a? Java::OrgTmapiCore::Locator) || !params[:datatype]
163
- return createOccurrence(topic_map.get!(type),value,[].to_java(org.tmapi.core.Topic))
164
- else #datatype given, no locator
165
- return createOccurrence(topic_map.get!(type),value,topic_map.create_locator(params[:datatype]),[].to_java(org.tmapi.core.Topic))
179
+ end
180
+ # creating locator for datatype
181
+ datatype = topic_map.create_locator(datatype)
182
+ # value must be a String
183
+ value = value.to_s
184
+ # if datatype is xsd:anyURI -> resolve value against base_iri
185
+ if datatype.reference == RTM::PSI[:IRI]
186
+ value = topic_map.create_locator(value).reference
187
+ end
188
+
189
+ begin
190
+ if params[:scope]
191
+ raise("scope must be an Array") unless params[:scope].is_a?(Array)
192
+
193
+ return createOccurrence(type, value, datatype, topic_map.get!(params[:scope]))
194
+
195
+ else #no scope
196
+ return createOccurrence(type, value, datatype, new_empty_java_topic_array)
166
197
  end
198
+ rescue java.lang.IllegalArgumentException => iae
199
+ raise(iae.message)
167
200
  end
168
201
  end
169
202
 
170
-
171
203
  # Returns the TopicMap the Topic belongs to.
172
204
  #
173
205
  # :call-seq:
@@ -180,7 +212,7 @@ module Java::OrgTmapiCore::Topic
180
212
 
181
213
  # Calls TMAPI TopicMap.getIndex which
182
214
  # returns the index for the TypeInstanceIndex.
183
- #
215
+ #
184
216
  # :call-seq:
185
217
  # type_instance_index -> TypeInstanceIndex
186
218
  #
@@ -194,8 +226,8 @@ module Java::OrgTmapiCore::Topic
194
226
  # If given, rtype specifies the type of the Roles to be returned;
195
227
  # If given, atype specifies the type of the Association
196
228
  # from which the returned Roles must be part of.
197
- #
198
- # rtype and atype may be a Topic/Topic-Reference or Arrays of these types.
229
+ #
230
+ # rtype and atype may be a topic reference or Arrays of these types.
199
231
  #
200
232
  # The result may be empty.
201
233
  #
@@ -263,31 +295,18 @@ module Java::OrgTmapiCore::Topic
263
295
  # add_subject_identifier(identifier)
264
296
  #
265
297
  def add_subject_identifier(identifier)
266
- if identifier.is_a? Java::OrgTmapiCore::Locator
267
- addSubjectIdentifier(identifier)
268
- else
269
- addSubjectIdentifier(topic_map.create_locator(identifier))
298
+ begin
299
+ if identifier.is_a? Java::OrgTmapiCore::Locator
300
+ addSubjectIdentifier(identifier)
301
+ else
302
+ addSubjectIdentifier(topic_map.create_locator(identifier))
303
+ end
304
+ rescue org.tmapi.core.IdentityConstraintException => ice
305
+ # TODO add condition to switch off automerge
306
+ self.mergeIn(self.topic_map.get(identifier))
270
307
  end
271
308
  end
272
- alias :subject_identifiers= :add_subject_identifier
273
309
 
274
- superised
275
- # Adds a subject locator to the current topic.
276
- # Identifier may be a String or Locator.
277
- #
278
- # :call-seq:
279
- # add_subject_locator(identifier)
280
- #
281
- def add_subject_locator(identifier)
282
- # TODO Spec
283
- if identifier.is_a? Java::OrgTmapiCore::Locator
284
- addSubjectLocator(identifier)
285
- else
286
- addSubjectLocator(topic_map.create_locator(identifier))
287
- end
288
- end
289
- alias :subject_locators= :add_subject_locator
290
-
291
310
  superised
292
311
  # Removes a subject identifier from the this Topic,
293
312
  # if present.
@@ -298,10 +317,39 @@ module Java::OrgTmapiCore::Topic
298
317
  # remove_subject_identifier(identifier)
299
318
  #
300
319
  def remove_subject_identifier(identifier)
301
- identifier = topic_map.create_locator(identifier) if identifier.is_a? String
320
+ identifier = topic_map.create_locator(identifier) if identifier.is_a? String
302
321
  removeSubjectIdentifier(identifier) if identifier.is_a? Java::OrgTmapiCore::Locator
303
322
  end
304
323
 
324
+ # Returns the subject locators assigned to the current topic.
325
+ #
326
+ # :call-seq:
327
+ # subject_locators -> Set of Locators
328
+ #
329
+ def subject_locators
330
+ getSubjectLocators
331
+ end
332
+
333
+ superised
334
+ # Adds a subject locator to the current topic.
335
+ # Identifier may be a String or Locator.
336
+ #
337
+ # :call-seq:
338
+ # add_subject_locator(identifier)
339
+ #
340
+ def add_subject_locator(identifier)
341
+ # TODO Spec
342
+ begin
343
+ if identifier.is_a? Java::OrgTmapiCore::Locator
344
+ addSubjectLocator(identifier)
345
+ else
346
+ addSubjectLocator(topic_map.create_locator(identifier))
347
+ end
348
+ rescue org.tmapi.core.IdentityConstraintException => ice
349
+ # TODO add condition to switch off automerge
350
+ self.mergeIn(self.topic_map.topic_by_subject_locator(identifier))
351
+ end
352
+ end
305
353
 
306
354
  superised
307
355
  # Removes a subject locator from the this Topic,
@@ -313,7 +361,7 @@ module Java::OrgTmapiCore::Topic
313
361
  # remove_subject_locator(identifier)
314
362
  #
315
363
  def remove_subject_locator(identifier)
316
- identifier = topic_map.create_locator(identifier) if identifier.is_a? String
364
+ identifier = topic_map.create_locator(identifier) if identifier.is_a? String
317
365
  removeSubjectLocator(identifier) if identifier.is_a? Java::OrgTmapiCore::Locator
318
366
  end
319
367
 
@@ -332,12 +380,12 @@ module Java::OrgTmapiCore::Topic
332
380
  # end
333
381
 
334
382
  superised
335
- # Adds a type given by the identifier to this Topic.
383
+ # Adds a type given by the identifier to this Topic.
336
384
  #
337
- # Identifier may be a Topic or Topic-Reference.
385
+ # Identifier may be a topic reference.
338
386
  #
339
387
  # :call-seq:
340
- # add_type(identifier)
388
+ # add_type(identifier)
341
389
  #
342
390
  def add_type(identifier)
343
391
  if identifier.is_a?(Java::OrgTmapiCore::Topic)
@@ -351,7 +399,7 @@ module Java::OrgTmapiCore::Topic
351
399
 
352
400
  # Adds one or several types given by the identifiers.
353
401
  #
354
- # Identifier may be a Topic or Topic-Reference.
402
+ # Identifier may be a topic reference.
355
403
  #
356
404
  # :call-seq:
357
405
  # add_types(identifier1, identifier2, ...)
@@ -364,12 +412,12 @@ module Java::OrgTmapiCore::Topic
364
412
  end
365
413
 
366
414
 
367
- # Adds an instance given by the identifier to this Topic.
415
+ # Adds an instance given by the identifier to this Topic.
368
416
  #
369
- # Identifier may be a Topic or Topic-Reference.
417
+ # Identifier may be a topic reference.
370
418
  #
371
419
  # :call-seq:
372
- # add_instance(identifier)
420
+ # add_instance(identifier)
373
421
  #
374
422
  def add_instance(identifier)
375
423
  if identifier.is_a?(Java::OrgTmapiCore::Topic)
@@ -383,7 +431,7 @@ module Java::OrgTmapiCore::Topic
383
431
 
384
432
  # Adds one or several instances given by the identifiers.
385
433
  #
386
- # Identifier may be a Topic or Topic-Reference.
434
+ # Identifier may be a topic reference.
387
435
  #
388
436
  # :call-seq:
389
437
  # add_instances(identifier1, identifier2, ...)
@@ -416,17 +464,17 @@ module Java::OrgTmapiCore::Topic
416
464
  #
417
465
  def reified=(identifier)
418
466
  if identifier.is_a?(Java::OrgTmapiCore::Reifiable)
419
- identifier.reifier = self
467
+ identifier.reifier = self
420
468
  return
421
469
  end
422
470
  raise("reified=: Identifier may be a Name, Variant, Occurrence, Association, Role or TopicMap")
423
471
  end
424
472
 
425
473
  superised
426
- # Removes a type given by the identifier from this Topic,
474
+ # Removes a type given by the identifier of this topic,
427
475
  # if present.
428
476
  #
429
- # Identifier may be a Topic or Topic-Reference.
477
+ # Identifier may be a topic reference.
430
478
  #
431
479
  # :call-seq:
432
480
  # remove_type(identifier)
@@ -440,6 +488,19 @@ module Java::OrgTmapiCore::Topic
440
488
  end
441
489
  end
442
490
 
491
+ # Removes an instance given by the identifier of this topic,
492
+ # if present.
493
+ #
494
+ # Identifier may be a topic reference.
495
+ #
496
+ # :call-seq:
497
+ # remove_instance(identifier)
498
+ #
499
+ def remove_instance(identifier)
500
+ identifier = topic_map.get(identifier)
501
+ return unless identifier
502
+ identifier.removeType(self)
503
+ end
443
504
 
444
505
  # TODO extend this, maybe allow for a removal of any topic no matter how important
445
506
  # it may be for the whole topic map
@@ -448,6 +509,16 @@ module Java::OrgTmapiCore::Topic
448
509
  self.remove
449
510
  end
450
511
 
512
+ private
513
+ def new_empty_java_topic_array
514
+ [].to_java(org.tmapi.core.Topic)
515
+ end
516
+
517
+ class NoDatatypeHandlerAvailableException < Exception
518
+ def initialize(value)
519
+ super "Cannot map #{value} to an occurrence value+datatype. Maybe you need to add a handler for your Ruby object type."
520
+ end
521
+ end
451
522
  end
452
523
 
453
524