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
* @extends Backbone.Model
*/
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;
});