lightmodels 0.1.1-java → 0.1.2-java
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 +7 -0
- data/lib/lightmodels/jsonser_nav.rb +7 -10
- data/lib/lightmodels/model_building.rb +52 -0
- data/lib/lightmodels/query.rb +36 -0
- data/lib/lightmodels/serialization.rb +55 -12
- metadata +21 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e868ed9d49df684c24f6d46cf9d35cfce53799f6
|
4
|
+
data.tar.gz: de01a21493b5d2086f6c8541b5d0332af366b769
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5107453b1cc675f8ddf165b09b27ece34c01c4f75d44a7379acbdc9f389047fe1e13c3e3897c7d8539492936bae32285e633cd55f781f17a89e98515929db447
|
7
|
+
data.tar.gz: 0fd9d3b21944811c6e73763c24b925b54e9b8edd5fd4879553489b5097592a77c71cb8304509e63c6ae3720890636ebfc6e1d9a0e6df715dccb62560e63ac5fd
|
@@ -3,29 +3,28 @@
|
|
3
3
|
|
4
4
|
module LightModels
|
5
5
|
|
6
|
-
module Json
|
7
|
-
|
8
6
|
module Query
|
9
7
|
|
10
|
-
def rel_conts(root)
|
8
|
+
def self.rel_conts(root)
|
11
9
|
root.keys.select {|k| k.start_with? 'relcont_'}
|
12
10
|
end
|
13
11
|
|
14
|
-
def rel_non_conts(root)
|
12
|
+
def self.rel_non_conts(root)
|
15
13
|
root.keys.select {|k| k.start_with? 'relcont_'}
|
16
14
|
end
|
17
15
|
|
18
|
-
def attrs(root)
|
16
|
+
def self.attrs(root)
|
19
17
|
root.keys.select {|k| k.start_with? 'attr_'}
|
20
18
|
end
|
21
19
|
|
22
|
-
def values(root,feat)
|
20
|
+
def self.values(root,feat)
|
23
21
|
raw = root[feat]
|
22
|
+
return [] if raw==nil
|
24
23
|
return raw if raw.is_a? Array
|
25
24
|
return [raw]
|
26
25
|
end
|
27
26
|
|
28
|
-
def traverse(root,depth=0,&op)
|
27
|
+
def self.traverse(root,depth=0,&op)
|
29
28
|
return traverse(root['root'],depth,&op) if root and (root.key? 'root')
|
30
29
|
op.call(root,depth)
|
31
30
|
return unless root
|
@@ -41,7 +40,7 @@ module Query
|
|
41
40
|
end
|
42
41
|
end
|
43
42
|
|
44
|
-
def print_tree(root,depth=0)
|
43
|
+
def self.print_tree(root,depth=0)
|
45
44
|
traverse(root) do |n,d|
|
46
45
|
s = ""
|
47
46
|
d.times { s = s + " " }
|
@@ -53,6 +52,4 @@ module Query
|
|
53
52
|
|
54
53
|
end
|
55
54
|
|
56
|
-
end
|
57
|
-
|
58
55
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'lightmodels/serialization'
|
2
|
+
|
3
|
+
module LightModels
|
4
|
+
|
5
|
+
module ModelBuilding
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :verbose
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.generate_models_in_dir(src,dest,src_extension,dest_extension,max_nesting=500,error_handler=nil,&model_creator)
|
12
|
+
puts "== #{src} -> #{dest} ==" if LightModels::ModelBuilding.verbose
|
13
|
+
Dir["#{src}/*"].each do |fd|
|
14
|
+
if File.directory? fd
|
15
|
+
basename = File.basename(fd)
|
16
|
+
generate_models_in_dir("#{src}/#{basename}","#{dest}/#{basename}",src_extension,dest_extension,max_nesting,error_handler,&model_creator)
|
17
|
+
else
|
18
|
+
if File.extname(fd)==".#{src_extension}"
|
19
|
+
translated_simple_name = "#{File.basename(fd, ".#{src_extension}")}.#{dest_extension}"
|
20
|
+
translated_name = "#{dest}/#{translated_simple_name}"
|
21
|
+
puts "* #{fd} --> #{translated_name}" if LightModels::ModelBuilding.verbose
|
22
|
+
generate_model_per_file(fd,translated_name,max_nesting,error_handler,&model_creator)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.generate_model_per_file(src,dest,max_nesting=500,error_handler=nil,&models_generator)
|
29
|
+
if not File.exist? dest
|
30
|
+
puts "<Model from #{src}>"
|
31
|
+
|
32
|
+
if error_handler
|
33
|
+
begin
|
34
|
+
m = models_generator.call(src)
|
35
|
+
LightModels::Serialization.save_model(m,dest,max_nesting)
|
36
|
+
rescue Exception => e
|
37
|
+
error_handler.call(src,e)
|
38
|
+
rescue
|
39
|
+
error_handler.call(src,nil)
|
40
|
+
end
|
41
|
+
else
|
42
|
+
m = models_generator.call(src)
|
43
|
+
LightModels::Serialization.save_model(m,dest,max_nesting)
|
44
|
+
end
|
45
|
+
else
|
46
|
+
puts "skipping #{src} because #{dest} found" if LightModels::ModelBuilding.verbose
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'lightmodels/jsonser_nav'
|
3
|
+
|
4
|
+
module LightModels
|
5
|
+
|
6
|
+
module Query
|
7
|
+
|
8
|
+
# the set of values appearing in the object and its children
|
9
|
+
def self.collect_values(el)
|
10
|
+
values = Set.new
|
11
|
+
rel_conts(el).each do |r|
|
12
|
+
values(el,r).each {|c| values.merge(collect_values(c))}
|
13
|
+
end
|
14
|
+
attrs(el).each do |a|
|
15
|
+
values(el,a).each {|v| values.add(v)}
|
16
|
+
end
|
17
|
+
values
|
18
|
+
end
|
19
|
+
|
20
|
+
# a counting map values appearing in the object and its children
|
21
|
+
def self.collect_values_with_count(el)
|
22
|
+
values = Hash.new {|h,k| h[k]=0}
|
23
|
+
rel_conts(el).each do |r|
|
24
|
+
LightModels::Query.values(el,r).each do |ch|
|
25
|
+
collect_values_with_count(ch).each {|v,count| values[v]+=count}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
attrs(el).each do |a|
|
29
|
+
LightModels::Query.values(el,a).each {|v| values[v]+=1 }
|
30
|
+
end
|
31
|
+
values
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# containing lists and single values
|
3
3
|
|
4
4
|
require 'json'
|
5
|
+
require 'fileutils'
|
5
6
|
|
6
7
|
module LightModels
|
7
8
|
|
@@ -24,13 +25,21 @@ def self.serialization_id(obj)
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def self.qname(e_object)
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
if e_object.respond_to? :eClass
|
29
|
+
e_class = e_object.eClass
|
30
|
+
e_package = e_class.ePackage
|
31
|
+
"#{e_package.nsURI}##{e_class.name}"
|
32
|
+
else
|
33
|
+
e_object.class.to_s
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
def self.jsonize_attr_value(map,e_object,e_attr)
|
33
|
-
|
38
|
+
if e_object.respond_to? :eGet
|
39
|
+
value = e_object.eGet e_attr
|
40
|
+
else
|
41
|
+
value = e_object.send e_attr.name.to_sym
|
42
|
+
end
|
34
43
|
if e_attr.upperBound==1
|
35
44
|
map["attr_#{e_attr.name}"] = value
|
36
45
|
else
|
@@ -51,7 +60,11 @@ def self.jsonize_ref_single_el(single_value,containment,adapters)
|
|
51
60
|
end
|
52
61
|
|
53
62
|
def self.jsonize_ref_value(map,e_object,e_ref,adapters)
|
54
|
-
|
63
|
+
if e_object.respond_to? :eGet
|
64
|
+
value = e_object.eGet e_ref
|
65
|
+
else
|
66
|
+
value = e_object.send e_ref.name.to_sym
|
67
|
+
end
|
55
68
|
|
56
69
|
propname = "relcont_#{e_ref.name}" if e_ref.containment
|
57
70
|
propname = "relnoncont_#{e_ref.name}" if not e_ref.containment
|
@@ -61,7 +74,11 @@ def self.jsonize_ref_value(map,e_object,e_ref,adapters)
|
|
61
74
|
else
|
62
75
|
l = []
|
63
76
|
(0..(value.size-1)).each do |i|
|
64
|
-
|
77
|
+
if value.is_a? Array
|
78
|
+
l << jsonize_ref_single_el(value.at(i),e_ref.containment,adapters)
|
79
|
+
else
|
80
|
+
l << jsonize_ref_single_el(value.get(i),e_ref.containment,adapters)
|
81
|
+
end
|
65
82
|
end
|
66
83
|
map[propname] = l
|
67
84
|
end
|
@@ -72,7 +89,11 @@ def self.jsonize_obj(e_object, adapters={})
|
|
72
89
|
nil
|
73
90
|
else
|
74
91
|
map = { 'type' => qname(e_object), 'id' => serialization_id(e_object) }
|
75
|
-
|
92
|
+
if e_object.respond_to? :eClass
|
93
|
+
e_class = e_object.eClass
|
94
|
+
else
|
95
|
+
e_class = e_object.class.ecore
|
96
|
+
end
|
76
97
|
e_class.eAllAttributes.each do |a|
|
77
98
|
jsonize_attr_value(map,e_object,a)
|
78
99
|
end
|
@@ -87,8 +108,8 @@ def self.jsonize_obj(e_object, adapters={})
|
|
87
108
|
end
|
88
109
|
end
|
89
110
|
|
90
|
-
def self.load_file(path,max_nesting=
|
91
|
-
parse(File.read(path),{max_nesting: max_nesting})
|
111
|
+
def self.load_file(path,max_nesting=500)
|
112
|
+
JSON.parse(File.read(path),{max_nesting: max_nesting})
|
92
113
|
end
|
93
114
|
|
94
115
|
def self.load_models_from_dir(dir,verbose=false,max=-1)
|
@@ -118,7 +139,10 @@ def self.load_models_from_dir(dir,verbose=false,max=-1)
|
|
118
139
|
per_type_values_map
|
119
140
|
end
|
120
141
|
|
121
|
-
def self.
|
142
|
+
def self.eobject_to_model(root,adapters={})
|
143
|
+
@serialization_ids = {}
|
144
|
+
@next_serialization_id = 1
|
145
|
+
|
122
146
|
model = {}
|
123
147
|
external_elements = if root.eResource
|
124
148
|
root.eResource.contents.select {|e| e!=root}
|
@@ -126,7 +150,22 @@ def self.to_model(root)
|
|
126
150
|
[]
|
127
151
|
end
|
128
152
|
|
129
|
-
model['root'] = jsonize_obj(root)
|
153
|
+
model['root'] = jsonize_obj(root,adapters)
|
154
|
+
model['external_elements'] = []
|
155
|
+
external_elements.each do |ee|
|
156
|
+
model['external_elements'] << jsonize_obj(ee)
|
157
|
+
end
|
158
|
+
model
|
159
|
+
end
|
160
|
+
|
161
|
+
def self.rgenobject_to_model(root,adapters={})
|
162
|
+
@serialization_ids = {}
|
163
|
+
@next_serialization_id = 1
|
164
|
+
|
165
|
+
model = {}
|
166
|
+
external_elements = []
|
167
|
+
|
168
|
+
model['root'] = jsonize_obj(root,adapters)
|
130
169
|
model['external_elements'] = []
|
131
170
|
external_elements.each do |ee|
|
132
171
|
model['external_elements'] << jsonize_obj(ee)
|
@@ -136,11 +175,15 @@ end
|
|
136
175
|
|
137
176
|
def self.save_as_model(root,model_path)
|
138
177
|
model = to_model(root)
|
178
|
+
save_model(model,model_path)
|
179
|
+
end
|
180
|
+
|
181
|
+
def self.save_model(model,model_path, max_nesting=500)
|
139
182
|
dir = File.dirname(model_path)
|
140
183
|
FileUtils.mkdir_p(dir)
|
141
184
|
|
142
185
|
File.open(model_path, 'w') do |file|
|
143
|
-
file.write(JSON.pretty_generate(model))
|
186
|
+
file.write(JSON.pretty_generate(model, :max_nesting => max_nesting))
|
144
187
|
end
|
145
188
|
end
|
146
189
|
|
metadata
CHANGED
@@ -1,48 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lightmodels
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.2
|
6
5
|
platform: java
|
7
6
|
authors:
|
8
7
|
- Federico Tomassetti
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-27 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: emf_jruby
|
16
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - '>='
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '0'
|
21
|
-
|
22
|
-
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
none: false
|
28
|
-
prerelease: false
|
29
|
-
type: :runtime
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: json
|
32
|
-
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
33
30
|
requirements:
|
34
31
|
- - '>='
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: '0'
|
37
|
-
|
38
|
-
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
37
|
requirements:
|
40
38
|
- - '>='
|
41
39
|
- !ruby/object:Gem::Version
|
42
40
|
version: '0'
|
43
|
-
none: false
|
44
|
-
prerelease: false
|
45
|
-
type: :runtime
|
46
41
|
description: Light format to store models. Mostly they are stored in Hash and Array.
|
47
42
|
email: f.tomassetti@gmail.com
|
48
43
|
executables: []
|
@@ -50,13 +45,16 @@ extensions: []
|
|
50
45
|
extra_rdoc_files: []
|
51
46
|
files:
|
52
47
|
- lib/lightmodels.rb
|
53
|
-
- ./lib/lightmodels/serialization.rb
|
54
|
-
- ./lib/lightmodels/model.rb
|
55
48
|
- ./lib/lightmodels/jsonser_nav.rb
|
49
|
+
- ./lib/lightmodels/model.rb
|
50
|
+
- ./lib/lightmodels/model_building.rb
|
51
|
+
- ./lib/lightmodels/query.rb
|
52
|
+
- ./lib/lightmodels/serialization.rb
|
56
53
|
- ./lib/lightmodels/stats.rb
|
57
54
|
homepage: http://federico-tomassetti.it
|
58
55
|
licenses: []
|
59
|
-
|
56
|
+
metadata: {}
|
57
|
+
post_install_message:
|
60
58
|
rdoc_options: []
|
61
59
|
require_paths:
|
62
60
|
- lib
|
@@ -65,17 +63,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
63
|
- - '>='
|
66
64
|
- !ruby/object:Gem::Version
|
67
65
|
version: '0'
|
68
|
-
none: false
|
69
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
67
|
requirements:
|
71
68
|
- - '>='
|
72
69
|
- !ruby/object:Gem::Version
|
73
70
|
version: '0'
|
74
|
-
none: false
|
75
71
|
requirements: []
|
76
|
-
rubyforge_project:
|
77
|
-
rubygems_version:
|
78
|
-
signing_key:
|
79
|
-
specification_version:
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 2.0.3
|
74
|
+
signing_key:
|
75
|
+
specification_version: 4
|
80
76
|
summary: Light format to store models
|
81
77
|
test_files: []
|