hypersonic-plus 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/lib/hdatastructures/hfieldtable.rb +285 -0
  3. data/lib/hdatastructures/hhash.rb +9 -0
  4. data/lib/hdatastructures/hlist.rb +100 -0
  5. data/lib/hdatastructures/hrecord.rb +75 -0
  6. data/lib/hdatastructures/hspreadfieldtable.rb +129 -0
  7. data/lib/hdb/hdataloader.rb +75 -0
  8. data/lib/hdb/hdb.rb +357 -0
  9. data/lib/hdb/hdb_test.rb +248 -0
  10. data/lib/hdb/hdbgenerator.rb +211 -0
  11. data/lib/hdb/hdbi.rb +63 -0
  12. data/lib/hdb/hdbi_test.rb +133 -0
  13. data/lib/hdb/hfield.rb +180 -0
  14. data/lib/hdb/hmysql.rb +99 -0
  15. data/lib/hdb/hmysql2.rb +96 -0
  16. data/lib/hdb/hodb.rb +948 -0
  17. data/lib/hdb/hpgsql.rb +54 -0
  18. data/lib/hengine/application_controller.rb +204 -0
  19. data/lib/hengine/hconfiguration.rb +40 -0
  20. data/lib/hengine/hhotlogger.rb +13 -0
  21. data/lib/hengine/hlogger.rb +119 -0
  22. data/lib/hengine/hmalloc.rb +275 -0
  23. data/lib/hengine/hmoduleloader.rb +15 -0
  24. data/lib/hengine/hsessiondata.rb +79 -0
  25. data/lib/hengine/hshareddata.rb +60 -0
  26. data/lib/hengine/htranslate.rb +40 -0
  27. data/lib/hengine/hviewloader.rb +99 -0
  28. data/lib/hinit/hinit.rb +3 -0
  29. data/lib/hmisc/hcolorize.rb +100 -0
  30. data/lib/hmisc/hdecoratorfunctions.rb +15 -0
  31. data/lib/hmisc/hdir.rb +19 -0
  32. data/lib/hmisc/hhtmlnode.rb +27 -0
  33. data/lib/hmisc/hinputvalidator.rb +95 -0
  34. data/lib/hmisc/hio.rb +142 -0
  35. data/lib/hmisc/hjson.rb +16 -0
  36. data/lib/hsqlmanager/hpgsqldatabasemanager.rb +76 -0
  37. data/lib/hsqlmanager/hsqldatabasemanager.rb +349 -0
  38. data/lib/hsqlmanager/hsqltable.rb +16 -0
  39. data/lib/husermanager/husermanager.rb +122 -0
  40. data/lib/hwidgets/haccordionmenu.rb +117 -0
  41. data/lib/hwidgets/hcheckboxtag.rb +33 -0
  42. data/lib/hwidgets/hdbactionbuttons.rb +26 -0
  43. data/lib/hwidgets/hdbcombobox.rb +71 -0
  44. data/lib/hwidgets/hdbdialogview.rb +190 -0
  45. data/lib/hwidgets/hdbfilterview.rb +28 -0
  46. data/lib/hwidgets/hdbtableview.rb +213 -0
  47. data/lib/hwidgets/hdbview.rb +63 -0
  48. data/lib/hwidgets/hdivtag.rb +9 -0
  49. data/lib/hwidgets/hdropdown.rb +44 -0
  50. data/lib/hwidgets/hformfield.rb +91 -0
  51. data/lib/hwidgets/hgrouptag.rb +65 -0
  52. data/lib/hwidgets/hhiddeninputtag.rb +12 -0
  53. data/lib/hwidgets/hinputtag.rb +55 -0
  54. data/lib/hwidgets/hlabeltag.rb +30 -0
  55. data/lib/hwidgets/hmainview.rb +37 -0
  56. data/lib/hwidgets/hpagination.rb +65 -0
  57. data/lib/hwidgets/hradiobuttontag.rb +30 -0
  58. data/lib/hwidgets/hselecttag.rb +32 -0
  59. data/lib/hwidgets/htableview.rb +262 -0
  60. data/lib/hwidgets/htabview.rb +84 -0
  61. data/lib/hwidgets/htextareatag.rb +20 -0
  62. data/lib/hwidgets/htopnav.rb +85 -0
  63. data/lib/hwidgets/hwidget.rb +423 -0
  64. data/lib/hypersonic.rb +9 -0
  65. metadata +276 -0
@@ -0,0 +1,28 @@
1
+ class HDBFilterView < HDivTag
2
+
3
+ def initialize(sourceView: nil, **args)
4
+
5
+ @sourceView = sourceView
6
+ return super(class: 'hdbfilterview', **args)
7
+
8
+ end
9
+
10
+ def applyFilter(value: 'true')
11
+ return @sourceView.html(filter: value)
12
+ end
13
+
14
+ def filter
15
+ div = HDivTag.new(class: 'filter-box')
16
+ div << HWidget.new("span", "Filter:")
17
+ div << filter = HWidget.new("input", class: 'filter', type: 'text', value: "",
18
+ onkeypress: "hdbFilterView.keyPress(this, event)")
19
+ filter.connect(:onblur, self, "applyFilter", id: @sourceView.oid, attributes: ":obj.value")
20
+ return div
21
+ end
22
+
23
+ def html
24
+ self << filter
25
+ return super
26
+ end
27
+
28
+ end
@@ -0,0 +1,213 @@
1
+ require "hwidgets/htableview"
2
+
3
+ # Quando faccio doppio click su una tabella si apre una finestra di dialogo a cui passo l'odb della tabella
4
+ # Se in una finestra di dialogo ho un tabella a quella tabella deve essere passato l'odb direttamente dalla
5
+ # finestra di dialogo perche' l'odb deve essere generato con dialogOdb.tableName_table altrimenti quano chiudo
6
+ # l'ultima finestra con ok la tabella modificata non verra' salvata in quando sconnessa dalla dialog box
7
+
8
+ class HDBTableView < HTableView
9
+ attr_reader :moduleName, :modelName, :oid, :odb, :dialogLevel
10
+
11
+ def initialize(moduleName: nil, modelName: nil,
12
+ filter: "true", sortField: "id", sortDirection: "asc",
13
+ pageSize: 'all', page: 0,
14
+ odb: nil, poid: nil, dialogLevel: 0, connectionName: "default")
15
+
16
+ hl << " =========================================================".red
17
+ hl << " ==================== NEW HDBTableView ===================".red
18
+ hl << " =========================================================".red
19
+ super(className: 'hdbtableview')
20
+ @moduleName = moduleName
21
+ @modelName = modelName
22
+ @oid = hm().malloc(self, poid).obj.object_id.to_s
23
+ self.hotLog("hdbtableview oid: #{@oid}")
24
+ @odb = odb
25
+ @dialogLevel = dialogLevel
26
+ @connectionName = connectionName
27
+
28
+ @filter = filter
29
+ @sortField = sortField
30
+ @sortDirection = sortDirection
31
+ @pageSize = pageSize
32
+ @page = page
33
+ end
34
+
35
+ def rpcPageSize
36
+ return @pageSize
37
+ end
38
+ def rpcPages
39
+ return 1 if @pageSize == "all"
40
+ result = hdb(@connectionName).select("count(*)").from(@modelName).where(@filter).orderBy(nil).direction(nil).execute()
41
+
42
+ rows = result.data(0, "count").to_i
43
+ pages = rows / @pageSize.to_i
44
+ pages += 1 if (rows % @pageSize.to_i > 0)
45
+ return pages;
46
+ end
47
+ def rpcHtml(args)
48
+ return self.html(args)
49
+ end
50
+
51
+ def rpcAction(ids: nil, action: nil)
52
+ return if ids.empty?
53
+ odb = Marshal.load(Marshal.dump(@odb))
54
+ odb.findBy("id in (#{ids.join(',')})")
55
+ eval("odb.#{action}(ids)")
56
+ end
57
+
58
+ def setControlPanel()
59
+
60
+ tr = self.appendRow(@headerTr)
61
+ prevTd = HWidget.new("th")
62
+ prevTd.setInnerHTML("Prev")
63
+ # if arr is an array of integers then a.map!(&to_s) converts each number to string
64
+ prevTd.connect(:onclick, self, "html", id: @oid,
65
+ args: {page: [0, @page - 1].max})
66
+ nextTd = HWidget.new("th")
67
+ nextTd.setInnerHTML("Next")
68
+ nextTd.connect(:onclick, self, "html", id: @oid,
69
+ args: {page: @page + 1})
70
+ tr.getChilds()[-2] = prevTd
71
+ tr.getChilds()[-1] = nextTd
72
+
73
+ end
74
+
75
+ def setAddRowButton()
76
+
77
+ tr = self.appendRow()
78
+ td0 = tr.getChilds()[0]
79
+ td0.setInnerHTML("")
80
+ td0 << HWidget.new("a", "Add Row")
81
+ td0.connect(:onclick, self, "newRecord", getElem: "body", mode: "add", id: @oid)
82
+
83
+ end
84
+
85
+ def setThSlots(th, fieldName)
86
+
87
+ sortDirection = (@sortDirection == "asc") ? "desc" : "asc"
88
+ th.connect(:onclick, self, "html", id: @oid,
89
+ args: {sortField: fieldName, sortDirection: sortDirection},
90
+ hotLog: "sort #{fieldName}")
91
+
92
+ end
93
+
94
+ def setTrSlots(tr, row)
95
+
96
+ tr.set(value: "#id", tabindex: "0")
97
+ tr.connect(:ondblclick, self, "doubleClick", attributes: "id", getElem: "body", mode: "add", id: @oid, after:'loadComboBox()');
98
+ tr.addJsFunction(:onclick, :'hdbTableView.click', :event, @oid)
99
+ tr.addJsFunction(:oncontextmenu, :'hdbTableView.rightClick', :event, @oid)
100
+ tr.addJsFunction(:onkeypress, :'hdbTableView.keyPress', :event, @oid)
101
+ cancKey = 46
102
+ tr.connect(:onkeypress, self, "deleteRecord", attributes: "id", KeyEvent: :event, keyCode: cancKey, id: @oid)
103
+
104
+ end
105
+
106
+ def setTd(td, fieldName, value, row)
107
+ td.set(name: "#{@fieldTable.tableName}[#{row}][#{fieldName}]", overwrite: true)
108
+ end
109
+
110
+ def beforeInsertRow(row, tagName, fieldName, value)
111
+ checkBox = HWidget.new("input", value: value, type: "checkbox", class: 'hdbtableview-checkbox')
112
+ checkBox.set(onchange: "hdbTableView.selectAllRows(this)") if tagName == "th"
113
+ row << ( HWidget.new(tagName) << checkBox ) if fieldName == "id"
114
+ end
115
+
116
+ def setTableHeaders()
117
+
118
+ super()
119
+
120
+ end
121
+
122
+ def closeButton()
123
+ hl << "closeButton".red
124
+ @odb.remove() if @odb.id[0] == '#' and @odb.id[-1] != '#'
125
+ return nil
126
+ end
127
+
128
+ def doubleClick(id: nil)
129
+ dialogView = HDBDialogView.initByTableView(id, self)
130
+ dialogView.closeButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
131
+ dialogView.cancelButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
132
+ dialogView.connect(:onsubmit, self, "html", submit: true, id: @oid)
133
+ return dialogView.html()
134
+ end
135
+
136
+ def newRecord()
137
+ nvr = odb.create # new virtual record
138
+ dialogView = HDBDialogView.initByTableView(nvr.id, self)
139
+ dialogView.closeButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
140
+ dialogView.cancelButton.connect(:onclick, self, "closeButton", before: 'hdialogView.close()', mode: 'none', id: @oid)
141
+ dialogView.connect(:onsubmit, self, "html", submit: true, id: @oid)
142
+ return dialogView.html()
143
+ end
144
+
145
+ def deleteRecord(id: nil)
146
+ hl << "deleteRecord: #{id}".red
147
+ if dialogLevel == 0
148
+ @odb.delete({"#{modelName}.id": id})
149
+ else
150
+ @odb.remove(id)
151
+ end
152
+ return self.html()
153
+ end
154
+
155
+ def html(filter: @filter, sortField: @sortField, sortDirection: @sortDirection, pageSize: @pageSize, page: @page)
156
+
157
+ filter = "true" if filter == ""
158
+ @filter = filter
159
+ @sortField = sortField
160
+ @sortDirection = sortDirection
161
+ @pageSize = pageSize
162
+ @page = page
163
+
164
+ @odb = HODB.newOdb(@modelName, @connectionName) unless @odb
165
+ @odb.where(filter).orderBy(sortField).direction(sortDirection).pageSize(pageSize).page(page) if @dialogLevel == 0
166
+ @fieldTable = @odb.toFieldTable(false)
167
+ @fieldTable.sortBy(sortField, asc: sortDirection == 'asc') if @dialogLevel > 0
168
+
169
+ self.set(id: @oid, name: @modelName, oid: self.object_id.to_s)
170
+ self.reset()
171
+
172
+ return super()
173
+
174
+ end
175
+
176
+
177
+ def self.tableViewDecorator(tableView)
178
+ headerTr = HWidget.new("tr").setStyle("background-color": "#0099cc")
179
+ td = HWidget.new("td").setStyle(padding: "8px")
180
+ tableView.
181
+ setStyle("table-layout": "auto").
182
+ set(align: "center", width: "100%")
183
+ tableView.headerTr = headerTr
184
+ tableView.td = td
185
+ #tableView.th = td
186
+ tr = Array.new()
187
+ tr[0] = HWidget.new("tr").set(class: "even-row", id: "#id")
188
+ tr[1] = HWidget.new("tr").set(class: "odd-row", id: "#id")
189
+ tableView.tr = tr
190
+
191
+ totalizerTr = Array.new()
192
+ totalizerTr[0] = HWidget.new("tr").setStyle("background-color": "yellow")
193
+ totalizerTr[1] = totalizerTr[0]
194
+ tableView.totalizerTr = totalizerTr
195
+
196
+ summaryTr = Array.new()
197
+ summaryTr[0] = summaryTr[1] = headerTr
198
+ tableView.summaryTr = summaryTr
199
+
200
+ return tableView
201
+
202
+
203
+ end
204
+
205
+ def self.html(moduleName: nil, modelName: nil, odb: nil, dialogLevel: 0, connectionName: "default", filter: "true", sortField: "id", sortDirection: "asc", pageSize: "5", page: 0)
206
+ modelName = modelName.to_s
207
+ dbTableView = HDBTableView.new(moduleName, modelName, odb, dialogLevel, connectionName)
208
+ HDBTableView.tableViewDecorator(dbTableView)
209
+ return dbTableView.html(filter: filter, sortField: sortField, sortDirection: sortDirection, pageSize: pageSize, page: page)
210
+
211
+ end
212
+
213
+ end
@@ -0,0 +1,63 @@
1
+ class HDBView < HDivTag
2
+
3
+ attr_reader :oid
4
+
5
+ def initialize(moduleName: nil, modelName: nil,
6
+ filter: "true", sortField: "id", sortDirection: "asc",
7
+ pageSize: '5', page: 0,
8
+ paginationView: true, filterView: true, actionMenu: true, actionButtons: true,
9
+ poid: nil,
10
+ **args)
11
+
12
+ @moduleName = moduleName
13
+ @modelName = modelName
14
+ @oid = hm().malloc(self, poid).obj.object_id.to_s
15
+ @pageSize = pageSize
16
+ @page = page
17
+ @paginationView = paginationView
18
+ @filterView = filterView
19
+ @actionMenu = actionMenu
20
+ @dbTableView = HDBTableView.new(moduleName: moduleName, modelName: modelName,
21
+ filter: filter, sortField: sortField, sortDirection: sortDirection,
22
+ pageSize: pageSize, page: page, poid: @oid)
23
+ HDBTableView.tableViewDecorator(@dbTableView)
24
+
25
+ super(class: 'hdbview', id: @oid, **args)
26
+ self.hotLog("hdbview oid: #{@oid}".hight_purple)
27
+ self.actionButtons() if actionButtons
28
+ self.dropDowns() if actionMenu
29
+ self << HDBFilterView.new(sourceView: @dbTableView) if filterView
30
+ self << HPagination.new(sourceView: @dbTableView, pages: @dbTableView.rpcPages, pageSize: pageSize,
31
+ rowsForPage: [@pageSize, 10, 100, 'all']) if paginationView
32
+ self << @dbTableView
33
+ return self
34
+
35
+ end
36
+
37
+ def dropDowns
38
+
39
+ actionMenus = hv().viewByType(@moduleName, @modelName, :table).xpath("//actionmenu")
40
+ actionMenus.each do |menu|
41
+ nodes = menu.xpath(".//item")
42
+ items = nodes.to_a_of_h
43
+ self << HDropDown.new(sourceView: @dbTableView, caption: menu["name"], items: items) if items.any?
44
+ end
45
+
46
+ end
47
+
48
+ def actionButtons
49
+
50
+ actionBtns = hv().viewByType(@moduleName, @modelName, :table).xpath("//actionbuttons")
51
+ actionBtns.each do |button|
52
+ nodes = button.xpath(".//button")
53
+ buttons = nodes.to_a_of_h
54
+ self << HDBActionButtons.new(sourceView: @dbTableView, buttons: buttons) if buttons.any?
55
+ end
56
+
57
+ end
58
+
59
+ def html
60
+ return super
61
+ end
62
+
63
+ end
@@ -0,0 +1,9 @@
1
+ require "hwidgets/hwidget"
2
+
3
+ class HDivTag < HWidget
4
+
5
+ def initialize(innerHTML = "", **args)
6
+ return super('div', innerHTML, args)
7
+ end
8
+
9
+ end
@@ -0,0 +1,44 @@
1
+ class HDropDown < HDivTag
2
+
3
+ def initialize(sourceView: nil, caption: "select", items: [], **args)
4
+
5
+ @sourceView = sourceView
6
+ @caption = caption
7
+ @items = items
8
+
9
+ return super(class: 'hdropdown', **args)
10
+ end
11
+
12
+ def button
13
+ return HWidget.new("button", @caption, class: "dropbtn")
14
+ end
15
+
16
+ def a(innerHTML = '', icon: nil, **args)
17
+
18
+ a = HWidget.new("a", "", args)
19
+ a << HWidget.new('span', class: icon) if icon
20
+ a << HWidget.new('span', innerHTML)
21
+ return a
22
+
23
+ end
24
+
25
+ def content
26
+ contentDiv = HDivTag.new(class: 'dropdown-content')
27
+ @items.each do |item|
28
+ action = item.delete(:action)
29
+ link = self.a(item.delete(:name), icon: item.delete(:icon), **item)
30
+ link.connect(:onclick, @sourceView, "rpcAction", args: {action: action},
31
+ id: @sourceView.oid, mode: 'none',
32
+ attributes: ":hdbTableView.ids(obj) => ids")
33
+
34
+ contentDiv << link
35
+ end
36
+ return contentDiv
37
+ end
38
+
39
+ def html
40
+ self << self.button << self.content
41
+ return super
42
+ end
43
+
44
+ end
@@ -0,0 +1,91 @@
1
+ class HFormField
2
+
3
+ def initialize(moduleName, record, odb, oid, dialogLevel)
4
+ @formField = nil
5
+ @odb = odb
6
+ @moduleName = moduleName
7
+ @modelName = odb.modelName.to_s
8
+ @record = record
9
+ @oid = oid
10
+ @dialogLevel = dialogLevel
11
+ @value = @record.value(:value)
12
+ @oid = hm().malloc(self, oid).obj.object_id.to_s
13
+ end
14
+
15
+ def obj()
16
+
17
+ record = @record
18
+ value = @value
19
+
20
+ name = @record.name
21
+ type = @record.type
22
+ label = @record.label
23
+ default = @record.default
24
+ dialogLevel = @record.dialogLevel
25
+
26
+ if(type == "combobox")
27
+ @formField = HSelectTag.new(name, "#{@modelName}[#{name}]", label).
28
+ setItems(record.value("items").split(",")).
29
+ setValues(record.value("values").split(",")).
30
+ setCarriageReturn().
31
+ setSelected(value)
32
+
33
+ elsif(type == "dbcombobox")
34
+ hl << "dbComboBox".red
35
+ modelName = @odb.fieldProperty(name, "modelNameReference")
36
+ puts "@odb.#{modelName}_id".red
37
+ odb = eval("@odb.#{modelName}_id")
38
+ puts "#{odb.class}".red
39
+ puts "#{odb.table}".red
40
+ puts "#{odb.type}".red
41
+ puts "§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§===========> end".red
42
+ odb = odb.odb if odb.class == HRecordPtr
43
+ showedFieldName = record.value("show_field")
44
+ selectedValue = record.value(:value)
45
+ puts "#{selectedValue}".red
46
+ @formField = HDBComboBox.new(@moduleName, odb, name, showedFieldName, label, selectedValue, @oid, @dialogLevel)
47
+
48
+ elsif(type == "lineedit")
49
+ @formField = HInputTag.new(name, @modelName, label, nil, type).
50
+ setCarriageReturn().
51
+ setSelected(value)
52
+
53
+ elsif(type == "radiobutton")
54
+ @formField = HRadioButtonTag.new(name, @modelName, label).
55
+ setCarriageReturn().
56
+ setSelected(value)
57
+ @formField.items = record.value("items").split(",")
58
+ @formField.values = record.value("values").split(",")
59
+
60
+ elsif(type == "checkbox")
61
+ @formField = HCheckBoxTag.new(name, @modelName, label).
62
+ setCarriageReturn().
63
+ setSelected(value)
64
+ @formField.items = record.value("items").split(",")
65
+ @formField.values = record.value("values").split(",")
66
+
67
+ elsif(type == "textarea")
68
+ @formField = HTextAreaTag.new(name, @modelName, label).setCarriageReturn().
69
+ setSelected(value).
70
+ setInnerHTML(value)
71
+
72
+ elsif(type == "dbtable")
73
+ modelName = @odb.fieldProperty(name, "modelNameReference")
74
+ puts "@odb.#{modelName}_table".red
75
+ odb = eval("@odb.#{modelName}_table")
76
+ odb = odb.odb if odb.class == HRecordPtr
77
+ @formField = HDBTableView.new(moduleName: @moduleName, modelName: modelName,
78
+ poid: @oid, odb: odb, dialogLevel: dialogLevel.to_i + 1)
79
+ HDBTableView.tableViewDecorator(@formField)
80
+
81
+ elsif(type == "submit")
82
+ @formField = HWidget.new("input").setClosedTag(false)
83
+ @formField.set(type: "submit", value: label)
84
+ end
85
+
86
+ return @formField
87
+
88
+ end
89
+
90
+
91
+ end