Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

if(!dojo._hasResource["dojox.wire.ml.Data"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.wire.ml.Data"] = true;
dojo.provide("dojox.wire.ml.Data");
dojo.provide("dojox.wire.ml.DataProperty");

dojo.require("dijit._Widget");
dojo.require("dijit._Container");
dojo.require("dojox.wire.ml.util");

dojo.declare("dojox.wire.ml.Data", [dijit._Widget, dijit._Container], {
        //      summary:
        //              A widget for a data object
        //      description:
        //              This widget represents an object with '_properties' property.
        //              If child 'DataProperty' widgets exist, they are used to initialize
        //              propertiy values of '_properties' object.

        startup: function(){
                //      summary:
                //              Call _initializeProperties()
                //      description:
                //              See _initializeProperties().
                this._initializeProperties();
        },

        _initializeProperties: function(/*Boolean*/reset){
                //      summary:
                //              Initialize a data object
                //      description:
                //              If this widget has child DataProperty widgets, their getValue()
                //              methods are called and set the return value to a property
                //              specified by 'name' attribute of the child widgets.
                //      reset:
                //              A boolean to reset current properties
                if(!this._properties || reset){
                        this._properties = {};
                }
                var children = this.getChildren();
                for(var i in children){
                        var child = children[i];
                        if((child instanceof dojox.wire.ml.DataProperty) && child.name){
                                this.setPropertyValue(child.name, child.getValue());
                        }
                }
        },

        getPropertyValue: function(/*String*/property){
                //      summary:
                //              Return a property value
                //      description:
                //              This method returns the value of a property, specified with
                //              'property' argument, in '_properties' object.
                //      property:
                //              A property name
                //      returns:
                //              A property value
                return this._properties[property]; //anything
        },

        setPropertyValue: function(/*String*/property, /*anything*/value){
                //      summary:
                //              Store a property value
                //      description:
                //              This method stores 'value' as a property, specified with
                //              'property' argument, in '_properties' object.
                //      property:
                //              A property name
                //      value:
                //              A property value
                this._properties[property] = value;
        }
});

dojo.declare("dojox.wire.ml.DataProperty", [dijit._Widget, dijit._Container], {
        //      summary:
        //              A widget to define a data property
        //      description:
        //              Attributes of this widget are used to add a property to the parent
        //              Data widget.
        //              'type' attribute specifies one of "string", "number", "boolean",
        //              "array", "object" and "element" (DOM Element)
        //              (default to "string").
        //              If 'type' is "array" or "object", child DataProperty widgets are
        //              used to initialize the array elements or the object properties.
        //      name:
        //              A property name
        //      type:
        //              A property type name
        //      value:
        //              A property value
        name: "",
        type: "",
        value: "",

        getValue: function(){
                //      summary:
                //              Returns a property value
                //      description:
                //              If 'type' is specified, 'value' attribute is converted to
                //              the specified type and returned.
                //              Otherwise, 'value' attribute is returned as is.
                //      returns:
                //              A property value
                var value = this.value;
                if(this.type){
                        if(this.type == "number"){
                                value = parseInt(value);
                        }else if(this.type == "boolean"){
                                value = (value == "true");
                        }else if(this.type == "array"){
                                value = [];
                                var children = this.getChildren();
                                for(var i in children){
                                        var child = children[i];
                                        if(child instanceof dojox.wire.ml.DataProperty){
                                                value.push(child.getValue());
                                        }
                                }
                        }else if(this.type == "object"){
                                value = {};
                                var children = this.getChildren();
                                for(var i in children){
                                        var child = children[i];
                                        if((child instanceof dojox.wire.ml.DataProperty) && child.name){
                                                value[child.name] = child.getValue();
                                        }
                                }
                        }else if(this.type == "element"){
                                value = new dojox.wire.ml.XmlElement(value);
                                var children = this.getChildren();
                                for(var i in children){
                                        var child = children[i];
                                        if((child instanceof dojox.wire.ml.DataProperty) && child.name){
                                                value.setPropertyValue(child.name, child.getValue());
                                        }
                                }
                        }
                }
                return value; //anything
        }
});

}