Joose.Managed.PropertySet.Composition = new Joose.Proto.Class('Joose.Managed.PropertySet.Composition', {
isa : Joose.Managed.PropertySet.Mutable,
propertyMetaClass : Joose.Managed.PropertySet.Mutable,
processOrder : null,
each : function (func, scope) {
var props = this.properties
Joose.A.each(this.processOrder, function(name){
func.call(scope || this, props[name], name)
}, this)
},
eachR : function (func, scope) {
var props = this.properties
for(var i = this.processOrder.length - 1; i >= 0; i--)
func.call(scope || this, props[this.processOrder[i]], this.processOrder[i])
},
clone : function (){
var clone = this.cleanClone()
this.each(function(property){
clone.addPropertyObject(property.clone())
})
return clone
},
alias : function (what){
this.each(function(property){
property.alias(what)
})
},
exclude : function (what){
this.each(function(property){
property.exclude(what)
})
},
flattenTo : function (target){
var targetProps = target.properties
this.each(function(property, name){
var subTarget = targetProps[name] || target.addProperty(name, {
meta : property.constructor
})
property.flattenTo(subTarget)
})
},
composeTo : function(target) {
var targetProps = target.properties
this.each(function(property, name){
var subTarget = targetProps[name] || target.addProperty(name, {
meta : property.constructor
})
property.composeTo(subTarget)
})
},
deCompose : function() {
this.eachR(function(property) {
property.open()
})
Joose.Managed.PropertySet.Composition.superClass.deCompose.call(this)
},
reCompose : function() {
Joose.Managed.PropertySet.Composition.superClass.reCompose.call(this)
this.each(function(property) {
property.close()
})
},
unapply : function(from){
this.eachR(function(property){
property.unapply(from)
})
}
}).c