]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/src/data/matrix/Matrix.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / src / data / matrix / Matrix.js
CommitLineData
6527f429
DM
1/**\r
2 * This class manages a many-to-many matrix for a `Session`.\r
3 * @private\r
4 */\r
5Ext.define('Ext.data.matrix.Matrix', {\r
6 requires: [\r
7 'Ext.data.matrix.Side'\r
8 ],\r
9\r
10 /**\r
11 * @property {Ext.data.schema.ManyToMany} association\r
12 * The `ManyToMany` association for this matrix.\r
13 * @readonly\r
14 */\r
15\r
16 /**\r
17 * @property {Ext.data.Session} session\r
18 * The `Session` owning this matrix.\r
19 * @readonly\r
20 */\r
21\r
22 /*\r
23 * data: [\r
24 * [ leftId, rightId, -1/0/1 ], // === DELETED/UNMODIFIED/ADDED\r
25 * ...\r
26 * ],\r
27 * \r
28 * left: new Ext.data.matrix.Side({\r
29 * matrix: me,\r
30 * index: 0,\r
31 * inverse: right,\r
32 * slices: {\r
33 * leftId: new Ext.data.matrix.Slice({\r
34 * id: leftId,\r
35 * side: left,\r
36 * members: {\r
37 * rightId: data[0]\r
38 * }\r
39 * })\r
40 * }\r
41 * },\r
42 * \r
43 * right: new Ext.data.matrix.Side({\r
44 * matrix: me,\r
45 * index: 1,\r
46 * inverse: left,\r
47 * slices: {\r
48 * rightId: new Ext.data.matrix.Slice({\r
49 * id: rightId,\r
50 * side: right,\r
51 * members: {\r
52 * leftId: data[0]\r
53 * }\r
54 * })\r
55 * })\r
56 * }\r
57 */\r
58\r
59 constructor: function (session, matrix) {\r
60 var me = this,\r
61 association = matrix.isManyToMany ? matrix\r
62 : session.getSchema().getAssociation(matrix),\r
63 Side = Ext.data.matrix.Side,\r
64 left = new Side(me, 0, association.left),\r
65 right = new Side(me, 1, association.right);\r
66\r
67 //<debug>\r
68 Ext.Assert.truthy(association.isManyToMany, 'Association is not many-to-many');\r
69 //</debug>\r
70\r
71 me.association = association;\r
72 me.session = session;\r
73\r
74 me.left = left;\r
75 me.right = right;\r
76\r
77 left.inverse = right;\r
78 right.inverse = left;\r
79 },\r
80\r
81 commit: function() {\r
82 this.left.commit();\r
83 this.right.commit();\r
84 },\r
85\r
86 update: function (id1, id2, state) {\r
87 return this.left.update(id1, id2, state);\r
88 },\r
89\r
90 updateId: function(record, oldId, newId) {\r
91 var Type = record.self,\r
92 left = this.left,\r
93 right = this.right,\r
94 matchSide;\r
95\r
96 // Are we interested in this record? Check types\r
97 if (Type === left.role.cls) {\r
98 matchSide = left;\r
99 }\r
100\r
101 if (Type === right.role.cls) {\r
102 matchSide = right;\r
103 }\r
104\r
105 if (matchSide) {\r
106 matchSide.updateId(oldId, newId);\r
107 }\r
108 },\r
109\r
110 destroy: function() {\r
111 var me = this;\r
112\r
113 me.left.destroy();\r
114 me.right.destroy();\r
115\r
116 me.association = me.session = me.left = me.right = null;\r
117 me.callParent();\r
118 }\r
119});\r