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; } } }); }