archestry_lookup 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +1 -0
- data/Gemfile +3 -0
- data/archestry_lookup.gemspec +29 -0
- data/lib/archestry_lookup.rb +45 -0
- data/lib/context/_refactor_dialog/constructors/DockedGroupings2AppFunctions.rb +28 -0
- data/lib/context/_refactor_dialog/constructors/Element2ModSend.rb +28 -0
- data/lib/context/_refactor_dialog/constructors/ElementsInElements.rb +29 -0
- data/lib/context/_refactor_dialog/data/1.ModReceive2GetData.rb +29 -0
- data/lib/context/_refactor_dialog/data/2.GetData2Elements.rb +29 -0
- data/lib/context/_refactor_dialog/data/3.GenData2Dest.rb +29 -0
- data/lib/context/_refactor_dialog/data/4.Results2GenData.rb +29 -0
- data/lib/context/_refactor_dialog/folder_lookup.rb +36 -0
- data/lib/context/_refactor_dialog/functional/1.Expect2Events.rb +28 -0
- data/lib/context/_refactor_dialog/functional/2.1.Events2AppEvent.rb +28 -0
- data/lib/context/_refactor_dialog/functional/2.2.1.Events2ModReceive.rb +28 -0
- data/lib/context/_refactor_dialog/functional/2.2.2.ModReceive2AppEvent.rb +28 -0
- data/lib/context/_refactor_dialog/functional/3.Appevent2EventBus.rb +28 -0
- data/lib/context/_refactor_dialog/functional/4.1.AppEvent2Elements.rb +28 -0
- data/lib/context/_refactor_dialog/functional/4.2.Elements2AppEvent.rb +28 -0
- data/lib/context/_refactor_dialog/functional/5.1.Element2ModElements.rb +28 -0
- data/lib/context/_refactor_dialog/functional/5.2.Element2ModSend.rb +27 -0
- data/lib/context/_refactor_dialog/functional/6.ModElementsSpecs.rb +28 -0
- data/lib/context/_refactor_dialog/functional/7.ElementChains.rb +28 -0
- data/lib/context/_refactor_dialog/main.rb +69 -0
- data/lib/context/archestry/library.rb +53 -0
- data/lib/context/archestry/prepost.rb +39 -0
- data/lib/objects/_old.rb +43 -0
- data/lib/objects/lookup.rb +152 -0
- data/lib/schema/schema.rb +38 -0
- data/lib/sql/dbhandlers.rb +81 -0
- data/lib/sql/lookup_mfv.rb +113 -0
- data/lib/sql/pre.rb +51 -0
- data/lib/sql/view2ModelElements.rb +227 -0
- data/lib/tooling/hash.rb +17 -0
- data/lib/tooling/log.rb +49 -0
- data/license.txt +428 -0
- metadata +123 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Lookup
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def lookup_functional_ElementChains(args, state, viewId, viewType)
|
17
|
+
queryName = __method__.to_s; queryName.slice! 'lookup_functional_'; queryName.to_sym
|
18
|
+
args[:dialectLookupQuery] = {queryName: queryName, cClass: 'TriggeringRelationship',
|
19
|
+
fClass: 'ApplicationFunction', fFqn: "#{state[:myAppName]}ElementSend*",
|
20
|
+
tClass: 'ApplicationFunction', tFqn: "#{state[:myAppName]}ElementSend*" }
|
21
|
+
|
22
|
+
dialectLookup(args, state, viewId, viewType)
|
23
|
+
dialectRepack(args, state, viewId, viewType, queryName)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Lookup
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def dialog_lookup_main(args, state)
|
17
|
+
dialog_lookup_main_constructor(args, state)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def dialog_lookup_main_constructor(args, state)
|
22
|
+
args[:stages][state[:dialectFolder]] = {codegenGlobal: {}, codegenPerView: {}, x: {}, panView: {lookup: {}}, perView: {}, constructor: {}}
|
23
|
+
###_constructors views
|
24
|
+
folderId = state[:dbhandler].execute("select id from folders where name in ('_constructors')")[0][0]
|
25
|
+
state[:dbhandler].execute("select folder_id, folder_version, model_version from folders_in_model where parent_folder_id in ('#{folderId}') and model_version = (select max(model_version) from folders_in_model where parent_folder_id in ('#{folderId}')) and folder_version = (select max(folder_version) from folders_in_model where parent_folder_id in ('#{folderId}'))").each do |conFolder|
|
26
|
+
|
27
|
+
state[:dbhandler].execute("select view_id as view_id2, view_version, model_version from views_in_model where parent_folder_id in ('#{conFolder[0]}') and model_version = (select max(model_version) from views_in_model where view_id in (view_id2))") do |row|
|
28
|
+
viewAtr = state[:dbhandler].execute("select name, version from views where id in ('#{row[0]}') and version = (select max(version) from views where id in ('#{row[0]}'))")
|
29
|
+
id = row[0].tr("-", "_")
|
30
|
+
|
31
|
+
args[:con_views][id] ||= {}
|
32
|
+
args[:con_views][id][:version] = row[1]
|
33
|
+
args[:con_views][id][:name] = state[:dialectFolder]
|
34
|
+
Dialog.logger.info "ArchestryLookup constructor view '#{viewAtr[0][0]}' (id #{id}, view ver.#{row[1]}, model ver.#{row[2]}) suits for me!"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def dialog_lookup_post(args, state)
|
40
|
+
args[:con_views].each do |viewId, _viewProps|
|
41
|
+
viewType = :constructors
|
42
|
+
lookup_constructors_DockedGroupings2AppFunctions(args, state, viewId, viewType)
|
43
|
+
lookup_constructors_Element2ModSend(args, state, viewId, viewType)
|
44
|
+
lookup_constructors_ElementsInElements(args, state, viewId, viewType)
|
45
|
+
end
|
46
|
+
|
47
|
+
args[:views].each do |viewId, viewProps|
|
48
|
+
viewType = :perView
|
49
|
+
ArchestryLookup.logger.debug "ArchestryLookup_lookup RUN instance '#{state[:dialectFolder]}' view '#{viewProps[:name]}' ver.#{viewProps[:version]}"
|
50
|
+
###functional
|
51
|
+
lookupStruct = {'functional' => [
|
52
|
+
'Expect2Events', 'Events2AppEvent', 'Events2ModReceive', 'ModReceive2AppEvent',
|
53
|
+
'Appevent2EventBus', 'AppEvent2Elements', 'Elements2AppEvent', 'Element2ModElements',
|
54
|
+
'Element2ModSend', 'ModElementsSpecs', 'ElementChains']}
|
55
|
+
#1
|
56
|
+
lookup_run(args, lookupStruct, state, viewId, viewType)
|
57
|
+
|
58
|
+
###data
|
59
|
+
lookupStruct = {'data' => [
|
60
|
+
'ModReceive2GetData', 'GetData2Elements', 'GenData2Dest', 'Results2GenData']}
|
61
|
+
#1
|
62
|
+
lookup_run(args, lookupStruct, state, viewId, viewType)
|
63
|
+
###
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Schema
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def getObjLookupSchema
|
17
|
+
lookupQuery = {}
|
18
|
+
lookupQuery[:all] = {cClass: '*',
|
19
|
+
fClass: '*', fPropsK: "*", fPropsV: "*",
|
20
|
+
tClass: '*', tPropsK: "*", tPropsV: "*" }
|
21
|
+
|
22
|
+
lookupQuery[:app] = {cClass: '*',
|
23
|
+
fClass: 'Application*', fPropsK: "*", fPropsV: "*",
|
24
|
+
tClass: 'Application*', tPropsK: "*", tPropsV: "*" }
|
25
|
+
|
26
|
+
lookupQuery[:archdevops] = {cClass: '*',
|
27
|
+
fClass: 'ArchDevOps*', fPropsK: "*", fPropsV: "*",
|
28
|
+
tClass: 'ArchDevOps*', tPropsK: "*", tPropsV: "*" }
|
29
|
+
|
30
|
+
lookupQuery[:biz] = {cClass: '*',
|
31
|
+
fClass: 'Business*', fPropsK: "*", fPropsV: "*",
|
32
|
+
tClass: 'Business*', tPropsK: "*", tPropsV: "*" }
|
33
|
+
|
34
|
+
lookupQuery[:data] = {cClass: '*',
|
35
|
+
fClass: 'Data*', fPropsK: "*", fPropsV: "*",
|
36
|
+
tClass: 'Data*', tPropsK: "*", tPropsV: "*" }
|
37
|
+
|
38
|
+
lookupQuery[:tech] = {cClass: '*',
|
39
|
+
fClass: 'Technology*', fPropsK: "*", fPropsV: "*",
|
40
|
+
tClass: 'Technology*', tPropsK: "*", tPropsV: "*" }
|
41
|
+
|
42
|
+
lookupQuery[:x5] = {cClass: '*',
|
43
|
+
fClass: 'X5*', fPropsK: "*", fPropsV: "*",
|
44
|
+
tClass: 'X5*', tPropsK: "*", tPropsV: "*" }
|
45
|
+
|
46
|
+
|
47
|
+
lookupQuery
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Objects
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def lookup_pre(args, state)
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def lookup_post(args, state)
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def lookup_post2(args, state)
|
26
|
+
# pp args[:folders]
|
27
|
+
args[:views][:mtype].each do |modelType, ids|
|
28
|
+
ids.each do |id|
|
29
|
+
args[:views][:id][id].each do |viewId, viewProps|
|
30
|
+
ArchestryLookup.logger.debug "ArchestryLookup_lookup RUN instance '' view '#{viewProps}' ver."
|
31
|
+
lookup_run(args, ArchestryLookup::Schema.getObjLookupSchema, state, modelType, id)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/objects/_old.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Objects
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def getProp(_args,state,conProp,direction)
|
17
|
+
rows = {}
|
18
|
+
case direction
|
19
|
+
when 'from'
|
20
|
+
eID = conProp[:fEID]
|
21
|
+
eVer = conProp[:fEVer]
|
22
|
+
when 'to'
|
23
|
+
eID = conProp[:tEID]
|
24
|
+
eVer = conProp[:tEVer]
|
25
|
+
end
|
26
|
+
|
27
|
+
ArchestryLookup::Sql.sqlQuery(state, "
|
28
|
+
select name, value
|
29
|
+
from properties
|
30
|
+
where parent_id like '#{eID}' AND
|
31
|
+
parent_version = '#{eVer}' AND
|
32
|
+
name NOT LIKE 'fqn'
|
33
|
+
") do |row|
|
34
|
+
# ArchestryLookup.logger.debug "### ROW #{eID} #: #{row}"
|
35
|
+
rows[row[0].to_sym] = row[1]
|
36
|
+
end
|
37
|
+
return rows if not rows.empty?
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Objects
|
14
|
+
class << self
|
15
|
+
|
16
|
+
|
17
|
+
def archestryLookupView(args, lookupType, lookup, state, modelType, viewId)
|
18
|
+
if args[:objects][:view][modelType][viewId]
|
19
|
+
if lookup[:cClass] == '*'
|
20
|
+
args[:objects][:view][modelType][viewId][:links].each do |cClass, cProp|
|
21
|
+
archestryLookupViewRun(args, state, lookupType, lookup, modelType, viewId, cClass)
|
22
|
+
end
|
23
|
+
else
|
24
|
+
archestryLookupViewRun(args, state, lookupType, lookup, modelType, viewId, lookup[:cClass])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def archestryLookupViewRun(args, state, lookupType, lookup, modelType, viewId, cClass)
|
31
|
+
queryName = lookupType
|
32
|
+
if args[:objects][:view][modelType][viewId][:links][cClass].is_a?(Hash)
|
33
|
+
args[:objects][:view][modelType][viewId][:links][cClass].each do |_conPairId, conProp|
|
34
|
+
|
35
|
+
lookup[:fClass] == '*' ? fClass = /^*/ : fClass = /^#{lookup[:fClass]}/
|
36
|
+
lookup[:tClass] == '*' ? tClass = /^*/ : tClass = /^#{lookup[:tClass]}/
|
37
|
+
|
38
|
+
fPropMod = []
|
39
|
+
fPropMod << :fPropsKAll if lookup[:fPropsK] == '*'
|
40
|
+
fPropMod << :fPropsVAll if lookup[:fPropsV] == '*'
|
41
|
+
fPropMod << :fPropsAll if fPropMod.include?(:fPropsKAll) and fPropMod.include?(:fPropsVAll)
|
42
|
+
|
43
|
+
tPropMod = []
|
44
|
+
tPropMod << :tPropsKAll if lookup[:tPropsK] == '*'
|
45
|
+
tPropMod << :tPropsVAll if lookup[:tPropsV] == '*'
|
46
|
+
tPropMod << :tPropsAll if tPropMod.include?(:tPropsKAll) and tPropMod.include?(:tPropsVAll)
|
47
|
+
|
48
|
+
if fPropMod.include?(:fPropsKAll)
|
49
|
+
fPropsFiltered = true
|
50
|
+
elsif fPropMod.include?(:fPropsVAll)
|
51
|
+
fPropsFiltered = true if conProp[:fProps].has_key?(lookup[:fPropsK])
|
52
|
+
else
|
53
|
+
fPropsFiltered = true if conProp[:fProps][lookup[:fPropsK]] =~ /^#{lookup[:fPropsV]}/
|
54
|
+
end
|
55
|
+
|
56
|
+
if tPropMod.include?(:tPropsKAll)
|
57
|
+
tPropsFiltered = true
|
58
|
+
elsif tPropMod.include?(:tPropsVAll)
|
59
|
+
tPropsFiltered = true if conProp[:tProps].has_key?(lookup[:tPropsK])
|
60
|
+
else
|
61
|
+
# tPropsFiltered = true if conProp[:tProps][lookup[:tPropsK]] =~ /^#{lookup[:tPropsV]}/
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
if conProp[:viewID] == viewId and
|
66
|
+
conProp[:fClass] =~ fClass and
|
67
|
+
conProp[:tClass] =~ tClass and
|
68
|
+
fPropsFiltered == true and
|
69
|
+
tPropsFiltered == true
|
70
|
+
makeStageView(args, state, conProp, modelType, viewId, queryName, lookup, cClass)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def makeStageView(args, state, conProp, modelType, viewId, queryName, lookup, cClass)
|
78
|
+
conProp[:cClass] = cClass
|
79
|
+
|
80
|
+
if lookup.has_key?(:fPropKey)
|
81
|
+
conProp[:fProp][lookup[:fPropKey]] == lookup[:fPropValue] ? store = true : store = false
|
82
|
+
else
|
83
|
+
store = true
|
84
|
+
end
|
85
|
+
|
86
|
+
if store == true
|
87
|
+
# hash_fName = Digest::SHA256.hexdigest("#{conProp[:fName]}")[0..20]
|
88
|
+
hash_tName = Digest::SHA256.hexdigest("#{conProp[:tName]}")[0..20]
|
89
|
+
hash_fName_fId_tId = Digest::SHA256.hexdigest("#{conProp[:fName]}#{conProp[:fOID]}#{conProp[:tOID]}")[0..20]
|
90
|
+
#
|
91
|
+
# if conProp[:fProps].is_a?(Hash) and conProp[:fProps].has_key?('listenIP') and conProp[:fProps]['listenIP'] == '1.1.1.1'
|
92
|
+
# pp "fProps:: conProp:#{conProp}"
|
93
|
+
# elsif conProp[:tProps].is_a?(Hash) and conProp[:tProps].has_key?('listenIP')
|
94
|
+
# pp "tProps:: conProp:#{conProp}"
|
95
|
+
# end
|
96
|
+
|
97
|
+
args[:stages][:view][modelType] ||= {}
|
98
|
+
args[:stages][:view][modelType][viewId] ||= {}
|
99
|
+
args[:stages][:view][modelType][viewId][queryName] ||= {}
|
100
|
+
args[:stages][:view][modelType][viewId][queryName][:lookup] ||= {}
|
101
|
+
args[:stages][:view][modelType][viewId][queryName][:lookup][hash_tName] ||= {}
|
102
|
+
args[:stages][:view][modelType][viewId][queryName][:lookup][hash_tName][hash_fName_fId_tId] = conProp
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
def archestryRepack(args, lookup, state, modelType, viewId, viewType)
|
108
|
+
args[:stages].each do |k, v|
|
109
|
+
a = args[:stages][k]
|
110
|
+
pp viewType
|
111
|
+
unless a.has_key?(viewType) and a.has_key?(viewType) and not a[viewId].nil?
|
112
|
+
base = false
|
113
|
+
else
|
114
|
+
base = a[viewId][queryName]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
if base.is_a?(Hash)
|
119
|
+
repackNames = [:fProps, :tProps, :fOID, :tOID, :fEID, :tEID]
|
120
|
+
base[:repack] = {}
|
121
|
+
repackNames.each do |repackName|
|
122
|
+
res = {}
|
123
|
+
base[:repack][repackName] ||= {}
|
124
|
+
base[:lookup].each do |_tName, hash_tNameProp|
|
125
|
+
hash_tNameProp.each do |_fName, hash_fNameProp|
|
126
|
+
res[hash_fNameProp[repackName]] = hash_fNameProp
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
a[viewId][queryName][:repack][repackName] = res
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
def lookupDebug(name, prop)
|
137
|
+
ArchestryLookup.logger.debug "### #{name} :: F:: '#{prop[:fName]}' fqn:#{prop[:fProps]} o:#{prop[:fOID]} e:#{prop[:fEID]} p '#{prop[:fProp]}' :: T :: '#{prop[:tName]}' fqn:#{prop[:tProps]} o:#{prop[:tOID]} e:#{prop[:tEID]} p '#{prop[:tProp]}'"
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
def lookup_run(args, lookupStruct, state, modelType, viewId)
|
142
|
+
lookupStruct.each do |lookupType, lookup|
|
143
|
+
ArchestryLookup.logger.debug "### ArchestryLookup_lookup call - type::#{lookupType}, lookupStruct::#{lookupStruct}"
|
144
|
+
archestryLookupView(args, lookupType, lookup, state, modelType, viewId)
|
145
|
+
# archestryRepack(args, lookupType, lookup, state, modelType, viewId)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
|
13
|
+
module ArchestryLookup
|
14
|
+
module Schema
|
15
|
+
class << self
|
16
|
+
|
17
|
+
def getMFVSchema
|
18
|
+
args = Hash.recursive
|
19
|
+
args[:models] = {:schema => [:name, :type, :ver, :cby, :con]}
|
20
|
+
args[:folders] = {:schema => [:name, :type, :ver, :cby, :con, :pid, :rtype]}
|
21
|
+
args[:views] = {:schema => [:name, :viewpoint, :ver, :cby, :con]}
|
22
|
+
args[:objects] = {:schema => [:view, :objfolder]}
|
23
|
+
args[:stages] = {:schema => [:view, :objfolder]}
|
24
|
+
|
25
|
+
args
|
26
|
+
end
|
27
|
+
|
28
|
+
def getElementsSchema
|
29
|
+
args = Hash.recursive
|
30
|
+
args[:elements] = {:schema => [:mID, :mName, :mType, :fID, :fName, :vID, :vName, :vPoint, :rClass],
|
31
|
+
:schemaDir => [:eClass, :oCby, :oCon]}
|
32
|
+
args
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Sql
|
14
|
+
class << self
|
15
|
+
|
16
|
+
def sqlQuery(state, sql)
|
17
|
+
|
18
|
+
# p "##SQL:: #{sql}"
|
19
|
+
res = {}
|
20
|
+
|
21
|
+
case state[:dbtype]
|
22
|
+
when :sqlite
|
23
|
+
res = sqliteAnswerMap(state[:db][:handler].execute2(sql))
|
24
|
+
when :pg
|
25
|
+
res = pgAnswerMap(state[:db][:handler].exec(sql))
|
26
|
+
end
|
27
|
+
|
28
|
+
# p "## SQL_RES:: #{res}"
|
29
|
+
res
|
30
|
+
end
|
31
|
+
|
32
|
+
def sqliteAnswerMap(answer)
|
33
|
+
res = {}
|
34
|
+
m = {}
|
35
|
+
n = 0
|
36
|
+
j = 0
|
37
|
+
answer.each do |result|
|
38
|
+
if n == 0
|
39
|
+
# puts "##keys::#{result}"
|
40
|
+
i = 0
|
41
|
+
result.each do |v|
|
42
|
+
m[i] = v.to_sym
|
43
|
+
i += 1
|
44
|
+
end
|
45
|
+
else
|
46
|
+
# puts "##values::#{result}"
|
47
|
+
i = 0
|
48
|
+
result.each do |v|
|
49
|
+
res[j] ||= {}
|
50
|
+
res[j][m[i]] = v
|
51
|
+
i += 1
|
52
|
+
end
|
53
|
+
j += 1
|
54
|
+
end
|
55
|
+
n += 1
|
56
|
+
end
|
57
|
+
|
58
|
+
res
|
59
|
+
end
|
60
|
+
|
61
|
+
def pgAnswerMap(answer)
|
62
|
+
res = {}
|
63
|
+
m = {}
|
64
|
+
i = 0
|
65
|
+
answer.each do |result|
|
66
|
+
# puts "##values::#{result}"
|
67
|
+
result.each do |k, v|
|
68
|
+
res[i] ||= {}
|
69
|
+
res[i][k.to_sym] = v
|
70
|
+
end
|
71
|
+
i += 1
|
72
|
+
end
|
73
|
+
|
74
|
+
res
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Sql
|
14
|
+
class << self
|
15
|
+
|
16
|
+
#TODO: flags 'skip' in props
|
17
|
+
#
|
18
|
+
|
19
|
+
def makeInternalLookups(args, keyType, valueType, container, id)
|
20
|
+
args[keyType][valueType] ||= {}
|
21
|
+
args[keyType][valueType][:id] ||= {}
|
22
|
+
args[keyType][valueType][:id][id] = container
|
23
|
+
args[valueType][:schema].each do |k|
|
24
|
+
args[keyType][valueType][k] ||= {}
|
25
|
+
args[keyType][valueType][k][container[k]] ||= []
|
26
|
+
args[keyType][valueType][k][container[k]] << id
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def archestry_model_lookup(args, state)
|
32
|
+
mfv = {}
|
33
|
+
|
34
|
+
|
35
|
+
sqlQuery(state, "SELECT m1.id as id, m1.name as name, m1.version as ver, m1.created_by as cby, m1.created_on as con FROM models as m1 WHERE version = (select max(m2.version) FROM models as m2 WHERE m1.id = m2.id)").each do |id, model|
|
36
|
+
sqlQuery(state, "SELECT p1.name, p1.value FROM properties as p1 WHERE p1.parent_id LIKE '#{model[:id]}' and p1.name LIKE 'modelType' and p1.parent_version = #{model[:ver]}").each do |id, type|
|
37
|
+
model[:type] = type[:value].to_sym
|
38
|
+
|
39
|
+
makeInternalLookups(args, :models, :models, model, model[:id])
|
40
|
+
args[:elements][:base][model[:type]][:id] ||= {}
|
41
|
+
|
42
|
+
if args[:models][:models][:id][model[:id]][:type] == :library or args[:models][:models][:id][model[:id]][:name] == state[:funcFolder]
|
43
|
+
ArchestryLookup.logger.info "Use model '#{model[:name]}' version #{model[:ver]} type '#{model[:type]}' created by '#{model[:cby]}' on #{model[:con]}"
|
44
|
+
mfv[:model] = model
|
45
|
+
getModelFolders(state, args, mfv)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def getFolderViews(args, state, mfv)
|
53
|
+
a = sqlQuery(state, "select view_id as id, model_version as mver FROM views_in_model as vm1
|
54
|
+
WHERE vm1.parent_folder_id in ('#{mfv[:folder][:id]}')
|
55
|
+
and vm1.model_version = (select max(vm2.model_version) FROM views_in_model as vm2 WHERE vm2.view_id in (vm1.view_id))").each do |k, viewInM|
|
56
|
+
|
57
|
+
viewAtr = sqlQuery(state, "select v1.id, v1.version as ver, v1.name, v1.viewpoint, v1.created_by as cby, v1.created_on as con FROM views as v1 WHERE id in ('#{viewInM[:id]}') and version = (select max(version) FROM views as v2 WHERE v2.id in ('#{viewInM[:id]}'))")
|
58
|
+
|
59
|
+
view = viewAtr[0]
|
60
|
+
# view[:tid]= view[:id].tr("-", "_")
|
61
|
+
|
62
|
+
makeInternalLookups(args, :views, :models, mfv[:model], view[:id])
|
63
|
+
makeInternalLookups(args, :views, :folders, mfv[:folder], view[:id])
|
64
|
+
makeInternalLookups(args, :views, :views, view, view[:id])
|
65
|
+
|
66
|
+
mfv[:view] = view
|
67
|
+
view[:viewpoint] == '' ? viewpoint = 'none' : viewpoint = view[:viewpoint]
|
68
|
+
ArchestryLookup.logger.info "Model '#{mfv[:model][:name]}' of type '#{mfv[:model][:type]}': view '#{view[:name]}' (id #{view[:id]}, view ver.#{view[:ver]}, model ver.#{mfv[:model][:ver]}) with viewpoint '#{viewpoint}' suits for me!"
|
69
|
+
getViewConnectionsFromView(args, state, mfv)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
def getModelFolders(state, args, mfv)
|
75
|
+
|
76
|
+
args[:folders] ||={}
|
77
|
+
|
78
|
+
foldersInModel = sqlQuery(state, "select fm1.folder_id as id,
|
79
|
+
fm1.parent_folder_id as pid,
|
80
|
+
f1.name as name,
|
81
|
+
f1.type as type,
|
82
|
+
f1.version as ver,
|
83
|
+
f1.root_type as rtype,
|
84
|
+
f1.created_by as cby,
|
85
|
+
f1.created_on as con
|
86
|
+
FROM folders_in_model as fm1
|
87
|
+
INNER JOIN folders as f1 ON f1.id = fm1.folder_id and f1.version = (select max(f2.version) FROM folders as f2 WHERE f2.id = fm1.folder_id)
|
88
|
+
WHERE fm1.model_id in ('#{mfv[:model][:id]}')
|
89
|
+
and fm1.model_version = (select max(fm2.model_version) FROM folders_in_model as fm2 WHERE fm2.model_id LIKE '#{mfv[:model][:id]}')
|
90
|
+
")
|
91
|
+
|
92
|
+
foldersInModel.each do |id, folder|
|
93
|
+
if folder[:rtype].to_i == 7 and folder[:type].to_i == 0
|
94
|
+
|
95
|
+
makeInternalLookups(args, :folders, :models, mfv[:model], folder[:id])
|
96
|
+
makeInternalLookups(args, :folders, :folders, folder, folder[:id])
|
97
|
+
|
98
|
+
mfv[:folder] = folder
|
99
|
+
getFolderViews(args, state, mfv)
|
100
|
+
# mod = :view
|
101
|
+
else
|
102
|
+
true
|
103
|
+
# p "This is Archestry core view '#{folder[:name]}' (type #{folder[:type]}, Root type #{folder[:rtype]})"
|
104
|
+
# mod = :objfolder
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
data/lib/sql/pre.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
######## ####### ######## ####### ######## ########
|
2
|
+
## / / / / License \ \ \ \
|
3
|
+
## Copyleft culture, Copyright (C) is prohibited here
|
4
|
+
## This work is licensed under a CC BY-SA 4.0
|
5
|
+
## Creative Commons Attribution-ShareAlike 4.0 License
|
6
|
+
## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
|
7
|
+
######## ####### ######## ####### ######## ########
|
8
|
+
## / / / / Code Climate \ \ \ \
|
9
|
+
## Language = ruby
|
10
|
+
## Indent = space; 4 chars;
|
11
|
+
######## ####### ######## ####### ######## ########
|
12
|
+
module ArchestryLookup
|
13
|
+
module Sql
|
14
|
+
class << self
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
def preSql(state)
|
19
|
+
state[:db] = {}
|
20
|
+
|
21
|
+
case state[:dbtype]
|
22
|
+
when :sqlite
|
23
|
+
require 'sqlite3'
|
24
|
+
db = state[:dbprop][:filepath]
|
25
|
+
state[:db][:handler] = SQLite3::Database.new db
|
26
|
+
when :pg
|
27
|
+
require 'pg'
|
28
|
+
state[:db][:handler] = PG.connect( dbname: state[:dbprop][:database])
|
29
|
+
else
|
30
|
+
state[:dbtype] = :sqlite
|
31
|
+
require 'sqlite3'
|
32
|
+
db = "/tmp/archestry.sqlite"
|
33
|
+
state[:db][:handler] = SQLite3::Database.new db
|
34
|
+
end
|
35
|
+
|
36
|
+
case state[:myAppName]
|
37
|
+
when 'Dialog'
|
38
|
+
state[:db][:relSQL] = "and relationships.class in ('AggregationRelationship', 'TriggeringRelationship', 'FlowRelationship', 'AccessRelationship', 'SpecializationRelationship', 'CompositionRelationship', 'ServingRelationship', 'RealizationRelationship')"
|
39
|
+
state[:db][:elementsSQL] = "and (elements.class LIKE 'Application%' OR elements.class in ('DataObject', 'Grouping'))"
|
40
|
+
state[:db][:propSQL] = "AND properties.name LIKE 'fqn'"
|
41
|
+
when 'Archestry'
|
42
|
+
state[:db][:relSQL] = " "
|
43
|
+
state[:db][:elementsSQL] = ""
|
44
|
+
state[:db][:propSQL] = ""
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|