/* global define */
"use strict";
define(['jquery', 'underscore', 'backbone', 'x2js', 'models/formats/ObjectFormat'],
function($, _, Backbone, X2JS, ObjectFormat) {
/**
* @class ObjectFormats
* @classdesc ObjectFormats represents the DataONE object format list
* found at https://cn.dataone.org/cn/v2/formats, or
* the Coordinating Node environment configured `AppModel.d1CNBaseUrl`
* This collection is intended to be used as a formats cache -
* retrieved once, and only refreshed later if an object format
* isn't present when needed.
* @classcategory Collections
* @extends Backbone.Collection
* @constructor
*/
var ObjectFormats = Backbone.Collection.extend(
/** @lends ObjectFormats.prototype */{
model: ObjectFormat,
/**
* The constructed URL of the collection
* (/cn/v2/formats)
* @returns {string} - The URL to use during fetch
*/
url: function() {
// no need for authentication token, just the URL
return MetacatUI.appModel.get("formatsServiceUrl");
},
/**
* Retrieve the formats from the Coordinating Node
* @extends Backbone.Collection#fetch
*/
fetch: function(options) {
var fetchOptions = _.extend({dataType: "text"}, options);
return Backbone.Model.prototype.fetch.call(this, fetchOptions);
},
/**
* Parse the XML response from the CN
*/
parse: function(response) {
// If the collection is already parsed, just return it
if ( typeof response === "object" ) return response;
// Otherwise, parse it
var x2js = new X2JS();
var formats = x2js.xml_str2json(response);
return formats.objectFormatList.objectFormat;
}
});
return ObjectFormats;
});