Commit ea1efe8b2abb5813464c7399d767aee6c0545475

Authored by totoro
1 parent c6fff2c0

add foreign key view in edit view

ds_files/ds_types.anubis
@@ -87,6 +87,7 @@ public define List(DS_Type) hayamiki_lib_types_description = @@ -87,6 +87,7 @@ public define List(DS_Type) hayamiki_lib_types_description =
87 [ 87 [
88 component(extern_type("HK_App_Name", model_types+"hk_app_name.anubis"), "app_name"), 88 component(extern_type("HK_App_Name", model_types+"hk_app_name.anubis"), "app_name"),
89 component(string, "table_name"), 89 component(string, "table_name"),
  90 + //component(extern_type("HK_FK_Attr", model_types+"hk_fk_attr.anubis"), "fk_attr"),
90 ]), 91 ]),
91 alternative("integer_field", [ 92 alternative("integer_field", [
92 component(extern_type("HK_Int_Choices", model_types+"hk_int_choices.anubis"), "choices", comment("integer of arbitrary size ")), 93 component(extern_type("HK_Int_Choices", model_types+"hk_int_choices.anubis"), "choices", comment("integer of arbitrary size ")),
@@ -110,6 +111,11 @@ public define List(DS_Type) hayamiki_lib_types_description = @@ -110,6 +111,11 @@ public define List(DS_Type) hayamiki_lib_types_description =
110 enum("none", comment("Nothing special, normal behaviour")), 111 enum("none", comment("Nothing special, normal behaviour")),
111 enum("rich_editor", comment("Use richt text editor for that area")) 112 enum("rich_editor", comment("Use richt text editor for that area"))
112 ]), 113 ]),
  114 +
  115 +// ds_type("HK_FK_Attr", [
  116 +// enum("one_to_one", comment("Foreign key relation is one to one")),
  117 +// enum("many_to_one", comment("Foreign key relation is many to one"))
  118 +// ]),
113 119
114 ds_type("HK_Int_Choices", [ 120 ds_type("HK_Int_Choices", [
115 enum("no_choice", comment("No list choice is available. Hence the user must enter the value")), 121 enum("no_choice", comment("No list choice is available. Hence the user must enter the value")),
@@ -178,6 +184,8 @@ public define List(DS_Type) hayamiki_lib_types_description = @@ -178,6 +184,8 @@ public define List(DS_Type) hayamiki_lib_types_description =
178 ]) 184 ])
179 ]), 185 ]),
180 186
  187 +
  188 +
181 ds_type("HK_List_View", [ 189 ds_type("HK_List_View", [
182 enum("list_view_all"), 190 enum("list_view_all"),
183 alternative("list_view", [ 191 alternative("list_view", [
@@ -186,12 +194,21 @@ public define List(DS_Type) hayamiki_lib_types_description = @@ -186,12 +194,21 @@ public define List(DS_Type) hayamiki_lib_types_description =
186 component(extern_type("WEB_Action_Name", "calexium_lib/web/types/web_action_name.anubis"), "link_id_action") 194 component(extern_type("WEB_Action_Name", "calexium_lib/web/types/web_action_name.anubis"), "link_id_action")
187 ]) 195 ])
188 ]), 196 ]),
189 - 197 +
  198 + ds_type("HK_FK_View", [
  199 + alternative("fk_view", [
  200 + component(extern_type("HK_App_Name", model_types+"hk_app_name.anubis"), "app_name"),
  201 + component(string, "table_name"),
  202 + component(string, "fk_col_name", comment("column name of the foreign key. The column name must exists in the hk_model")),
  203 + ])
  204 + ]),
  205 +
190 ds_type("HK_Edit_View", [ 206 ds_type("HK_Edit_View", [
191 enum("edit_view_all"), 207 enum("edit_view_all"),
192 alternative("edit_view", [ 208 alternative("edit_view", [
193 component(string, "view_name"), 209 component(string, "view_name"),
194 - component(list, string, "columns") 210 + component(list, string, "columns"),
  211 + component(list, extern_type("HK_FK_View", model_types+"hk_fk_view.anubis"), "fk_view")
195 ]) 212 ])
196 ]), 213 ]),
197 214
model/display.anubis
@@ -14,6 +14,7 @@ transmit calexium_lib/web/CXM_json.anubis @@ -14,6 +14,7 @@ transmit calexium_lib/web/CXM_json.anubis
14 transmit hayamiki_lib/model/types/hk_display.anubis 14 transmit hayamiki_lib/model/types/hk_display.anubis
15 transmit hayamiki_lib/model/types/hk_list_view.anubis 15 transmit hayamiki_lib/model/types/hk_list_view.anubis
16 transmit hayamiki_lib/model/types/hk_edit_view.anubis 16 transmit hayamiki_lib/model/types/hk_edit_view.anubis
  17 +transmit hayamiki_lib/model/types/hk_fk_view.anubis
17 transmit hayamiki_lib/model/types/hk_icon.anubis 18 transmit hayamiki_lib/model/types/hk_icon.anubis
18 19
19 public define HK_List_View 20 public define HK_List_View
@@ -25,6 +26,16 @@ public define HK_List_View @@ -25,6 +26,16 @@ public define HK_List_View
25 list_view(view_name, columns, no_action). 26 list_view(view_name, columns, no_action).
26 27
27 28
  29 +public define HK_Edit_View
  30 + edit_view
  31 + (
  32 + String view_name,
  33 + List(String) columns
  34 + )=
  35 + edit_view(view_name, columns, [])
  36 +.
  37 +
  38 +
28 public define JsonValue 39 public define JsonValue
29 to_JSON 40 to_JSON
30 ( 41 (
model/types/hk_app.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:19 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_app_name.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_database.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:19 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_datetime_field_attr.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_display.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_edit_view.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
@@ -10,12 +10,14 @@ transmit system/muscle.anubis @@ -10,12 +10,14 @@ transmit system/muscle.anubis
10 transmit system/convert.anubis 10 transmit system/convert.anubis
11 transmit tools/basis.anubis 11 transmit tools/basis.anubis
12 12
  13 +transmit hayamiki_lib/model/types/hk_fk_view.anubis
13 14
14 public type HK_Edit_View: 15 public type HK_Edit_View:
15 - edit_view_all, 16 + edit_view_all,
16 edit_view( 17 edit_view(
17 - String view_name,  
18 - List(String) columns 18 + String view_name,
  19 + List(String) columns,
  20 + List(HK_FK_View) fk_view
19 ) 21 )
20 . 22 .
21 23
@@ -37,12 +39,14 @@ public define Message @@ -37,12 +39,14 @@ public define Message
37 forget(add_string(_hk_edit_view_message, "__TYPE_ALT__", "edit_view_all")), 39 forget(add_string(_hk_edit_view_message, "__TYPE_ALT__", "edit_view_all")),
38 40
39 //Alternative edit_view 41 //Alternative edit_view
40 - edit_view(_view_name, __columns) then 42 + edit_view(_view_name, __columns, __fk_view) then
41 forget(add_string(_hk_edit_view_message, "__TYPE_ALT__", "edit_view")); 43 forget(add_string(_hk_edit_view_message, "__TYPE_ALT__", "edit_view"));
42 // [type = String] edit_view.view_name 44 // [type = String] edit_view.view_name
43 forget(add_string(_hk_edit_view_message, "view_name", _view_name)); 45 forget(add_string(_hk_edit_view_message, "view_name", _view_name));
44 // [type = List(String)] edit_view.columns 46 // [type = List(String)] edit_view.columns
45 - map_forget((String _columns) |-> add_string(_hk_edit_view_message, "columns", _columns), __columns), 47 + map_forget((String _columns) |-> add_string(_hk_edit_view_message, "columns", _columns), __columns);
  48 + // [type = List(HK_FK_View)] edit_view.fk_view
  49 + map_forget((HK_FK_View _fk_view) |-> add_message(_hk_edit_view_message, "fk_view", to_Message(_fk_view)), __fk_view),
46 50
47 }; 51 };
48 _hk_edit_view_message 52 _hk_edit_view_message
@@ -65,9 +69,12 @@ public define Maybe(HK_Edit_View) @@ -65,9 +69,12 @@ public define Maybe(HK_Edit_View)
65 if find_string(_hk_edit_view_message, "view_name") is {failure then failure, success(view_name) then 69 if find_string(_hk_edit_view_message, "view_name") is {failure then failure, success(view_name) then
66 // [type = List(String)] edit_view.columns 70 // [type = List(String)] edit_view.columns
67 with columns = find_string_list(_hk_edit_view_message, "columns"), 71 with columns = find_string_list(_hk_edit_view_message, "columns"),
  72 + // [type = List(HK_FK_View)] edit_view.fk_view
  73 + with mb_fk_view = map_escape(( Message msg ) |-> (Maybe(HK_FK_View)) from_Message(msg), find_messages(_hk_edit_view_message, "fk_view")),
  74 + if mb_fk_view is {failure then failure, success(fk_view) then
68 75
69 - success(edit_view(view_name, columns))  
70 - } 76 + success(edit_view(view_name, columns, fk_view))
  77 + }}
71 else 78 else
72 failure //No valid Alternative found ! 79 failure //No valid Alternative found !
73 else 80 else
model/types/hk_fk_view.anubis 0 → 100644
  1 +/*
  2 + * Created by 伝作 (Densaku).
  3 + * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
  4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
  6 + *
  7 + */
  8 +
  9 +transmit system/muscle.anubis
  10 +transmit system/convert.anubis
  11 +transmit tools/basis.anubis
  12 +
  13 +transmit hayamiki_lib/model/types/hk_app_name.anubis
  14 +
  15 +public type HK_FK_View:
  16 + fk_view(
  17 + HK_App_Name app_name,
  18 + String table_name,
  19 + String fk_col_name //column name of the foreign key. The column name must exists in the hk_model
  20 + )
  21 +.
  22 +
  23 + HK_FK_View message format
  24 + =========================
  25 +
  26 +
  27 +public define Message
  28 + to_Message
  29 + (
  30 + HK_FK_View _hk_fk_view
  31 + )=
  32 + with _hk_fk_view_message = message((Word32)0), //
  33 + forget(add_string(_hk_fk_view_message, "__TYPE__", "HK_FK_View"));
  34 + if _hk_fk_view is
  35 + {
  36 + //Alternative fk_view
  37 + fk_view(_app_name, _table_name, _fk_col_name) then
  38 + forget(add_string(_hk_fk_view_message, "__TYPE_ALT__", "fk_view"));
  39 + // [type = HK_App_Name] fk_view.app_name
  40 + forget(add_message(_hk_fk_view_message, "app_name", to_Message(_app_name)));
  41 + // [type = String] fk_view.table_name
  42 + forget(add_string(_hk_fk_view_message, "table_name", _table_name));
  43 + // [type = String] fk_view.fk_col_name
  44 + forget(add_string(_hk_fk_view_message, "fk_col_name", _fk_col_name)),
  45 +
  46 + };
  47 + _hk_fk_view_message
  48 +.
  49 +
  50 +public define Maybe(HK_FK_View)
  51 + from_Message
  52 + (
  53 + Message _hk_fk_view_message
  54 + )=
  55 + if find_string(_hk_fk_view_message, "__TYPE__") is {failure then failure, success(__type__) then
  56 + if find_string(_hk_fk_view_message, "__TYPE_ALT__") is {failure then failure, success(__type_alt__) then
  57 + if __type__ = "HK_FK_View" then
  58 + //Alternative fk_view
  59 + if __type_alt__ = "fk_view" then //Alternative fk_view
  60 + // [type = HK_App_Name] fk_view.app_name
  61 + if find_message(_hk_fk_view_message, "app_name") is {failure then failure, success(app_name_msg) then
  62 + if (Maybe(HK_App_Name))from_Message(app_name_msg) is {failure then failure, success(app_name) then
  63 + // [type = String] fk_view.table_name
  64 + if find_string(_hk_fk_view_message, "table_name") is {failure then failure, success(table_name) then
  65 + // [type = String] fk_view.fk_col_name
  66 + if find_string(_hk_fk_view_message, "fk_col_name") is {failure then failure, success(fk_col_name) then
  67 +
  68 + success(fk_view(app_name, table_name, fk_col_name))
  69 + }}}}
  70 + else
  71 + failure //No valid Alternative found !
  72 + else
  73 + failure //Type not found in message !
  74 + }}
  75 +.
  76 +
model/types/hk_help_text.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:19 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_icon.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:19 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_int_choice.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_int_choices.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_list_view.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_model.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:19 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_model_attr.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_model_column.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_model_field.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:19 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_table.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:19 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_text_choice.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_text_choices.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
model/types/hk_text_field_attr.anubis
1 /* 1 /*
2 * Created by 伝作 (Densaku). 2 * Created by 伝作 (Densaku).
3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ) 3 * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
4 - * Date: 2017-03-15  
5 - * Time: 02:24:20 4 + * Date: 2017-03-18
  5 + * Time: 23:38:31
6 * 6 *
7 */ 7 */
8 8
view/view_table_types.anubis
@@ -39,9 +39,15 @@ public define VT_edit_entry float(String s_name, String c_name, Float value) @@ -39,9 +39,15 @@ public define VT_edit_entry float(String s_name, String c_name, Float value)
39 public define VT_edit_entry information(String s_name, String c_name, String v_name, HK_Help_Text help) = information(s_name, c_name, v_name, 0, help). 39 public define VT_edit_entry information(String s_name, String c_name, String v_name, HK_Help_Text help) = information(s_name, c_name, v_name, 0, help).
40 40
41 41
42 -public type VT_edit:  
43 - vt_edit(String table_name, String view_name, List(VT_edit_entry) list). 42 +public type HK_V_Edit_Tab:
  43 + hk_v_edit_tab(String fk_table_name, String fk_col_name, String list_view_name)
  44 +.
44 45
  46 +public type VT_edit:
  47 + vt_edit(String table_name, String view_name, List(VT_edit_entry) list, List(HK_V_Edit_Tab) tabs).
  48 +
  49 +
  50 +
45 public type VT_view_entry: 51 public type VT_view_entry:
46 text(String text), 52 text(String text),
47 link(String id, String text), 53 link(String id, String text),