1 /**
  2  * @author Gillis Haasnoot <gillis.haasnoot@gmail.com>
  3  * @package Banana.Controls
  4  * @summary Equal validator
  5  */
  6 
  7 goog.provide('Banana.Controls.Decorators.EqualValidator');
  8 
  9 goog.require('Banana.Controls.Decorators.Validator');
 10 
 11 /** @namespace Banana.Controls.Decorators.EqualValidator */
 12 namespace('Banana.Controls.Decorators').EqualValidator = Banana.Controls.Decorators.Validator.extend(
 13 /** @lends Banana.Controls.Decorators.EqualValidator.prototype */
 14 {
 15 
 16 	/**
 17 	 * Creates a equal validator
 18 	 * Use setControlIdToMath to determine against which control the decorated control should match its data.
 19 	 * Note that this control doesn't compare complex objects like arrays or objects. Use controls with string data only
 20 	 * 
 21 	 * @param {Banana.Controls.InputControl} c
 22 	 * @constructs
 23 	 * @extends Banana.Controls.Decorators.Validator
 24 	 */
 25 	init : function(c)
 26 	{
 27 		this._super(c);
 28 		this.setInfoText('Fields should be equal');
 29 	},
 30 	
 31 	/**
 32 	 * sets the control id to match data on
 33 	 * 
 34 	 * @param {String} controlId
 35 	 * @return {this}
 36 	 */
 37 	setControlIdToMatch: function(controlId)
 38 	{
 39 		this.controlIdToMatch = controlId;
 40 		return this;
 41 	},
 42 	
 43 	/**
 44 	 * sets the control id to match data on
 45 	 * 
 46 	 * @param {Banana.Control} control
 47 	 * @return {this}
 48 	 */
 49 	setControlToMatch : function(control)
 50 	{
 51 		this.controlIdToMatch = control.id;
 52 		return this;
 53 	},
 54 	
 55 	/**
 56 	 * validates data
 57 	 * 
 58 	 * @overrided
 59 	 * @param {String} data
 60 	 */
 61 	validateData : function(data)
 62 	{
 63 		control = this.getPage().findControl(this.controlIdToMatch);
 64 		
 65 		if (!control)
 66 		{
 67 			log.error("Control "+this.getDecoratedControl().id+ " Doesnt have control defined to check equality on");
 68 			return;
 69 		}
 70 		
 71 		if (data === control.getData())
 72 		{
 73 			return true;
 74 		}
 75 		
 76 		return false;
 77 	}	
 78 });