hypersonicplus 0.0.0

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.
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