package com.flexicious.example.model
{
import com.flexicious.example.model.persons.SystemUser;
import com.flexicious.nestedtreedatagrid.utils.ExtendedUIUtils;
import com.flexicious.utils.UIUtils;
import flash.system.System;
import mx.collections.ArrayCollection;
import mx.utils.ObjectUtil;
[Bindable(public class BaseEntity
{
public var addedBy:SystemUser;
public var addedDate:Date;
public var updatedBy:SystemUser;
public var updatedDate:Date;
public var id:Number;
public function BaseEntity()
{
}
public function clone(deepClone:Boolean=true):BaseEntity{
var entity:BaseEntity=createNew();
entity.addedBy=addedBy;
for each(var levelProp:String in ObjectUtil.getClassInfo(this,null,{"includeReadOnly":false}).properties) {
if(UIUtils.isPrimitive(this[levelProp])){
entity[levelProp]=this[levelProp];
}
else if(this[levelProp]is BaseEntity){
entity[levelProp]=(this[levelProp]as BaseEntity);
}
else if(deepClone&&this[levelProp]is ArrayCollection)
{
entity[levelProp]=new ArrayCollection();
for each(var item:BaseEntity in this[levelProp])
{
entity[levelProp].addItem(item.clone(deepClone));
}
}
}
return entity;
}
public function createNew():BaseEntity{
throw new Error("Psuedo abstract method, need to override");
}
}
}