(function(window)
{
var Gitana = window.Gitana;
Gitana.BinaryAttachment = Gitana.AbstractPersistable.extend(
/** @lends Gitana.BinaryAttachment.prototype */
{
/**
* @constructs
* @augments Gitana.AbstractPersistable
*
* @class Binary Attachment
*
* @param {Object} persistable gitana object
* @param {Object} attachment
*/
constructor: function(persistable, attachment)
{
this.base(persistable.getDriver(), attachment);
this.objectType = function() { return "Gitana.BinaryAttachment"; };
this.persistable = function() {
return persistable;
};
},
getId: function()
{
return this.attachmentId;
},
getLength: function()
{
return this.length;
},
getContentType: function()
{
return this.contentType;
},
getFilename: function()
{
return this.filename;
},
getUri: function()
{
return this.persistable().getUri() + "/attachments/" + this.getId();
},
getDownloadUri: function()
{
return this.getDriver().baseURL + this.getUri();
},
getPreviewUri: function(name, config)
{
if (!config)
{
config = {};
}
config.attachment = this.attachmentId;
return this.persistable().getPreviewUri(name, config);
},
/**
* Deletes the attachment, hands back control to the persistable.
*
* @chained persistable
*/
del: function()
{
var self = this;
var result = this.subchain(this.persistable());
// our work (first in chain)
result.subchain(self).then(function() {
var chain = this;
// delete the attachment
this.getDriver().gitanaDelete(this.getUri(), null, function() {
chain.next();
}, function(http) {
self.httpError(http);
});
return false;
});
return result;
},
/**
* Downloads the attachment.
*
* @chained attachment
* @param callback
*/
download: function(callback)
{
var self = this;
return this.then(function() {
var chain = this;
// download
this.getDriver().gitanaDownload(this.getUri(), null, function(data) {
callback.call(self, data);
chain.next();
}, function(http) {
self.httpError(http);
});
return false;
});
}
});
})(window);