Subversion Repositories Applications.papyrus

Rev

Blame | Last modification | View Log | RSS feed

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

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

dojo.declare("dojox.wire.ml.Transfer", dojox.wire.ml.Action, {
        //      summary:
        //              A widget to transfer values through source and target Wires
        //      description:
        //              This widget represents a controller task to transfer a value from
        //              a source to a target, through a source and a target Wires, when
        //              an event (a function) or a topic is issued.
        //              If this widget has child ChildWire widgets, their _addWire()
        //              methods are called to add Wire arguments to a source or a target
        //              Wire.
        //      source:
        //              A source object and/or property
        //      sourceStore:
        //              A data store for a source data item
        //      sourceAttribute:
        //              An attribute of a source data item
        //      sourcePath:
        //              A simplified XPath to a source property of an XML element
        //      type:
        //              A type of the value to be transferred
        //      converter:
        //              A class name of a converter for the value to be transferred
        //      target:
        //              A target object and/or property
        //      targetStore:
        //              A data store for a target data item
        //      targetAttribute:
        //              An attribute of a target data item
        //      targetPath:
        //              A simplified XPath to a target property of an XML element
        source: "",
        sourceStore: "",
        sourceAttribute: "",
        sourcePath: "",
        type: "",
        converter: "",
        delimiter: "",
        target: "",
        targetStore: "",
        targetAttribute: "",
        targetPath: "",

        _run: function(){
                //      summary:
                //              Transfer a value from a source to a target
                //      description:
                //              First, Wires for a source and a target are created from attributes.
                //              Then, a value is obtained by getValue() of the source Wire is set
                //              by setValue() of the target Wire.
                //              The arguments to this method is passed to getValue() and setValue()
                //              of Wires, so that they can be used to identify the root objects off
                //              the arguments.
                var sourceWire = this._getWire("source");
                var targetWire = this._getWire("target");
                dojox.wire.transfer(sourceWire, targetWire, arguments);
        },

        _getWire: function(/*String*/which){
                //      summary:
                //              Build Wire arguments from attributes
                //      description:
                //              Arguments object for a source or a target Wire, specified by
                //              'which' argument, are build from corresponding attributes,
                //              including '*Store' (for 'dataStore'), '*Attribute'
                //              (for 'attribute), '*Path' (for 'path'), 'type' and 'converter'.
                //              'source' or 'target' attribute is parsed as:
                //                      "object_id.property_name[.sub_property_name...]"
                //              If 'source' or 'target' starts with "arguments", 'object'
                //              argument for a Wire is set to null, so that the root object is
                //              given as an event or topic arguments.
                //              If this widget has child ChildWire widgets with a corresponding
                //              'which' attribute, their _addWire() methods are called to add
                //              additional Wire arguments and nested Wire is created,
                //              specifying the Wire defined by this widget to 'object' argument.
                //      which:
                //              Which Wire arguments to build, "source" or "target"
                //      returns:
                //              Wire arguments object
                var args = undefined;
                if(which == "source"){
                        args = {
                                object: this.source,
                                dataStore: this.sourceStore,
                                attribute: this.sourceAttribute,
                                path: this.sourcePath,
                                type: this.type,
                                converter: this.converter
                        };
                }else{ // "target"
                        args = {
                                object: this.target,
                                dataStore: this.targetStore,
                                attribute: this.targetAttribute,
                                path: this.targetPath
                        };
                }
                if(args.object){
                        if(args.object.length >= 9 && args.object.substring(0, 9) == "arguments"){
                                args.property = args.object.substring(9);
                                args.object = null;
                        }else{
                                var i = args.object.indexOf('.');
                                if(i < 0){
                                        args.object = dojox.wire.ml._getValue(args.object);
                                }else{
                                        args.property = args.object.substring(i + 1);
                                        args.object = dojox.wire.ml._getValue(args.object.substring(0, i));
                                }
                        }
                }
                if(args.dataStore){
                        args.dataStore = dojox.wire.ml._getValue(args.dataStore);
                }
                var childArgs = undefined;
                var children = this.getChildren();
                for(var i in children){
                        var child = children[i];
                        if(child instanceof dojox.wire.ml.ChildWire && child.which == which){
                                if(!childArgs){
                                        childArgs = {};
                                }
                                child._addWire(this, childArgs);
                        }
                }
                if(childArgs){ // make nested Wires
                        childArgs.object = dojox.wire.create(args);
                        childArgs.dataStore = args.dataStore;
                        args = childArgs;
                }
                return args; //Object
        }
});

dojo.declare("dojox.wire.ml.ChildWire", dijit._Widget, {
        //      summary:
        //              A widget to add a child wire
        //      description:
        //              Attributes of this widget are used to add a child Wire to
        //              a composite Wire of the parent Transfer widget.
        //      which:
        //              Which Wire to add a child Wire, "source" or "target", default to
        //              "source"
        //      object:
        //              A root object for the value
        //      property:
        //              A property for the value
        //      type:
        //              A type of the value
        //      converter:
        //              A class name of a converter for the value
        //      attribute:
        //              A data item attribute for the value
        //      path:
        //              A simplified XPath for the value
        //      name:
        //              A composite property name
        which: "source",
        object: "",
        property: "",
        type: "",
        converter: "",
        attribute: "",
        path: "",
        name: "",

        _addWire: function(/*Transfer*/parent, /*Object*/args){
                //      summary:
                //              Add a child Wire to Wire arguments
                //      description:
                //              If 'name' attribute is specified, a child Wire is added as
                //              the named property of 'children' object of 'args'.
                //              Otherwise, a child Wire is added to 'children' array of 'args'.
                //      parent:
                //              A parent Transfer widget
                //      args:
                //              Wire arguments
                if(this.name){ // object
                        if(!args.children){
                                args.children = {};
                        }
                        args.children[this.name] = this._getWire(parent);
                }else{ // array
                        if(!args.children){
                                args.children = [];
                        }
                        args.children.push(this._getWire(parent));
                }
        },

        _getWire: function(/*Transfer*/parent){
                //      summary:
                //              Build child Wire arguments from attributes
                //      description:
                //              Arguments object for a child Wire are build from attributes,
                //              including 'object', 'property', 'type', 'converter',
                //              'attribute' and 'path'.
                //      parent:
                //              A parent Transfer widget
                //      returns:
                //              Wire arguments object
                return {
                        object: (this.object ? dojox.wire.ml._getValue(this.object) : undefined),
                        property: this.property,
                        type: this.type,
                        converter: this.converter,
                        attribute: this.attribute,
                        path: this.path
                }; //Object
        }
});

dojo.declare("dojox.wire.ml.ColumnWire", dojox.wire.ml.ChildWire, {
        //      summary:
        //              A widget to add a column wire
        //      description:
        //              Attributes of this widget are used to add a column Wire to
        //              a TableAdapter of the parent Transfer widget.
        //      column:
        //              A column name
        column: "",

        _addWire: function(/*Transfer*/parent, /*Object*/args){
                //      summary:
                //              Add a column Wire to Wire arguments
                //      description:
                //              If 'column' attribute is specified, a column Wire is added as
                //              the named property of 'columns' object of 'args'.
                //              Otherwise, a column Wire is added to 'columns' array of 'args'.
                //      parent:
                //              A parent Transfer widget
                //      args:
                //              Wire arguments
                if(this.column){ // object
                        if(!args.columns){
                                args.columns = {};
                        }
                        args.columns[this.column] = this._getWire(parent);
                }else{ // array
                        if(!args.columns){
                                args.columns = [];
                        }
                        args.columns.push(this._getWire(parent));
                }
        }
});

dojo.declare("dojox.wire.ml.NodeWire", [dojox.wire.ml.ChildWire, dijit._Container], {
        //      summary:
        //              A widget to add node wires
        //      description:
        //              Attributes of this widget are used to add node Wires to
        //              a TreeAdapter of the parent Transfer widget.
        //      titleProperty:
        //              A property for the node title
        //      titleAttribute:
        //              A data item attribute for the node title
        //      titlePath:
        //              A simplified XPath for the node title
        titleProperty: "",
        titleAttribute: "",
        titlePath: "",

        _addWire: function(/*Transfer*/parent, /*Object*/args){
                //      summary:
                //              Add node Wires to Wire arguments
                //      description:
                //              Node Wires are added to 'nodes' array of 'args'.
                //      parent:
                //              A parent Transfer widget
                //      args:
                //              Wire arguments
                if(!args.nodes){
                        args.nodes = [];
                }
                args.nodes.push(this._getWires(parent));
        },

        _getWires: function(/*Transfer*/parent){
                //      summary:
                //              Build node Wires arguments from attributes
                //      description:
                //              Arguments object for 'node' Wire are build from attributes,
                //              including 'object', 'property', 'type', 'converter',
                //              'attribute' and 'path'.
                //              Arguments object for 'title' Wire are build from another set of
                //              attributes, 'titleProperty', 'titleAttribute' and 'titlePath'.
                //              If this widget has child NodeWire widgets, their _getWires()
                //              methods are called recursively to build 'children' array of
                //              'args'.
                //      parent:
                //              A parent Transfer widget
                //      returns:
                //              Wire arguments object
                var args = {
                        node: this._getWire(parent),
                        title: {
                                type: "string",
                                property: this.titleProperty,
                                attribute: this.titleAttribute,
                                path: this.titlePath
                        }
                };
                var childArgs = [];
                var children = this.getChildren();
                for(var i in children){
                        var child = children[i];
                        if(child instanceof dojox.wire.ml.NodeWire){
                                childArgs.push(child._getWires(parent));
                        }
                }
                if(childArgs.length > 0){
                        args.children = childArgs;
                }
                return args; //Object
        }
});

dojo.declare("dojox.wire.ml.SegmentWire", dojox.wire.ml.ChildWire, {
        //      summary:
        //              A widget to add a segment wire
        //      description:
        //              Attributes of this widget are used to add a segment Wire to
        //              a TextAdapter of the parent Transfer widget.

        _addWire: function(/*Transfer*/parent, /*Object*/args){
                //      summary:
                //              Add a segument Wire to Wire arguments
                //      description:
                //              A segment Wire is added to 'segments' array of 'args'.
                //              If 'parent' has 'delimiter' attribute, it is used for
                //              'delimiter' property of 'args'.
                //      parent:
                //              A parent Transfer widget
                //      args:
                //              Wire arguments
                if(!args.segments){
                        args.segments = [];
                }
                args.segments.push(this._getWire(parent));
                if(parent.delimiter && !args.delimiter){
                        args.delimiter = parent.delimiter;
                }
        }
});

}