         ###*
         property whose type is CREATED_AT
         @property {String} createdAt
+        @public
+        @readonly
         ###
         @createdAt = null
 
         ###*
         property whose type is UPDATED_AT
         @property {String} updatedAt
+        @public
+        @readonly
         ###
         @updatedAt = null
 
         ###*
         properties whose type is DATE, CREATED_AT and UPDATED_AT
         @property {Array(String)} dates
+        @public
+        @readonly
         ###
         @dates = []
 

        return


    getNames: ->
        Object.keys @typeInfoDic


    getEntities: ->
        Object.keys @entityDic


    getSubModelProps: ->
        @subModelProps.slice()


        !!@typeInfoDic[prop]?.omit


    ###*
    get prop name of id of entity prop

    @method getSubIdProp
    @param {String} prop
    @return {String} idPropName
    ###
    getSubIdProp: (entityProp) ->

        @typeInfoDic[entityProp]?.idPropName


    ###*
    get model name of model prop

    @method getSubModelProps
    @param {String} prop
    @return {String} model name
    ###
    getSubModelName: (prop) ->

        @typeInfoDic[prop]?.model


    ###*
    check if the prop is optional

    @method isOptional
    @param {String} prop
    @return {Boolean}
    ###
    isOptional: (prop) ->

        !!@typeInfoDic[prop]?.optional


    ###*
    get the default value of the prop

    @method getDefaultValue
    @param {String} prop
    @return {any} defaultValue
    ###
    getDefaultValue: (prop) ->

        @typeInfoDic[prop]?.default
