/**
 * This is a generated class and is not intended for modfication.  
 */
package valueObjects
{
import com.adobe.fiber.core.model_internal;
import com.adobe.fiber.styles.IStyle;
import com.adobe.fiber.styles.Style;
import com.adobe.fiber.styles.LocalizeableMessage;
import com.adobe.fiber.valueobjects.IModelType;
import com.adobe.fiber.valueobjects.IPropertyIterator;
import com.adobe.fiber.valueobjects.AvailablePropertyIterator;
import com.adobe.fiber.valueobjects.AbstractEntityMetadata;
import mx.events.PropertyChangeEvent;

use namespace model_internal;

[ExcludeClass]internal class _RrinvisEntityMetadata extends AbstractEntityMetadata
{
    private static var emptyArray:Array = new Array();

    model_internal static var allProperties:Array = new Array("id", "type", "doc", "dayy", "genleg", "status", "qty", "amount", "account", "deptment");
    model_internal static var allAssociationProperties:Array = new Array();
    model_internal static var allRequiredProperties:Array = new Array("id", "type", "doc", "dayy", "genleg", "status", "qty", "amount", "account", "deptment");
    model_internal static var allAlwaysAvailableProperties:Array = new Array("id", "type", "doc", "dayy", "genleg", "status", "qty", "amount", "account", "deptment");
    model_internal static var guardedProperties:Array = new Array();
    model_internal static var dataProperties:Array = new Array("id", "type", "doc", "dayy", "genleg", "status", "qty", "amount", "account", "deptment");
    model_internal static var derivedProperties:Array = new Array();
    model_internal static var collectionProperties:Array = new Array();
    model_internal static var collectionBaseMap:Object;    
    model_internal static var entityName:String = "Rrinvis";
    model_internal static var dependentsOnMap:Object;    
    model_internal static var dependedOnServices:Array =  new Array();
    
    
    model_internal var _instance:_Super_Rrinvis;
    model_internal static var _nullStyle:Style = new Style();
    
    public function _RrinvisEntityMetadata(rrinvis : _Super_Rrinvis)
    {
        // initialize property maps
        if (model_internal::dependentsOnMap == null)
        {
            // depenents map
            model_internal::dependentsOnMap = new Object();
            model_internal::dependentsOnMap["id"] = new Array();
            model_internal::dependentsOnMap["type"] = new Array();
            model_internal::dependentsOnMap["doc"] = new Array();
            model_internal::dependentsOnMap["dayy"] = new Array();
            model_internal::dependentsOnMap["genleg"] = new Array();
            model_internal::dependentsOnMap["status"] = new Array();
            model_internal::dependentsOnMap["qty"] = new Array();
            model_internal::dependentsOnMap["amount"] = new Array();
            model_internal::dependentsOnMap["account"] = new Array();
            model_internal::dependentsOnMap["deptment"] = new Array();
                        
            // collection base map
            model_internal::collectionBaseMap = new Object()
        }                        
        
        model_internal::_instance = rrinvis;     
    }
    
    override public function getEntityName():String
    {
        return model_internal::entityName;
    }    
    
    override public function getProperties():Array
    {
        return model_internal::allProperties;
    }
    
    override public function getAssociationProperties():Array
    {
        return model_internal::allAssociationProperties;
    }    
    
    override public function getRequiredProperties():Array
    {
         return model_internal::allRequiredProperties;   
    }
    
    override public function getDataProperties():Array
    {
        return model_internal::dataProperties;
    }    
    
    override public function getGuardedProperties():Array
    {
        return model_internal::guardedProperties;
    }     
    
    override public function getUnguardedProperties():Array
    {
        return model_internal::allAlwaysAvailableProperties;
    }        
    
    override public function getDependants(propertyName:String):Array
    {
       if (model_internal::dataProperties.indexOf(propertyName) == -1)
            throw new Error(propertyName + " is not a data property of entity Rrinvis");  
            
       return model_internal::dependentsOnMap[propertyName] as Array;  
    }
    
    override public function getDependedOnServices():Array
    {
        return model_internal::dependedOnServices;
    }
    
    override public function getCollectionProperties():Array
    {
        return model_internal::collectionProperties;
    }
    
    override public function getCollectionBase(propertyName:String):String
    {
       if (model_internal::collectionProperties.indexOf(propertyName) == -1)
            throw new Error(propertyName + " is not a collection property of entity Rrinvis");  
            
       return model_internal::collectionBaseMap[propertyName];
    }                
    
     override public function getAvailableProperties():IPropertyIterator
     {
         return new AvailablePropertyIterator(this); 
     }  
     
     override public function getValue(propertyName:String):*    
     {
         if (model_internal::allProperties.indexOf(propertyName) == -1)
         {
             throw new Error(propertyName + " does not exist for entity Rrinvis");
         }     
           
         return model_internal::_instance[propertyName];
     }       
     
     override public function setValue(propertyName:String, value:*):void   
     {
         if (model_internal::dataProperties.indexOf(propertyName) == -1)
         {
              throw new Error(propertyName + " is not a data property of entity Rrinvis");
         }  
                                                     
         model_internal::_instance[propertyName] = value;
     }     
     
     override public function getMappedByProperty(associationProperty:String):String
     {
        switch(associationProperty)
        {
            default:
            {
                return null;
            }
        }   
     }
     
     override public function getPropertyLength(propertyName:String):int
     {
        switch(propertyName)
        {
            default:
            {
                return 0;
            }
        }  
     }
     
     override public function isAvailable(propertyName:String):Boolean
     {         
         if (model_internal::allProperties.indexOf(propertyName) == -1)
         {
             throw new Error(propertyName + " does not exist for entity Rrinvis");
         }   
                
         if (model_internal::allAlwaysAvailableProperties.indexOf(propertyName) != -1)
         {
             return true;
         }
         
         switch(propertyName)
         {
            default:
            {
                return true;
            }
         }                                  
     }  
     
     override public function getIdentityMap():Object
     {
         var returnMap:Object = new Object();
         returnMap["id"] = model_internal::_instance.id;
       
         return returnMap;
     }       
     
     [Bindable(event="propertyChange")]
     override public function get invalidConstraints():Array
     {
        if (model_internal::_instance.model_internal::_cacheInitialized_isValid)
        {
            return model_internal::_instance.model_internal::_invalidConstraints;
        }
        else
        {
            // recalculate isValid
            model_internal::_instance.model_internal::_isValid = model_internal::_instance.model_internal::calculateIsValid();
            model_internal::_instance.model_internal::_cacheInitialized_isValid = true;
            return model_internal::_instance.model_internal::_invalidConstraints;        
        }        
     }       
     
     [Bindable(event="propertyChange")]
     override public function get validationFailureMessages():Array
     {
        if (model_internal::_instance.model_internal::_cacheInitialized_isValid)
        {
            return model_internal::_instance.model_internal::_validationFailureMessages;
        }
        else
        {
            // recalculate isValid
            model_internal::_instance.model_internal::_isValid = model_internal::_instance.model_internal::calculateIsValid();
            model_internal::_instance.model_internal::_cacheInitialized_isValid = true;
            return model_internal::_instance.model_internal::_validationFailureMessages;        
        }        
     }       
     
     override public function getDependantInvalidConstraints(propertyName:String):Array
     {
        var dependants:Array = getDependants(propertyName);
        if (dependants.length == 0)
        {
            return emptyArray;
        }
        
        var currentlyInvalid:Array = invalidConstraints;
        if (currentlyInvalid.length == 0)
        {
            return emptyArray;
        }
            
        var filterFunc:Function = function(element:*, index:int, arr:Array):Boolean
        {
            return dependants.indexOf(element) > -1;     
        }                              
        
        return currentlyInvalid.filter(filterFunc);
     }      
     
    /**
     * isValid
     */
    [Bindable("propertyChange")] 
    public function get isValid() : Boolean
    {
        if (model_internal::_instance.model_internal::_cacheInitialized_isValid)
        {
            return model_internal::_instance.model_internal::_isValid;
        }
        else
        {
            // recalculate isValid
            model_internal::_instance.model_internal::_isValid = model_internal::_instance.model_internal::calculateIsValid();
            return model_internal::_instance.model_internal::_isValid;        
        }
    }       
     
     [Bindable(event="propertyChange")] 
     public function get isIdAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isTypeAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isDocAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isDayyAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isGenlegAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isStatusAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isQtyAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isAmountAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isAccountAvailable():Boolean
     {
        return true;
     }                       
                  
     [Bindable("propertyChange")] 
     public function get isDeptmentAvailable():Boolean
     {
        return true;
     }                       
                  

    /**
     * derived property recalculation
     */

     model_internal function fireChangeEvent(propertyName:String, oldValue:Object, newValue:Object):void
     {
         this.dispatchEvent(mx.events.PropertyChangeEvent.createUpdateEvent(this, propertyName, oldValue, newValue));
     }

    [Bindable("propertyChange")]   
    public function get idStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get typeStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get docStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get dayyStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get genlegStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get statusStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get qtyStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get amountStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get accountStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    
    [Bindable("propertyChange")]   
    public function get deptmentStyle():Style
    {
        return model_internal::_nullStyle;        
    }      
    

     /**
     * 
     * @inheritDoc 
     */ 
     override public function getStyle(propertyName:String):IStyle
     {
         switch(propertyName)
         {
            default:
            {
                return null;
            }
         }
     }
     
     /**
     * 
     * @inheritDoc 
     *  
     */  
     override public function getPropertyValidationFailureMessages(propertyName:String):Array
     {
         switch(propertyName)
         {
            default:
            {
                return emptyArray;
            }
         }
     }
    
}

}