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 elementsource: "",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 objectvar 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 WireschildArgs.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 namewhich: "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 argumentsif(this.name){ // objectif(!args.children){args.children = {};}args.children[this.name] = this._getWire(parent);}else{ // arrayif(!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 objectreturn {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 namecolumn: "",_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 argumentsif(this.column){ // objectif(!args.columns){args.columns = {};}args.columns[this.column] = this._getWire(parent);}else{ // arrayif(!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 titletitleProperty: "",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 argumentsif(!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 objectvar 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 argumentsif(!args.segments){args.segments = [];}args.segments.push(this._getWire(parent));if(parent.delimiter && !args.delimiter){args.delimiter = parent.delimiter;}}});}