ontomde-core 1.0.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/History.txt +3 -0
  2. data/Manifest.txt +95 -21
  3. data/README.txt +19 -1
  4. data/Rakefile +1 -1
  5. data/bin/ontomde-inspector +6 -0
  6. data/lib/ontomde-core/clone.rb +1 -1
  7. data/lib/ontomde-core/completion.rb +47 -0
  8. data/lib/ontomde-core/context.rb +32 -11
  9. data/lib/ontomde-core/converter-ea/XMI2RDFS.xslt +805 -0
  10. data/lib/ontomde-core/converter-ea/msxsl.exe +0 -0
  11. data/lib/ontomde-core/custom_method_missing.rb +24 -1
  12. data/lib/ontomde-core/fileLoader.rb +71 -14
  13. data/lib/ontomde-core/fileTypes.rb +7 -0
  14. data/lib/ontomde-core/helper.rb +141 -15
  15. data/lib/ontomde-core/inspector/loader.rb +69 -0
  16. data/lib/ontomde-core/inspector/rails/README +203 -0
  17. data/lib/ontomde-core/inspector/rails/Rakefile +10 -0
  18. data/lib/ontomde-core/inspector/rails/app/controllers/application.rb +10 -0
  19. data/lib/ontomde-core/inspector/rails/app/controllers/mtk_controller.rb +349 -0
  20. data/lib/ontomde-core/inspector/rails/app/helpers/application_helper.rb +3 -0
  21. data/lib/ontomde-core/inspector/rails/app/helpers/mtk_helper.rb +20 -0
  22. data/lib/ontomde-core/inspector/rails/app/views/layouts/mtk.rhtml +161 -0
  23. data/lib/ontomde-core/inspector/rails/app/views/mtk/clear.rhtml +5 -0
  24. data/lib/ontomde-core/inspector/rails/app/views/mtk/index.rhtml +1 -0
  25. data/lib/ontomde-core/inspector/rails/app/views/mtk/last_generated.rhtml +7 -0
  26. data/lib/ontomde-core/inspector/rails/app/views/mtk/model.html.erb +6 -0
  27. data/lib/ontomde-core/inspector/rails/app/views/mtk/not_found.rhtml +2 -0
  28. data/lib/ontomde-core/inspector/rails/app/views/mtk/search_form.rhtml +30 -0
  29. data/lib/ontomde-core/inspector/rails/app/views/mtk/search_result.rhtml +8 -0
  30. data/lib/ontomde-core/inspector/rails/app/views/mtk/setup_form.rhtml +42 -0
  31. data/lib/ontomde-core/inspector/rails/app/views/mtk/show.rhtml +172 -0
  32. data/lib/ontomde-core/inspector/rails/app/views/mtk/show_many.rhtml +25 -0
  33. data/lib/ontomde-core/inspector/rails/config/boot.rb +109 -0
  34. data/lib/ontomde-core/inspector/rails/config/database.yml +19 -0
  35. data/lib/ontomde-core/inspector/rails/config/environment.rb +60 -0
  36. data/lib/ontomde-core/inspector/rails/config/environments/development.rb +18 -0
  37. data/lib/ontomde-core/inspector/rails/config/environments/production.rb +19 -0
  38. data/lib/ontomde-core/inspector/rails/config/environments/test.rb +22 -0
  39. data/lib/ontomde-core/inspector/rails/config/initializers/inflections.rb +10 -0
  40. data/lib/ontomde-core/inspector/rails/config/initializers/mime_types.rb +5 -0
  41. data/lib/ontomde-core/inspector/rails/config/routes.rb +35 -0
  42. data/lib/ontomde-core/inspector/rails/doc/README_FOR_APP +2 -0
  43. data/lib/ontomde-core/inspector/rails/log/development.log +0 -0
  44. data/lib/ontomde-core/inspector/rails/log/production.log +0 -0
  45. data/lib/ontomde-core/inspector/rails/log/server.log +0 -0
  46. data/lib/ontomde-core/inspector/rails/log/test.log +0 -0
  47. data/lib/ontomde-core/inspector/rails/public/.htaccess +40 -0
  48. data/lib/ontomde-core/inspector/rails/public/404.html +30 -0
  49. data/lib/ontomde-core/inspector/rails/public/422.html +30 -0
  50. data/lib/ontomde-core/inspector/rails/public/500.html +30 -0
  51. data/lib/ontomde-core/inspector/rails/public/dispatch.cgi +10 -0
  52. data/lib/ontomde-core/inspector/rails/public/dispatch.fcgi +24 -0
  53. data/lib/ontomde-core/inspector/rails/public/dispatch.rb +10 -0
  54. data/lib/ontomde-core/inspector/rails/public/favicon.ico +0 -0
  55. data/lib/ontomde-core/inspector/rails/public/images/logoMDE.gif +0 -0
  56. data/lib/ontomde-core/inspector/rails/public/images/rails.png +0 -0
  57. data/lib/ontomde-core/inspector/rails/public/javascripts/application.js +2 -0
  58. data/lib/ontomde-core/inspector/rails/public/javascripts/controls.js +963 -0
  59. data/lib/ontomde-core/inspector/rails/public/javascripts/dragdrop.js +972 -0
  60. data/lib/ontomde-core/inspector/rails/public/javascripts/effects.js +1120 -0
  61. data/lib/ontomde-core/inspector/rails/public/javascripts/prototype.js +4225 -0
  62. data/lib/ontomde-core/inspector/rails/public/robots.txt +5 -0
  63. data/lib/ontomde-core/inspector/rails/script/about +3 -0
  64. data/lib/ontomde-core/inspector/rails/script/console +3 -0
  65. data/lib/ontomde-core/inspector/rails/script/destroy +3 -0
  66. data/lib/ontomde-core/inspector/rails/script/generate +3 -0
  67. data/lib/ontomde-core/inspector/rails/script/performance/benchmarker +3 -0
  68. data/lib/ontomde-core/inspector/rails/script/performance/profiler +3 -0
  69. data/lib/ontomde-core/inspector/rails/script/performance/request +3 -0
  70. data/lib/ontomde-core/inspector/rails/script/plugin +3 -0
  71. data/lib/ontomde-core/inspector/rails/script/process/inspector +3 -0
  72. data/lib/ontomde-core/inspector/rails/script/process/reaper +3 -0
  73. data/lib/ontomde-core/inspector/rails/script/process/spawner +3 -0
  74. data/lib/ontomde-core/inspector/rails/script/runner +3 -0
  75. data/lib/ontomde-core/inspector/rails/script/server +3 -0
  76. data/lib/ontomde-core/inspector/rails/test/test_helper.rb +38 -0
  77. data/lib/ontomde-core/inspector/rails/vendor/plugins/auto_complete/README +23 -0
  78. data/lib/ontomde-core/inspector/rails/vendor/plugins/auto_complete/Rakefile +22 -0
  79. data/lib/ontomde-core/inspector/rails/vendor/plugins/auto_complete/init.rb +2 -0
  80. data/lib/ontomde-core/inspector/rails/vendor/plugins/auto_complete/lib/auto_complete.rb +47 -0
  81. data/lib/ontomde-core/inspector/rails/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb +143 -0
  82. data/lib/ontomde-core/inspector/rails/vendor/plugins/auto_complete/test/auto_complete_test.rb +67 -0
  83. data/lib/ontomde-core/inspector/setup_rails.sh +39 -0
  84. data/lib/ontomde-core/inspector.rb +21 -0
  85. data/lib/ontomde-core/meta.rb +6 -5
  86. data/lib/ontomde-core/resource.rb +6 -6
  87. data/lib/ontomde-core/resourceSet.rb +7 -6
  88. data/lib/ontomde-core/triplet.rb +2 -0
  89. data/lib/ontomde-core/version.rb +1 -1
  90. data/test/protege/test_demo.rb +1 -1
  91. data/test/test_context.rb +1 -1
  92. data/test/test_protected.rb +11 -11
  93. data/test/test_uri.rb +1 -1
  94. data/test/unit_test_crash.rb +1 -1
  95. metadata +105 -29
@@ -6,9 +6,22 @@
6
6
 
7
7
 
8
8
  def method_missing(methId,args=nil)
9
+ objinfo="-"
10
+ if self.kind_of?(Mrdf_Resource)
11
+ objinfo= <<END
12
+ **** For ressource of type #{self.class.name}
13
+ **** and uri=#{rdf_uri}
14
+ ****
15
+ **** This model element is related to these other model elements:
16
+ #{mtk_related_message}
17
+ END
18
+ end
19
+
9
20
  msg=respond_to?(:rdf_uri) ? "#{rdf_uri}" : "nil"
10
- log.error { "method #{methId} not available for object of class #{self.class.name}, (uri=#{msg})(to_s=#{self})" }
21
+ log.error { "method #{methId} not available for object of class #{self.class.name}, (uri=#{msg})(to_s=#{self}) #{objinfo}" }
11
22
 
23
+
24
+
12
25
  if msg=="ukb_null"
13
26
  log.error { <<END
14
27
  ********** INVALID MODEL DETECTED **********
@@ -40,6 +53,8 @@ END
40
53
  "Available methods are: #{msg}"
41
54
  }
42
55
 
56
+
57
+
43
58
  #self.included_modules.each { |m|
44
59
  # #puts "include #{m}"
45
60
  # }
@@ -50,3 +65,11 @@ END
50
65
  throw NoMethodError.new("method missing '#{methId}' for object '#{self.class.name}'",methId,args)
51
66
  #exit
52
67
  end
68
+
69
+
70
+ class Crdf_Resource
71
+ def method_missing(methId,args=nil)
72
+
73
+ super
74
+ end
75
+ end
@@ -59,12 +59,12 @@ class NTripleFile < NTriple
59
59
 
60
60
 
61
61
  def isOntoMDXHeader?
62
- return @line.to_s=="#!ontomdx\n"
62
+ return @line.to_s=="#!ontomde\n"
63
63
  end
64
64
  end
65
65
 
66
- module Mrdf_Model
67
- def loadMetaModelFromFile(fileName,ignoreHeader=false)
66
+ module Mrdf_Repository
67
+ def loadMetaModelFromFile(fileName,ignoreHeader=true)
68
68
  @updateCount=@updateCount+1
69
69
  raise Exception.new("nil fileName passed to loadMetaModelFromFile") if fileName.nil?
70
70
  m=fileName+".rb"
@@ -82,11 +82,23 @@ module Mrdf_Model
82
82
  end
83
83
  end
84
84
 
85
- def loadModelFromFile (srcFileName,ignoreHeader=false)
85
+
86
+
87
+ # loads a model from srcFileName
88
+ #
89
+ # Source model is in RDF/NT or RDF/XML format.
90
+ #
91
+ # When ignoreHeader=false, presence of a special ontomde header is checked.
92
+ #Example:
93
+ # loadModelFromFile("MyUmlModelFile.nt")
94
+ # loadModelFromFile("MyDslModelFile.nt")
95
+ # loadModelFromFile("MyDslModelFile.xml")
96
+ def loadModelFromFile (srcFileName,ignoreHeader=true)
97
+ #Converts from RDF/XML to RDF/NT when needed.
86
98
  fileName=translateToNt(srcFileName)
99
+
87
100
  @updateCount=@updateCount+1
88
- #Crdf_Resource.new(self,"xx").initUpdate
89
- [false,true].each { |modeData|
101
+ [MODE_parseModelStream_CREATE_INSTANCES,MODE_parseModelStream_POPULATE_FIELDS].each { |modeData|
90
102
  begin
91
103
  File.open(fileName,"r") { |aFile|
92
104
  parseModelStream(aFile,modeData,ignoreHeader)
@@ -97,6 +109,16 @@ module Mrdf_Model
97
109
  }
98
110
  end
99
111
 
112
+
113
+ #in this mode, parseModelStream only creates object instances
114
+ #without populating fields
115
+ MODE_parseModelStream_CREATE_INSTANCES=false
116
+
117
+ #In this mode, parseModelSTream does not create new objects instances
118
+ #and only populate model fields.
119
+ MODE_parseModelStream_POPULATE_FIELDS=!MODE_parseModelStream_CREATE_INSTANCES
120
+
121
+ #Populate model objects and fields from RDF stream.
100
122
  def parseModelStream(stream,modeData,ignoreHeader=false)
101
123
  aFile=stream
102
124
  i=0
@@ -110,11 +132,11 @@ module Mrdf_Model
110
132
  ignoreHeader=true
111
133
  next if nt.isOntoMDXHeader?
112
134
  p="\nERROR *** "
113
- raise Exception.new("#{p}#{p}ontomdx was given a model file without#{p}a valid ontomdx plugin file header.#{p}If you have used a model file created by a modeler plugin,#{p}upgrade your plugin.#{p}Il you have used a plain RDF or RDFS file,#{p}specify ignoreHeader=true when loading model with loadModel.#{p}\n")
135
+ raise Exception.new("#{p}#{p}ontomde was given a model file without#{p}a valid ontomde plugin file header.#{p}If you have used a model file created by a modeler plugin,#{p}upgrade your plugin.#{p}Il you have used a plain RDF or RDFS file,#{p}specify ignoreHeader=true when loading model with loadModel.#{p}\n")
114
136
  end
115
137
 
116
138
  next if nt.isComment?
117
- parse(nt,modeData)
139
+ parseNT(nt,modeData)
118
140
  rescue WarningRubyTypeUndefined => z
119
141
  log.error "WARNING ["+(modeData ? "data":"res")+" :nt.line "+i.to_s+", "+z.to_s+", Will create a default type. Possible discrepancies if defined later on. In case of problem, Consider bootstraping]:"+nt.line
120
142
  #log.debug "z.res=#{z.res}"
@@ -137,7 +159,7 @@ module Mrdf_Model
137
159
  end
138
160
 
139
161
  PLATFORM_IS_JAVA=!(RUBY_PLATFORM.index("java").nil?)
140
- OS_IS_WINDOWS=!(ENV['OS'].index("Windows").nil?)
162
+ OS_IS_WINDOWS=!(ENV['OS'].nil? ? true : ENV['OS'].index("Windows").nil?)
141
163
 
142
164
  puts(%{O/S detected: #{OS_IS_WINDOWS ? "WINDOWS" : "*nix"}})
143
165
  puts(%{Ruby platform detected: #{PLATFORM_IS_JAVA ? "Java" : "C"}})
@@ -150,23 +172,58 @@ module Mrdf_Model
150
172
  cmd="rapper "+param
151
173
  elsif PLATFORM_IS_JAVA
152
174
  #We are under windows but under jruby
153
- cmd=WIN_PATH_RAPPER+" "+param
175
+ cmd=::Mrdf_Model::WIN_PATH_RAPPER+" "+param
154
176
  else
155
177
  #We are under windows but under Matz Ruby Implementation (MRI)
156
- cmd='"'+WIN_PATH_RAPPER+'"'+param
178
+ cmd='"'+::Mrdf_Model::WIN_PATH_RAPPER+'"'+param
157
179
  end
158
180
  return if system(cmd)
159
- raise Exception.new("\n***\n***Error running command\n***\n***#{cmd}\n***\n")
181
+ msg=<<END
182
+ ***
183
+ *** Error running rapper #{"external " if OS_IS_WINDOWS }binary executable.
184
+ *** #{cmd}
185
+ *** #{"UBUNTU user should install raptor-utils package." if !OS_IS_WINDOWS}
186
+ ***
187
+ END
188
+ raise Exception.new(msg)
189
+ end
160
190
 
191
+
192
+ def translateEAXMI_to_NT(eaxmifile)
193
+ translatedfile="#{eaxmifile}_tmp.nt"
194
+ param="#{eaxmifile} -o #{translatedfile} #{File.dirname(__FILE__)}\\converter-ea\\XMI2RDFS.xslt"
195
+ if ! OS_IS_WINDOWS
196
+ #we are not under windows
197
+ #built in rapper cannot be used (it is for windows)
198
+ #we use rapper available in path.
199
+ raise Exception.new("TODO: use xslt under linux")
200
+ elsif PLATFORM_IS_JAVA
201
+ #We are under windows but under jruby
202
+ cmd="#{File.dirname(__FILE__)}\\converter-ea\\msxsl.exe "+param.tr('/','\\\\')
203
+ else
204
+ #We are under windows but under Matz Ruby Implementation (MRI)
205
+ cmd="#{File.dirname(__FILE__)}\\converter-ea\\msxsl.exe "+param.tr('/','\\\\')
206
+ end
207
+ return translateXMLRDF_to_NT(translatedfile) if system(cmd)
208
+ raise Exception.new("\n***\n***Error running command\n***\n***#{cmd}\n***\n")
161
209
  end
210
+
211
+ #returns a filename containing a ntriple version of file in srcfilename.
162
212
  def translateToNt(srcFileName)
163
- return srcFileName if ! (srcFileName=~/.rdfs*$/ )
213
+ return translateXMLRDF_to_NT(srcFileName) if (srcFileName=~/\.rdfs*$/ )
214
+ return translateEAXMI_to_NT(srcFileName) if (srcFileName=~/\.ea\.xmi*$/ )
215
+
216
+ #no conversion necessary
217
+ return srcFileName
218
+ end
164
219
 
220
+ def translateXMLRDF_to_NT(srcFileName)
165
221
  fileName="#{srcFileName}.cache.deleteMe.nt"
222
+ mtk_addTempFileToDelete(fileName)
166
223
  if( context[:useTranslateToNtCache,false] && File.exists?(fileName) && File.mtime(fileName) > File.mtime(srcFileName) )
167
224
  #log.debug "INFO:Using cache in #{fileName}"
168
225
  else
169
- raise "Blanc dans nom de fichier non supportes sous windows" if fileName.include?(" ")
226
+ raise "white space in rdf file names not supported under windows" if fileName.include?(" ")
170
227
  if !OS_IS_WINDOWS
171
228
  param=' -q -o ntriples -i rdfxml '+srcFileName+' > '+fileName
172
229
  else
@@ -72,6 +72,7 @@ class FileTypeJava < FileType
72
72
  end
73
73
  FileTypeJava.instance # register
74
74
 
75
+
75
76
  class FileTypeXML < FileType
76
77
  # a character that can not exist in a URI
77
78
  URI_ESCAPE_CHAR_ONE='°'
@@ -98,6 +99,12 @@ class FileTypeXML < FileType
98
99
  end
99
100
  FileTypeXML.instance # register
100
101
 
102
+ class FileTypeXSD < FileTypeXML
103
+ def initialize(ext=".xsd")
104
+ super
105
+ end
106
+ end
107
+ FileTypeXSD.instance # register
101
108
 
102
109
  class FileTypeJavaProperties < FileType
103
110
  def initialize(ext=".properties")
@@ -27,7 +27,7 @@ class LoadModelLazyWriter
27
27
 
28
28
  def [](key)
29
29
  if @model.nil?
30
- @model=Crdf_Model.new
30
+ @model=Crdf_Repository.new
31
31
  @model.mtk_retrieveProtected(@fileName,fileType)
32
32
  end
33
33
  if @usedResources.nil?
@@ -60,14 +60,14 @@ module Mrdf_Resource
60
60
  include Mmtk_helper
61
61
  end
62
62
 
63
- class Crdf_Model
63
+ class Crdf_Repository
64
64
  include Mmtk_helper
65
65
  end
66
66
  class Crdf_Resource
67
67
  include Mmtk_helper
68
68
  end
69
69
 
70
- module Mrdf_Model
70
+ module Mrdf_Repository
71
71
  include Mmtk_helper
72
72
  end
73
73
  module Mmtk_helper
@@ -120,6 +120,15 @@ module Mmtk_helper
120
120
  # }
121
121
  MTK_WRITE_SESSION_FILE_NAMES=Set.new
122
122
  def mtk_writeSession(fileName,fileType=nil)
123
+
124
+ #if a file exist named fileName.mda, then write to this
125
+ #file instead of fileName
126
+ divert=fileName+".mda"
127
+ if (File.exists?(divert))
128
+ fileType=FileType.getFileType(fileName) if fileType.nil?
129
+ fileName=divert
130
+ end
131
+
123
132
  # Open or create session
124
133
  mtk_writeSessionNameClashErrorDetection(fileName.to_s)
125
134
 
@@ -147,7 +156,7 @@ module Mmtk_helper
147
156
  }
148
157
  @@mtk_out=context.get(:mtk_out) # perf
149
158
  }
150
- #Le fichier temporaire a bien �t� g�n�r�.
159
+ #Temporary file has been corectly generated.
151
160
  unusedData=protectedReverse.unusedData
152
161
  if(!unusedData.nil?)
153
162
  log.info { "warning: saved code appended to #{fileName}.mtk_save" }
@@ -324,8 +333,19 @@ END
324
333
  #
325
334
  # Reverse the file currently being written by mtk_writeSession.
326
335
  # This method is automaticaly called
327
- def mtk_retrieveProtected(fileName,fileType)
336
+ def mtk_retrieveProtected(fileName,fileType)
328
337
  return false unless File.exists?(fileName)
338
+ globalFile=false
339
+ if context[:hasGlobalReverse,false]
340
+ if context[:globalReverseFile]!=fileName
341
+ return true if context[:reversedFiles].include?(File.basename(fileName))
342
+ raise Warning.new,"#{fileName} hasn't been reverse although this file exist !" if mtk_shouldAlreadyBeenReversed(fileName)
343
+ else
344
+ globalFile=true
345
+ endFilesName=false
346
+ endFilesExtension=false
347
+ end
348
+ end
329
349
 
330
350
  mtk_context(:mtk_fileName=>fileName) {
331
351
  File.open(fileName,'r') { |aFile|
@@ -337,6 +357,24 @@ END
337
357
 
338
358
  aFile.each_line { |line|
339
359
  i=i+1
360
+
361
+ if globalFile && !endFilesExtension
362
+ if !endFilesName
363
+ if line.include?("End_Files_Name")
364
+ endFilesName=true
365
+ else
366
+ context[:reversedFiles].concat(line[0,line.size-1].split(','))
367
+ end
368
+ else
369
+ if line.include?("End_Files_Extension")
370
+ endFilesExtension=true
371
+ else
372
+ context[:requireReverseExtensions].concat(line[0,line.size-1].split(','))
373
+ end
374
+ end
375
+ next
376
+ end
377
+
340
378
  if !reading
341
379
  #return if !line.include?("PROTECTED REGION XMDA BEGIN") # optimisation ?
342
380
  m=fileType.re_begin.match(line)
@@ -375,12 +413,18 @@ ENDERRORMSG
375
413
  end
376
414
  reading=false
377
415
  #log.debug "block_uri=#{block_uri} protected ->xxxxxxx\n#{buffer}xxxxxxxxxx"
378
- qualified_block_uri=mtk_qualifyBlockURI(block_uri)
379
416
  if reverseMode
380
- self[qualified_block_uri]=buffer[0,buffer.size-1]
417
+ buffer=buffer[0,buffer.size-1] unless buffer==''
418
+ if (!context[:hasGlobalReverse])
419
+ qualified_block_uri=mtk_qualifyBlockURI(block_uri)
420
+ self[qualified_block_uri]=buffer
421
+ else
422
+ qualified_block_uri=block_uri
423
+ context[:reverseGlobalMap][qualified_block_uri]=buffer
424
+ end
381
425
  open("reverse.log","a") {|r|
382
426
  r.write("\n### reverse #{qualified_block_uri}\n")
383
- r.write( "#{self[qualified_block_uri]} #{self[qualified_block_uri].length}")
427
+ r.write( "#{buffer} #{buffer.length}")
384
428
  } #unless context[:logFileReverse].nil?
385
429
  else
386
430
  #log.debug "Reverse ignored #{context[:mtk_fileName]}!"
@@ -391,6 +435,10 @@ ENDERRORMSG
391
435
  }}
392
436
  return true # un fichier a ete retro
393
437
  end
438
+
439
+ def mtk_shouldAlreadyBeenReversed(fileName)
440
+ return context[:requireReverseExtensions].include?(File.extname(fileName))
441
+ end
394
442
  end
395
443
 
396
444
  #module Mrdf_Resource
@@ -398,6 +446,7 @@ end
398
446
  module Mmtk_helper #_Resource
399
447
  REVERSE=true
400
448
  NOREVERSE=false
449
+ WITHOUT_MARKER=true
401
450
 
402
451
  # mtk_protected is used when generated code can be modified by user and preserved by subsequent generation.
403
452
  # The code generated in the block passed as parameter will be generated encolosed between identifiable tags.
@@ -443,30 +492,39 @@ module Mmtk_helper #_Resource
443
492
  # write("default code to be redefined by user");
444
493
  # }
445
494
  # }
446
- def mtk_protected(initialReverseMode=false,zoneId='0',&block)
495
+ def mtk_protected(initialReverseMode=false,zoneId='0',noMarker=false, &block)
447
496
  #mbu=mtk_block_uri
448
497
  raise Exception.new("Bad parameter") if initialReverseMode!=false && initialReverseMode!=true
449
498
  mbu="#{rdf_uri}__#{zoneId}"
450
- qualified_uri=rdf_model.mtk_qualifyBlockURI(mbu)
499
+ qualified_uri=rdf_Repository.mtk_qualifyBlockURI(mbu)
451
500
 
452
501
  fileType=context[:protectedReverse].fileType
502
+
453
503
  str=context[:protectedReverse][qualified_uri]
504
+ if context[:hasGlobalReverse,false]
505
+ str=context[:reverseGlobalMap][qualified_uri]
506
+ end
454
507
 
455
508
  reverse= (!str.nil?) || initialReverseMode
456
509
 
457
- if (!reverse) && context[:skipNoReverseMarker,false]
510
+ if noMarker
511
+ # do not use marker for this item
512
+ elsif(!reverse) && context[:skipNoReverseMarker,false]
458
513
  write(fileType.beginMarkerSkip(mbu,reverse))
459
514
  else
460
515
  write(fileType.beginMarker(mbu,reverse))
461
516
  end
462
-
463
517
  if str.nil?
464
518
  #log.debug "!!yield block_uri=#{mbu}"
465
- yield
519
+ ret=yield
520
+ write(ret) if ret.kind_of?(String)
466
521
  else
467
522
  write(str)
468
523
  end
469
- if (!reverse) && context[:skipNoReverseMarker,false]
524
+ if noMarker
525
+ write("\n") if !str.nil? && str!=""
526
+ # do not use marker for this item
527
+ elsif (!reverse) && context[:skipNoReverseMarker,false]
470
528
  write(fileType.endMarkerSkip(mbu))
471
529
  else
472
530
  write(fileType.endMarker(mbu))
@@ -475,16 +533,73 @@ module Mmtk_helper #_Resource
475
533
 
476
534
  #Stream to String Session
477
535
  def mtk_stss(&block)
478
- #@rdf_model.mtk_stringWriteSession(&block)
536
+ #@rdf_Repository.mtk_stringWriteSession(&block)
479
537
  mtk_stringWriteSession(&block)
480
538
  end
481
539
 
540
+ # same as #mtk_protected but for writes.
541
+ def mtk_wprotected(initialReverseMode=false,zoneId='0',&block)
542
+ mtk_protected(initialReverseMode=false,zoneId='0',&block)
543
+ end
544
+
545
+ # same as #mtk_protected but for string instead of writes.
546
+ def mtk_sprotected(initialReverseMode=false,zoneId='0',&block)
547
+ return mtk_stss { mtk_protected(initialReverseMode,zoneId,&block)}
548
+
549
+ end
482
550
  #internal method.
483
551
  #
484
552
  #Returns file descriptor currently used by mtk_writeSession.
485
553
  def mtk_out
486
554
  return context[:mtk_out]
487
555
  end
556
+
557
+
558
+ def mtk_annotation(initialReverseMode=false,zonesId=['annotations'],noMarker=false)
559
+ #mbu=mtk_block_uri
560
+ raise Exception.new("Bad parameter") if initialReverseMode!=false && initialReverseMode!=true
561
+
562
+ if !noMarker
563
+ revAnno=''
564
+ del=''
565
+
566
+ nothingReverse = true
567
+
568
+ zonesId.each{ |zone|
569
+ mbu="#{rdf_uri}__#{zone}"
570
+ qualified_uri=rdf_Repository.mtk_qualifyBlockURI(mbu)
571
+ if !context[:hasGlobalReverse,false]
572
+ str=context[:protectedReverse][qualified_uri]
573
+ else
574
+ str=context[:reverseGlobalMap][qualified_uri]
575
+ end
576
+
577
+
578
+ reverse= (!str.nil?) || initialReverseMode
579
+
580
+ if reverse
581
+ nothingReverse = false
582
+ revAnno+=del
583
+ del=','
584
+ if zone=='0'
585
+ revAnno+='code'
586
+ else
587
+ if zone=='annoparam0'
588
+ revAnno+='anno_param'
589
+ else
590
+ revAnno+=zone
591
+ end
592
+ end
593
+ end
594
+ }
595
+
596
+ if nothingReverse then
597
+ revAnno = 'nothing'
598
+ end
599
+
600
+ write("@OntoMDE(reverse={#{revAnno}},uri=\"#{rdf_uri}\")\n")
601
+ end
602
+ end
488
603
 
489
604
  end
490
605
 
@@ -545,3 +660,14 @@ class NullFileWriter
545
660
  end
546
661
  end
547
662
 
663
+
664
+ TEMP_FILE_TO_ERASE=[]
665
+ def mtk_addTempFileToDelete(fileName)
666
+ TEMP_FILE_TO_ERASE<<(fileName.to_s)
667
+ end
668
+
669
+ def mtk_deleteTempFiles
670
+ FileUtils.rm TEMP_FILE_TO_ERASE
671
+ end
672
+
673
+
@@ -0,0 +1,69 @@
1
+ require "set"
2
+
3
+ #This class is a singleton used for storing locations of model source files.
4
+ class Crdf_loader
5
+ include Singleton
6
+ attr_reader :rdf_Repository
7
+ attr_reader :availableProfiles,:activeProfiles
8
+ #attr_writer :availableProfiles,:activeProfiles
9
+ attr_reader :sourceFiles
10
+
11
+ def profiles
12
+ end
13
+
14
+ # Add fn file to the list of model source files and loads it.
15
+ # Note:
16
+ # source file is stored internaly as full path (expanded)
17
+ # because running program current directory is subject to change
18
+ # especialy when rails server is used.
19
+ def addModelFile(fn)
20
+ fn=File.expand_path(fn)
21
+ @sourceFiles << fn if !@sourceFiles.include?(fn)
22
+ @rdf_Repository.loadModelFromFile(fn)
23
+ #log.debug "fn=#{fn}"
24
+ #TODO: enlever les fragments
25
+ end
26
+
27
+ # clear current model and reloads it from file
28
+ def reset
29
+ #@rdf_Repository=Crdf_Repository.new
30
+ #TODO: supprimer adhérence UML
31
+ @rdf_Repository=model_for_inspector
32
+ #@rdf_Repository.loadUml2
33
+ @sourceFiles.each { |fn|
34
+ @rdf_Repository.loadModelFromFile(fn)
35
+ }
36
+ end
37
+
38
+ def initialize
39
+ log.debug "Crdf_loader: initialisation singleton"
40
+
41
+ #TODO: REWRITE (currently KO)
42
+ @sourceFiles=Array.new()
43
+ @availableProfiles=Set.new()
44
+ @availableProfiles.add("uml2/uml2.rb")
45
+ @availableProfiles.add("java/java.rb")
46
+ #@availableProfiles[2]="java/hibernate.rb"
47
+ @activeProfiles=Set.new()
48
+ log.debug "Crdf_loader: fin initialisation singleton"
49
+ reset
50
+ end
51
+ ## def loadProfile
52
+ ## log.warn "TODO: reecrire"
53
+ ## return
54
+ ## log.debug "loadProfile ...."
55
+ ## @availableProfiles.each { |prof|
56
+ ## if @activeProfiles.include?(prof)
57
+ ## #c=cookies[:user_name]
58
+ ## log.debug "load profile #{prof}"
59
+ ## require prof
60
+ ## else
61
+ ## log.debug "skip profile #{prof}"
62
+ ## require prof
63
+ ## end
64
+ ## }
65
+ ## load "uml2/uml2.rdfs.nt.rb"
66
+ ## end
67
+ end
68
+
69
+ #Crdf_loader.instance