Source: br-presenter/src/br/presenter/property/Alias.js

'use strict';

var Core = require('br/Core');
var Errors = require('br/Errors');
var Property = require('br/presenter/property/Property');

/**
 * @module br/presenter/property/Alias
 */

/**
 * Constructs a new <code>Alias</code> instance.
 * 
 * @class
 * @alias module:br/presenter/property/Alias
 * @extends module:br/presenter/property/Property
 * 
 * @classdesc
 * <code>Alias</code> instances wrap instances of {@link module:br/presenter/property/Property} and keep the
 * values synchronised, to allow access to the same property from multiple paths (e.g. double binding).
 * 
 * @param {module:br/presenter/property/Property} oProperty The property to wrap.
 */
function Alias(oProperty) {
	if (!(oProperty instanceof Property)) {
		throw new Errors.InvalidParametersError('An Alias can only constructed with a presenter Property');
	}

	/** @private */
	this.m_oWrappedProperty = oProperty;

	oProperty.addChangeListener(this._onWrappedChanged.bind(this), false);
	var vInitial = oProperty.getValue();
	Property.call(this, vInitial);
}

Core.extend(Alias, Property);

/**
 * @private
 */
Alias.prototype._onWrappedChanged = function() {
	var vValue = this.m_oWrappedProperty.getValue();
	this._$setInternalValue(vValue);
};

Alias.prototype.getValue = function() {
	return this.m_oWrappedProperty.getValue();
};

Alias.prototype.getFormattedValue = function() {
	return this.m_oWrappedProperty.getFormattedValue();
};

Alias.prototype.getRenderedValue = function() {
	return this.m_oWrappedProperty.getRenderedValue();
};

module.exports = Alias;