import { AbstractBuilder } from "./AbstractBuilder.js";
/**
* TimeDimension builder.
* @extends AbstractBuilder
* @memberof vef.map.filters.builders
*/
class TimeDimension extends AbstractBuilder {
/**
* Retrieves the filter parameters based on the harmonized filters.
* @param {Object} harmonizedFilters - The harmonized filters.
* @returns {Object} The filter parameters.
*/
static getFilterParams(harmonizedFilters) {
const params = {};
for (let key in harmonizedFilters) {
const filters = [];
for (let i = 0; i < harmonizedFilters[key].length; ++i) {
const values = harmonizedFilters[key][i];
switch (values[0]) {
case "bt":
filters.push(this.bt(values[1], values[2]));
break;
case "eq":
case "like":
filters.push(this.eq(values[1]));
break;
case "gt":
case "gteq":
filters.push(this.ge(values[1]));
break;
case "lt":
case "lteq":
filters.push(this.le(values[1]));
break;
case "null":
break;
}
}
const filter = this.or(filters).trim();
if (filter.length) params[key] = filter;
}
return params;
}
/**
* Builds a "between" filter string.
* @param {string} begin - The beginning value.
* @param {string} end - The ending value.
* @returns {string} The filter string.
*/
static bt(begin, end) {
return `${begin}/${end}`;
}
/**
* Builds an "equals" filter string.
* @param {string} value - The value to compare.
* @returns {string} The filter string.
*/
static eq(value) {
return value;
}
/**
* Builds a "greater than or equals" filter string.
* @param {string} value - The value to compare.
* @returns {string} The filter string.
*/
static ge(value) {
return `${value}/9999-12-31T23:59:59.999Z`;
}
/**
* Builds a "less than or equals" filter string.
* @param {string} value - The value to compare.
* @returns {string} The filter string.
*/
static le(value) {
return `0001-01-01T00:00:00.0Z/${value}`;
}
/**
* Builds an "or" filter string.
* @param {Array} filters - The filters to combine.
* @returns {string} The filter string.
*/
static or(filters) {
return filters.join(", ");
}
}
export { TimeDimension };