net_nodeMetadataUrlHelperMixin.js
import Pagination from "../domain/pagination.js";
import SortDescriptor from "../domain/sortDescriptor.js";
import UrlHelper from "./urlHelper.js";
import NodeUrlHelperMixin from "./nodeUrlHelperMixin.js";
import UserUrlHelperMixin from "./userUrlHelperMixin.js";
/**
* Create a NodeMetadataUrlHelperMixin class.
*
* @param {module:net~UrlHelper} superclass the UrlHelper class to mix onto
* @return {module:net~NodeMetadataUrlHelperMixin} the mixin class
*/
const NodeMetadataUrlHelperMixin = (superclass) =>
/**
* A mixin class that adds SolarNode metadata support to {@link module:net~UrlHelper}.
*
* @mixin
* @alias module:net~NodeMetadataUrlHelperMixin
*/
class extends superclass {
/**
* Generate a URL for viewing the configured node's metadata.
*
* @param {number} [nodeId] a specific node ID to use; if not provided the `nodeId` property of this class will be used
* @returns {string} the URL
*/
viewNodeMetadataUrl(nodeId) {
return this.baseUrl() + "/nodes/meta/" + (nodeId || this.nodeId);
}
/**
* Generate a URL for adding metadata to a node via a `POST` request.
*
* @param {number} [nodeId] a specific node ID to use; if not provided the `nodeId` property of this class will be used
* @returns {string} the URL
*/
addNodeMetadataUrl(nodeId) {
return this.viewNodeMetadataUrl(nodeId);
}
/**
* Generate a URL for setting the metadata of a node via a `PUT` request.
*
* @param {number} [nodeId] a specific node ID to use; if not provided the `nodeId` property of this class will be used
* @returns {string} the URL
*/
replaceNodeMetadataUrl(nodeId) {
return this.viewNodeMetadataUrl(nodeId);
}
/**
* Generate a URL for deleting the metadata of a node via a `DELETE` request.
*
* @param {number} [nodeId] a specific node ID to use; if not provided the `nodeId` property of this class will be used
* @returns {string} the URL
*/
deleteNodeMetadataUrl(nodeId) {
return this.viewNodeMetadataUrl(nodeId);
}
/**
* Generate a URL for searching for node metadata.
*
* @param {number|number[]} [nodeId] a specific node ID, or array of node IDs, to use; if not provided the
* `nodeIds` property of this class will be used, unless `null`
* is passed in which case no node IDs will be added to the URL so that all available
* node metadata objects will be returned
* @param {module:domain~SortDescriptor[]} [sorts] optional sort settings to use
* @param {module:domain~Pagination} [pagination] optional pagination settings to use
* @returns {string} the URL
*/
findNodeMetadataUrl(nodeId, sorts, pagination) {
const nodeIds = Array.isArray(nodeId)
? nodeId
: nodeId
? [nodeId]
: nodeId !== null
? this.nodeIds
: undefined;
let result = this.baseUrl() + "/nodes/meta";
let params = "";
if (Array.isArray(nodeIds)) {
params += "nodeIds=" + nodeIds.join(",");
}
if (Array.isArray(sorts)) {
sorts.forEach((sort, i) => {
if (sort instanceof SortDescriptor) {
if (params.length > 0) {
params += "&";
}
params += sort.toUriEncoding(i);
}
});
}
if (pagination instanceof Pagination) {
if (params.length > 0) {
params += "&";
}
params += pagination.toUriEncoding();
}
if (params.length > 0) {
result += "?" + params;
}
return result;
}
};
/**
* A concrete {@link module:net~UrlHelper} with the {@link module:net~NodeMetadataUrlHelperMixin},
* {@link module:net~UserUrlHelperMixin}, and {@link module:net~NodeUrlHelperMixin} mixins.
*
* @mixes module:net~NodeMetadataUrlHelperMixin
* @mixes module:net~UserUrlHelperMixin
* @mixes module:net~NodeUrlHelperMixin
* @extends module:net~UrlHelper
* @alias module:net~NodeMetadataUrlHelper
*/
class NodeMetadataUrlHelper extends NodeMetadataUrlHelperMixin(
UserUrlHelperMixin(NodeUrlHelperMixin(UrlHelper)),
) {}
export default NodeMetadataUrlHelperMixin;
export { NodeMetadataUrlHelper };