1 //!-- UTF8 2 /* 3 Oregano Multiuser Server - Version 1.2.0 - January 4th, 2005 4 5 Web: www.oregano-server.org 6 Mail: info@oregano-server.org 7 8 Copyright 2003 - 2004 - 2004 Jens Halm / Cologne, Germany 9 10 This library is free software; you can redistribute it and/or 11 modify it under the terms of the GNU Lesser General Public 12 License as published by the Free Software Foundation; either 13 version 2.1 of the License, or (at your option) any later version. 14 15 This library is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 Lesser General Public License for more details. 19 20 You should have received a copy of the GNU Lesser General Public 21 License along with this library; if not, write to the Free Software 22 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 */ 24 25 /* 26 ------------------------------------------- 27 Classe TableBackup 28 29 @description : 30 Conserve un état d'un objet Table. 31 32 33 @author Jens Halm copyright http://www.spicefactory.org/ 34 @author erixtekila copyleft http://www.v-i-a.net 35 ------------------------------------------- 36 version history : 37 1.2.0 : 18/01/05 38 - Portage en actionscript 2 pour le 39 compile time type checking 40 ------------------------------------------- 41 */ 42 43 import org.omus.data.Table; 44 import org.omus.data.DataParser; 45 46 /** 47 * Conserve un état d'un objet Table. 48 * 49 * @see org.omus.data.Table 50 * @author Jens Halm copyright http://www.spicefactory.org/ 51 * @author erixtekila copyleft http://www.v-i-a.net 52 * @version 1.2.0 53 */ 54 class org.omus.data.TableBackup 55 { 56 //-------------------- 57 // PROPRIETES 58 //-------------------- 59 /** 60 * Indexation des enregistrements. 61 */ 62 private var rowMap:Object; 63 64 /** 65 * Liste ordonnée des identifiants (stack). 66 */ 67 private var rowIDList:Array; 68 69 /** 70 * Liste des identifiants des enregistrements à supprimer. 71 */ 72 private var remIDList:Array; 73 74 /** 75 * Flag pour overwrite des données du backup 76 */ 77 public var clear:Boolean; 78 79 //-------------------- 80 // CONSTRUCTEUR 81 //-------------------- 82 /** 83 * TODO 84 */ 85 public function TableBackup() 86 { 87 // Propriétés 88 rowMap = new Object(); 89 rowIDList = new Array(); 90 remIDList = new Array(); 91 92 // trace(this+ " installé."); 93 } 94 95 //-------------------- 96 // METHODES PUBLIQUES 97 //-------------------- 98 /** 99 * Utilisé dans un contexte littéral 100 * 101 * @return Une chaine définissant l'objet 102 */ 103 public function toString():String 104 { 105 return "[Object TableBackup] \norg.omus.data.TableBackup - number of rows = " + rowIDList.length; 106 } 107 108 /** 109 * Rajoute un enregistrement. 110 * 111 * @param rowID Identifiant. 112 * @param marshRow Enregistrement encodé. 113 */ 114 public function addRow (rowID:Number, marshRow:String):Void 115 { 116 rowMap["r" + rowID] = marshRow; 117 rowIDList.push(rowID); 118 } 119 120 /** 121 * Rajoute un enregistrement à supprimer. 122 * 123 * @param rowID Identifiant. 124 */ 125 public function addRemoveRow (rowID:Number):Void 126 { 127 remIDList.push("r" + rowID); 128 } 129 130 /** 131 * Mise à jour le backup de la table. 132 * TODO ? 133 * 134 * @param table TableProperty à mettre à jour. 135 * @param backup La sauvegarde de TableProperty. 136 */ 137 public function update (table:Table, backup:TableBackup):Void 138 { 139 if (backup.clear) this.rowMap = new Object(); 140 var rm = backup.rowMap; 141 var trm = this.rowMap; 142 for (var each:String in rm) 143 { 144 trm[each] = rm[each]; 145 } 146 var rem = backup.remIDList; 147 var long = rem.length; 148 for (var i = 0; i < long ; i++) delete trm[rem[i]]; 149 this.rowIDList = table.getRowIDList(); 150 } 151 152 /** 153 * Revient à la version précédente du backup. 154 * 155 * @param table TODO 156 */ 157 public function restore (table:Table):Void 158 { 159 // Arrêt temporaire 160 table.enableRecording(false); 161 162 table.removeAllRows(); 163 var colNames = table.getDefinition().getColumnNames(); 164 var rl = rowIDList; 165 var rm = rowMap; 166 var dp:DataParser; 167 var long = rl.length; 168 for (var i = 0; i < long ; i++) 169 { 170 var rowID = rl[i]; 171 var str = rm["r" + rowID]; 172 if (i == 0) 173 { 174 dp = new DataParser(str, 0); 175 } else 176 { 177 dp.reset(str, 0); 178 } 179 var arr = dp.nextArray(true); 180 if (dp.error != null) 181 { 182 // Logs internes 183 _global.oregano.iLog.error("clj-032","error = " + dp.error); 184 return; 185 } 186 var row = org.omus.data.DataParser.arrayToRow(arr, colNames); 187 row.__rowID = rowID; 188 _global.ASSetPropFlags(row,["__rowID"],7); 189 table.addExistingRow(rowID,row); 190 } 191 table.enableRecording(true); 192 } 193 194 //-------------------- 195 // METHODES PRIVEES 196 //-------------------- 197 198 //-------------------- 199 // METHODES STATIQUES 200 //-------------------- 201 /** 202 * Utilisé dans un contexte littéral 203 * @return Une chaine définissant l'objet 204 */ 205 public static function toLog():String 206 { 207 return "[Object TableBackup]"; 208 } 209 } 210