define(["jquery", "underscore", "backbone", "models/metadata/eml211/EMLNonNumericDomain", "models/metadata/eml211/EMLNumericDomain", "models/metadata/eml211/EMLDateTimeDomain"], function($, _, Backbone, EMLNonNumericDomain, EMLNumericDomain, EMLDateTimeDomain) { /** * @class EMLMeasurementScale * @classdesc EMLMeasurementScale is a measurement scale factory that returns * an EMLMeasurementScale subclass of either EMLNonNumericDomain, * EMLNumericDomain, or EMLDateTimeDomain, depending on the * domain name found in the given measurementScaleXML * @classcategory Models/Metadata/EML211 */ var EMLMeasurementScale = Backbone.Model.extend({}, /** @lends EMLMeasurementScale.prototype */ { /* * Get an instance of an EMLMeasurementScale subclass * given the measurementScaleXML fragment */ getInstance: function(measurementScaleXML) { var instance = {}; if(measurementScaleXML && measurementScaleXML.indexOf("<") > -1){ var objectDOM = $(measurementScaleXML)[0]; var domainName = $(objectDOM).children()[0].localName; var options = {parse: true}; } //If it's not an XML string, then it must be the domainName itself else if(measurementScaleXML && measurementScaleXML.indexOf("<") == -1){ var domainName = measurementScaleXML; var options = {}; measurementScaleXML = null; } // Return the appropriate sub class of EMLMeasurementScale switch ( domainName ) { case "nominal": instance = new EMLNonNumericDomain({ "measurementScale": domainName, "objectDOM": $(measurementScaleXML)[0] }, options); break; case "ordinal": instance = new EMLNonNumericDomain({ "measurementScale": domainName, "objectDOM": $(measurementScaleXML)[0] }, options); break; case "interval": instance = new EMLNumericDomain({ "measurementScale": domainName, "objectDOM": $(measurementScaleXML)[0] }, options); break; case "ratio": instance = new EMLNumericDomain({ "measurementScale": domainName, "objectDOM": $(measurementScaleXML)[0] }, options); break; case "datetime": instance = new EMLDateTimeDomain({ "measurementScale": domainName, "objectDOM": $(measurementScaleXML)[0] }, options); break; default: instance = new EMLNonNumericDomain({ "measurementScale": domainName, "objectDOM": $(measurementScaleXML)[0] }, options); } return instance; } }); return EMLMeasurementScale; } );