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