# Source: SystemMetadata.js

    (function(window)
    {
        var Gitana = window.Gitana;

        Gitana.SystemMetadata = Base.extend(
        /** @lends Gitana.SystemMetadata.prototype */
        {
            /**
             * @constructs
             *
             * @class System Metadata
             */
            constructor: function()
            {
                this.base();
            },

            updateFrom: function(json)
            {
                // clear old system properties
                Gitana.deleteProperties(this, false);

                Gitana.copyInto(this, json);
            },

            get: function(key)
            {
                return this[key];
            },

            /**
             * Retrieves the changeset id.
             *
             * @public
             *
             * @return the changeset id
             */
            getChangesetId: function()
            {
                return this.get("changeset");
            },

            /**
             * Retrieves the name of the user who created this object.
             *
             * @public
             *
             * @return the user name of the creator
             */
            getCreatedBy: function()
            {
                return this.get("created_by");
            },

            /**
             * Retrieves the id of the user who created this object.
             *
             * @public
             *
             * @return the user id of the creator
             */
            getCreatedByPrincipalId: function()
            {
                return this.get("created_by_principal_id");
            },

            /**
             * Retrieves the domain id of the user who created this object.
             *
             * @public
             *
             * @return the user domain id of the creator
             */
            getCreatedByPrincipalDomainId: function()
            {
                return this.get("created_by_principal_domain_id");
            },

            /*
            readCreatedByPrincipal: function(platform)
            {
                return this.subchain(platform).readDomain(this.getCreatedByPrincipalDomainId).readPrincipal(this.getCreatedByPrincipalId);
            },
            */

            /**
             * Retrieves the id of the user who modified this object.
             *
             * @public
             *
             * @return the user id of the modifier
             */
            getModifiedBy: function()
            {
                return this.get("modified_by");
            },

            /**
             * Retrieves the id of the user who modified this object.
             *
             * @public
             *
             * @return the user id of the modifier
             */
            getModifiedByPrincipalId: function()
            {
                return this.get("modified_by_principal_id");
            },

            /**
             * Retrieves the domain id of the user who modified this object.
             *
             * @public
             *
             * @return the user domain id of the modifier
             */
            getModifiedByPrincipalDomainId: function()
            {
                return this.get("modified_by_principal_domain_id");
            },

            /*
            readModifiedByPrincipal: function(platform)
            {
                return this.subchain(platform).readDomain(this.getModifiedByPrincipalDomainId).readPrincipal(this.getModifiedByPrincipalId);
            },
            */

            /**
             * Retrieves the timestamp for creation of this object.
             *
             * @public
             *
             * @return creation timestamp
             */
            getCreatedOn: function()
            {
                if (!this.createdOn)
                {
                    this.createdOn = new Gitana.Timestamp(this.get("created_on"));
                }

                return this.createdOn;
            },

            /**
             * Retrieves the timestamp for modification of this object.
             *
             * @public
             *
             * @return modification timestamp
             */
            getModifiedOn: function()
            {
                if (!this.modifiedOn)
                {
                    this.modifiedOn = new Gitana.Timestamp(this.get("modified_on"));
                }

                return this.modifiedOn;
            }

        });

    })(window);