(function(window)
{
var Gitana = window.Gitana;
Gitana.Warehouse = Gitana.AbstractPlatformDataStore.extend(
/** @lends Gitana.Warehouse.prototype */
{
/**
* @constructs
* @augments Gitana.AbstractPlatformObject
*
* @class Warehouse
*
* @param {Gitana.Platform} platform
* @param [Object] object json object (if no callback required for populating)
*/
constructor: function(platform, object)
{
this.objectType = function() { return "Gitana.Warehouse"; };
this.base(platform, object);
},
/**
* @OVERRIDE
*/
getUri: function()
{
return "/warehouses/" + this.getId();
},
/**
* @OVERRIDE
*/
getType: function()
{
return Gitana.TypedIDConstants.TYPE_WAREHOUSE;
},
/**
* @override
*/
clone: function()
{
return this.getFactory().warehouse(this.getPlatform(), this);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTIONS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interactions.
*
* @param pagination
*
* @chained interaction map
*/
listInteractions: function(pagination)
{
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().interactionMap(this);
return this.chainGet(chainable, this.getUri() + "/interactions", params);
},
/**
* Reads an interaction.
*
* @param interactionId
*
* @chained interaction
*/
readInteraction: function(interactionId)
{
var chainable = this.getFactory().interaction(this);
return this.chainGet(chainable, this.getUri() + "/interactions/" + interactionId);
},
/**
* Queries for interactions.
*
* @chained interaction map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractions: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/interactions/query";
};
var chainable = this.getFactory().interactionMap(this);
return this.chainPost(chainable, uriFunction, params, query);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION APPLICATIONS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction applications.
*
* @param pagination
*
* @chained interaction application map
*/
listInteractionApplications: function(pagination)
{
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().interactionApplicationMap(this);
return this.chainGet(chainable, this.getUri() + "/applications", params);
},
/**
* Reads an interaction application.
*
* @param interactionApplicationId
*
* @chained interaction application
*/
readInteractionApplication: function(interactionApplicationId)
{
var chainable = this.getFactory().interactionApplication(this);
return this.chainGet(chainable, this.getUri() + "/applications/" + interactionApplicationId);
},
/**
* Queries for interaction applications.
*
* @chained interaction application map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionApplications: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/applications/query";
};
var chainable = this.getFactory().interactionApplicationMap(this);
return this.chainPost(chainable, uriFunction, params, query);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION SESSIONS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction sessions.
*
* @param pagination
*
* @chained interaction session map
*/
listInteractionSessions: function(pagination)
{
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().interactionSessionMap(this);
return this.chainGet(chainable, this.getUri() + "/sessions", params);
},
/**
* Reads an interaction session.
*
* @param interactionSessionId
*
* @chained interaction session
*/
readInteractionSession: function(interactionSessionId)
{
var chainable = this.getFactory().interactionSession(this);
return this.chainGet(chainable, this.getUri() + "/sessions/" + interactionSessionId);
},
/**
* Queries for interaction sessions.
*
* @chained interaction session map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionSessions: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/sessions/query";
};
var chainable = this.getFactory().interactionSessionMap(this);
return this.chainPost(chainable, uriFunction, params, query);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION PAGES
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction pages.
*
* @param pagination
*
* @chained interaction page map
*/
listInteractionPages: function(pagination)
{
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().interactionPageMap(this);
return this.chainGet(chainable, this.getUri() + "/pages", params);
},
/**
* Reads an interaction page.
*
* @param interactionPageId
*
* @chained interaction page
*/
readInteractionPage: function(interactionPageId)
{
var chainable = this.getFactory().interactionPage(this);
return this.chainGet(chainable, this.getUri() + "/pages/" + interactionPageId);
},
/**
* Queries for interaction pages.
*
* @chained interaction page map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionPages: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/pages/query";
};
var chainable = this.getFactory().interactionPageMap(this);
return this.chainPost(chainable, uriFunction, params, query);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION NODES
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction nodes.
*
* @param pagination
*
* @chained interaction node map
*/
listInteractionNodes: function(pagination)
{
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().interactionNodeMap(this);
return this.chainGet(chainable, this.getUri() + "/nodes", params);
},
/**
* Reads an interaction node.
*
* @param interactionNodeId
*
* @chained interaction node
*/
readInteractionNode: function(interactionNodeId)
{
var chainable = this.getFactory().interactionNode(this);
return this.chainGet(chainable, this.getUri() + "/nodes/" + interactionNodeId);
},
/**
* Queries for interaction nodes.
*
* @chained interaction node map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionNodes: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/nodes/query";
};
var chainable = this.getFactory().interactionNodeMap(this);
return this.chainPost(chainable, uriFunction, params, query);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION USERS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction users.
*
* @param pagination
*
* @chained interaction user map
*/
listInteractionUsers: function(pagination)
{
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().interactionUserMap(this);
return this.chainGet(chainable, this.getUri() + "/users", params);
},
/**
* Reads an interaction user.
*
* @param interactionUserId
*
* @chained interaction user
*/
readInteractionUser: function(interactionUserId)
{
var chainable = this.getFactory().interactionUser(this);
return this.chainGet(chainable, this.getUri() + "/users/" + interactionUserId);
},
/**
* Queries for interaction users.
*
* @chained interaction user map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionUsers: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/users/query";
};
var chainable = this.getFactory().interactionUserMap(this);
return this.chainPost(chainable, uriFunction, params, query);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION CONTINENTS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction continents.
*
* @param pagination
*
* @chained interaction continent map
*/
listInteractionContinents: Gitana.Methods.listInteractionObjects("interactionContinentMap", "continents"),
/**
* Reads an interaction continent.
*
* @param interactionContinentId
*
* @chained interaction continent
*/
readInteractionContinent: Gitana.Methods.readInteractionObject("interactionContinent", "continents"),
/**
* Queries for interaction continents.
*
* @chained interaction continent map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionContinents: Gitana.Methods.queryInteractionObjects("interactionContinentMap", "continents"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION COUNTRIES
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction countries.
*
* @param pagination
*
* @chained interaction country map
*/
listInteractionCountries: Gitana.Methods.listInteractionObjects("interactionCountryMap", "countries"),
/**
* Reads an interaction country.
*
* @param interactionCountryId
*
* @chained interaction country
*/
readInteractionCountry: Gitana.Methods.readInteractionObject("interactionCountry", "countries"),
/**
* Queries for interaction countries.
*
* @chained interaction country map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionCountries: Gitana.Methods.queryInteractionObjects("interactionCountryMap", "countries"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION CITIES
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction cities.
*
* @param pagination
*
* @chained interaction city map
*/
listInteractionCities: Gitana.Methods.listInteractionObjects("interactionCityMap", "cities"),
/**
* Reads an interaction city.
*
* @param interactionCityId
*
* @chained interaction city
*/
readInteractionCity: Gitana.Methods.readInteractionObject("interactionCity", "cities"),
/**
* Queries for interaction cities.
*
* @chained interaction city map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionCities: Gitana.Methods.queryInteractionObjects("interactionCityMap", "cities"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION REGIONS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction regions.
*
* @param pagination
*
* @chained interaction region map
*/
listInteractionRegions: Gitana.Methods.listInteractionObjects("interactionRegionMap", "regions"),
/**
* Reads an interaction region.
*
* @param interactionRegionId
*
* @chained interaction region
*/
readInteractionRegion: Gitana.Methods.readInteractionObject("interactionRegion", "regions"),
/**
* Queries for interaction regions.
*
* @chained interaction region map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionRegions: Gitana.Methods.queryInteractionObjects("interactionRegionMap", "regions"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION POSTAL CODES
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction postal codes.
*
* @param pagination
*
* @chained interaction postal code map
*/
listInteractionPostalCodes: Gitana.Methods.listInteractionObjects("interactionPostalCodeMap", "postalcodes"),
/**
* Reads an interaction postal code.
*
* @param interactionPostalCodeId
*
* @chained interaction postal code
*/
readInteractionPostalCode: Gitana.Methods.readInteractionObject("interactionPostalCode", "postalcodes"),
/**
* Queries for interaction postal codes.
*
* @chained interaction postal code map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionPostalCodes: Gitana.Methods.queryInteractionObjects("interactionPostalCodeMap", "postalcodes"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION USER AGENTS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction user agents.
*
* @param pagination
*
* @chained interaction user agent map
*/
listInteractionUserAgents: Gitana.Methods.listInteractionObjects("interactionUserAgentMap", "useragents"),
/**
* Reads an interaction user agent.
*
* @param interactionUserAgentId
*
* @chained interaction user agent
*/
readInteractionUserAgent: Gitana.Methods.readInteractionObject("interactionUserAgent", "useragents"),
/**
* Queries for interaction user agents
*
* @chained interaction user agent map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionUserAgents: Gitana.Methods.queryInteractionObjects("interactionUserAgentMap", "useragents"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION OPERATING SYSTEMS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction operating systems.
*
* @param pagination
*
* @chained interaction operating system map
*/
listInteractionOperatingSystems: Gitana.Methods.listInteractionObjects("interactionOperatingSystemMap", "operatingsystems"),
/**
* Reads an interaction operating system.
*
* @param interactionOperatingSystemId
*
* @chained interaction operating system
*/
readInteractionOperatingSystems: Gitana.Methods.readInteractionObject("interactionOperatingSystem", "operatingsystems"),
/**
* Queries for interaction operating systems.
*
* @chained interaction operating system map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionOperatingSystems: Gitana.Methods.queryInteractionObjects("interactionOperatingSystemMap", "operatingsystems"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION DEVICES
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction devices.
*
* @param pagination
*
* @chained interaction device map
*/
listInteractionDevices: Gitana.Methods.listInteractionObjects("interactionDeviceMap", "devices"),
/**
* Reads an interaction device.
*
* @param interactionDeviceId
*
* @chained interaction device
*/
readInteractionDevice: Gitana.Methods.readInteractionObject("interactionDevice", "devices"),
/**
* Queries for interaction devices.
*
* @chained interaction device map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryInteractionDevices: Gitana.Methods.queryInteractionObjects("interactionDeviceMap", "devices"),
//////////////////////////////////////////////////////////////////////////////////////////
//
// INTERACTION REPORTS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the interaction reports.
*
* @param pagination (optional)
*
* @chained interaction report map
*/
listInteractionReports: function(pagination)
{
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().interactionReportMap(this);
return this.chainGet(chainable, this.getUri() + "/reports", params);
},
/**
* Reads an interaction report.
*
* @param interactionReportId
*
* @chained interaction report
*/
readInteractionReport: function(interactionReportId)
{
var chainable = this.getFactory().interactionReport(this);
return this.chainGet(chainable, this.getUri() + "/reports/" + interactionReportId);
},
/**
* Queries for interaction reports.
*
* @param query
* @param pagination (optional)
*
* @chained interaction report map
*/
queryInteractionReports: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/reports/query";
};
var chainable = this.getFactory().interactionReportMap(this);
return this.chainPost(chainable, uriFunction, params, query);
},
/**
* Loads information about the warehouse.
*
* @param callback
*/
loadInfo: function(callback)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/info";
};
return this.chainGetResponse(this, uriFunction, {}).then(function(response) {
callback(response);
});
},
/**
* Resets the warehouse. This requires ADMIN, MANAGER or OWNER authorities against the warehouse.
*
* @returns {*}
*/
reset: function()
{
var self = this;
return this.then(function() {
var chain = this;
// call
var uri = self.getUri() + "/reset";
self.getDriver().gitanaPost(uri, null, {}, function(response) {
chain.next();
});
// NOTE: we return false to tell the chain that we'll manually call next()
return false;
});
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// CONVERSION TRIGGERS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the conversion triggers.
*
* @param pagination
*
* @chained conversion trigger map
*/
listConversionTriggers: function(pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/triggers/";
};
var chainable = this.getFactory().conversionTriggerMap(this);
return this.chainGet(chainable, uriFunction, params);
},
/**
* Reads a conversion trigger.
*
* @param triggerId
*
* @chained conversion trigger
*/
readConversionTrigger: function(triggerId)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/triggers/" + triggerId;
};
var chainable = this.getFactory().conversionTrigger(this);
return this.chainGet(chainable, uriFunction);
},
/**
* Create a conversion trigger
*
* @chained conversion trigger
*
* @param {Object} object JSON object (requires "key" and "type")
*/
createConversionTrigger: function(object)
{
var self = this;
if (!object)
{
object = {};
}
var uriFunction = function()
{
return self.getUri() + "/triggers";
};
var chainable = this.getFactory().conversionTrigger(this);
return this.chainCreate(chainable, object, uriFunction);
},
/**
* Queries for conversion triggers.
*
* @chained conversion trigger map
*
* @param {Object} query
* @param [Object] pagination pagination (optional)
*/
queryConversionTriggers: function(query, pagination)
{
var self = this;
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var uriFunction = function()
{
return self.getUri() + "/triggers/query";
};
var chainable = this.getFactory().conversionTriggerMap(this);
return this.chainPost(chainable, uriFunction, params, query);
}
});
})(window);