diff --git a/src/api/controllers/collect.ts b/src/api/controllers/collect.ts index d2dad1506d6dd24656b67bd2dba5ad17b6818533..2dc3426465dedad7fdba9e84b9ea1204c88c497b 100644 --- a/src/api/controllers/collect.ts +++ b/src/api/controllers/collect.ts @@ -22,6 +22,7 @@ import * as express from "express"; import { Request } from "../types"; import { Source, Field } from "../../core/source"; import { EnumType } from "../../core/enumType"; +import { EnumHandler } from "../../util/enumHandler"; import { DataType } from "../../common/types"; /** @@ -133,10 +134,10 @@ export class CollectCtrl { for (let i = 0; i < fields.length; i++){ if (fields[i].dataType !== DataType.NONE){ - if (!validador[EnumType.stringfyDataType(fields[i].dataType)](data[i]) === true){ + if (!validador[EnumHandler.stringfyDataType(fields[i].dataType)](data[i]) === true){ throw new Error( "The value '" + data[i] + "' from '" + fields[i].name + - "' isn't a type " + [EnumType.stringfyDataType(fields[i].dataType)]); + "' isn't a type " + [EnumHandler.stringfyDataType(fields[i].dataType)]); } } diff --git a/src/core/dimension.ts b/src/core/dimension.ts index 202d5b62522dbffcb2df9de165a8b659ee6f3bf2..f8f8c6e16c1b490db97313920b3643b2982c92a3 100644 --- a/src/core/dimension.ts +++ b/src/core/dimension.ts @@ -19,7 +19,7 @@ */ import { RelationType, DataType } from "../common/types"; -import { EnumType } from "./enumType"; +import { EnumHandler } from "../util/enumHandler"; /** Parameters used to create a Dimension object. */ export interface DimensionOptions { @@ -96,14 +96,14 @@ export class Dimension { if (this.relation === RelationType.NONE) { return { name: this.name, - dataType: (this.dataType !== DataType.NONE) ? EnumType.stringfyDataType(this.dataType) : this.enumType , + dataType: (this.dataType !== DataType.NONE) ? EnumHandler.stringfyDataType(this.dataType) : this.enumType , description: this.description }; } else { return { name: this.name, - dataType: (this.dataType !== DataType.NONE) ? EnumType.stringfyDataType(this.dataType) : this.enumType , + dataType: (this.dataType !== DataType.NONE) ? EnumHandler.stringfyDataType(this.dataType) : this.enumType , parent: this.parent.name, relation: Dimension.stringifyRelationType(this.relation), description: this.description diff --git a/src/core/enumType.ts b/src/core/enumType.ts index e65d78c77ffc9295c8bf07f98507e79f3261e7d4..76eba3341aabfe7416dd28d884bf21f25641298d 100644 --- a/src/core/enumType.ts +++ b/src/core/enumType.ts @@ -18,8 +18,6 @@ * along with blend. If not, see <http://www.gnu.org/licenses/>. */ -import { DataType } from "../common/types"; - /** Parameters used to create a Enumerable type object. */ export interface EnumTypeOptions { /** The type name. */ @@ -56,47 +54,4 @@ export class EnumType { values: this.values }; } - - /** - * Parse an enum(Data type) to string. - * @param a - Data type to be stringified. - */ - public static stringfyDataType(a: DataType): string { - switch (a) { - case DataType.INTEGER: - return "integer"; - case DataType.FLOAT: - return "float"; - case DataType.STRING: - return "string"; - case DataType.DATE: - return "date"; - case DataType.BOOLEAN: - return "boolean"; - default: - return ""; - } - } - - /** - * Parse a string to enum(Data Type). - * @param str - Data type in string format. - */ - public static parseDataType (str: string): DataType { - str = str.toLocaleLowerCase(); - switch (str) { - case "integer": - return DataType.INTEGER; - case "float": - return DataType.FLOAT; - case "string": - return DataType.STRING; - case "date": - return DataType.DATE; - case "boolean": - return DataType.BOOLEAN; - default: - return DataType.NONE; - } - } } diff --git a/src/core/metric.ts b/src/core/metric.ts index 75ad55d05e0e6b0d106cca42d4542bf85217d378..1c25988c39c08d54cc3d04336f09b8b4b391b4a7 100644 --- a/src/core/metric.ts +++ b/src/core/metric.ts @@ -19,7 +19,7 @@ */ import { AggregationType, DataType } from "../common/types"; -import { EnumType } from "./enumType"; +import { EnumHandler } from "../util/enumHandler"; /** Parameters used to create a metric object. */ export interface MetricOptions { @@ -84,7 +84,7 @@ export class Metric { return { name: this.name, aggregation: Metric.stringifyAggrType(this.aggregation), - dataType: EnumType.stringfyDataType(this.dataType), + dataType: EnumHandler.stringfyDataType(this.dataType), description: this.description }; } diff --git a/src/core/source.ts b/src/core/source.ts index 7a04687fd169aff80a284e6bb84ea5fa2575962b..ecc84ef27acdf8cffb7e18250fd71a8ddc71c372 100644 --- a/src/core/source.ts +++ b/src/core/source.ts @@ -18,8 +18,8 @@ * along with blendb. If not, see <http://www.gnu.org/licenses/>. */ -import { EnumType } from "./enumType"; import { DataType } from "../common/types"; +import { EnumHandler } from "../util/enumHandler"; /** Attribute of a source. */ export interface Field { @@ -121,7 +121,7 @@ export class Source { return { name : i.name, description: i.description, - dataType: (i.dataType !== DataType.NONE) ? EnumType.stringfyDataType(i.dataType) : i.enumType + dataType: (i.dataType !== DataType.NONE) ? EnumHandler.stringfyDataType(i.dataType) : i.enumType }; }); return str; @@ -137,8 +137,8 @@ export class Source { return { name : i.name, description: i.description, - dataType: EnumType.parseDataType(i.dataType), - enumType: (EnumType.parseDataType(i.dataType) === DataType.NONE) ? i.dataType : "" + dataType: EnumHandler.parseDataType(i.dataType), + enumType: (EnumHandler.parseDataType(i.dataType) === DataType.NONE) ? i.dataType : "" }; }); return str; diff --git a/src/util/configParser.spec.ts b/src/util/configParser.spec.ts index 8c41cd0071b7f065cdae1d22b9ae1a2ecfc0178f..a157a7390528ba49fa8f528593c1d6a13da6463c 100644 --- a/src/util/configParser.spec.ts +++ b/src/util/configParser.spec.ts @@ -24,6 +24,7 @@ import { ConfigParser, ViewParsingOptions } from "./configParser"; import { Dimension, DimensionStrOptions } from "../core/dimension"; import { RelationType , DataType} from "../common/types"; import { EnumType } from "../core/enumType"; +import { EnumHandler } from "../util/enumHandler"; import { MetricStrOptions } from "../core/metric"; import { SourceStrOptions } from "../core/source"; @@ -198,7 +199,7 @@ describe("configParser utility library", () => { for (let i = 0; i < opts.length; ++i) { let parsed = ConfigParser.parseDimOpts(opts[i], dims, null); expect(parsed.name).to.be.equal(opts[i].name); - expect(EnumType.stringfyDataType(parsed.dataType)).to.be.equal(opts[i].dataType); + expect(EnumHandler.stringfyDataType(parsed.dataType)).to.be.equal(opts[i].dataType); expect(parsed.parent).to.be.equal(dims[1]); expect(parsed.relation).to.be.equal(strToRelationType(opts[i].relation)); } diff --git a/src/util/configParser.ts b/src/util/configParser.ts index 8dbf87f669a53d7062fb2ebabf75ed3c47041354..0866415faadf7c5cc76252b31ad0597279c12ab8 100644 --- a/src/util/configParser.ts +++ b/src/util/configParser.ts @@ -22,6 +22,7 @@ import { Metric, MetricOptions, MetricStrOptions } from "../core/metric"; import { Dimension, DimensionOptions, DimensionStrOptions } from "../core/dimension"; import { View, ViewOptions, LoadView } from "../core/view"; import { EnumType, EnumTypeOptions } from "../core/enumType"; +import { EnumHandler } from "../util/enumHandler"; import { RelationType, DataType } from "../common/types"; import { Opcode } from "../common/expression"; import { Filter } from "../core/filter"; @@ -319,7 +320,7 @@ export class ConfigParser { * @param map - Enumerable types available. */ public static parseDimOpts (opts: DimensionStrOptions, dims: Dimension[], map: EnumTypeMap): DimensionOptions { - let type = EnumType.parseDataType(opts.dataType); + let type = EnumHandler.parseDataType(opts.dataType); if (type === DataType.NONE) { if (!(map[opts.dataType])) { throw new Error("[Parsing error] DataType: '" + opts.dataType + "' does not exist on Dimension"); @@ -330,11 +331,11 @@ export class ConfigParser { if (dims[i].name === opts.parent) { return { name: opts.name, - dataType: EnumType.parseDataType(opts.dataType), + dataType: EnumHandler.parseDataType(opts.dataType), description: opts.description, parent: dims[i], relation: Dimension.parseRelationType(opts.relation), - enumType: (EnumType.parseDataType(opts.dataType) === DataType.NONE) ? opts.dataType : "" + enumType: (EnumHandler.parseDataType(opts.dataType) === DataType.NONE) ? opts.dataType : "" }; } } @@ -343,11 +344,11 @@ export class ConfigParser { } return { name: opts.name, - dataType: EnumType.parseDataType(opts.dataType), + dataType: EnumHandler.parseDataType(opts.dataType), description: opts.description, parent: null, relation: RelationType.NONE, - enumType: (EnumType.parseDataType(opts.dataType) === DataType.NONE) ? opts.dataType : "" + enumType: (EnumHandler.parseDataType(opts.dataType) === DataType.NONE) ? opts.dataType : "" }; } @@ -356,7 +357,7 @@ export class ConfigParser { * @param opts - Metric struct in configuration file. */ public static parseMetOpts (opts: MetricStrOptions): MetricOptions { - let type = EnumType.parseDataType(opts.dataType); + let type = EnumHandler.parseDataType(opts.dataType); if (!(type === DataType.FLOAT || type === DataType.INTEGER)){ throw new Error("[Parsing error] DataType: '" + opts.dataType + "' does not exist on Metric"); @@ -365,7 +366,7 @@ export class ConfigParser { return { name: opts.name, aggregation: Metric.parseAggrType(opts.aggregation), - dataType : EnumType.parseDataType(opts.dataType), + dataType : EnumHandler.parseDataType(opts.dataType), description: opts.description }; } @@ -398,7 +399,7 @@ export class ConfigParser { */ public static parseSourceOpts (opts: SourceStrOptions , map: EnumTypeMap): SourceOptions { for ( let k = 0; k < opts.fields.length ; k++) { - let type = EnumType.parseDataType(opts.fields[k].dataType); + let type = EnumHandler.parseDataType(opts.fields[k].dataType); if (type === DataType.NONE) { if (!(map[opts.fields[k].dataType])){ diff --git a/src/util/enumHandler.ts b/src/util/enumHandler.ts new file mode 100644 index 0000000000000000000000000000000000000000..34cda2313c482618f9a795c4935021aeaebe15cd --- /dev/null +++ b/src/util/enumHandler.ts @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2018 Centro de Computacao Cientifica e Software Livre + * Departamento de Informatica - Universidade Federal do Parana + * + * This file is part of blendb. + * + * blendb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * blendb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with blendb. If not, see <http://www.gnu.org/licenses/>. + */ + +import { DataType } from "../common/types"; +/** + * Enum's handler. Manage changes between + * string and enumtype. + */ +export class EnumHandler { + /** + * Parse an enum(Data type) to string. + * @param a - Data type to be stringified. + */ + public static stringfyDataType(a: DataType): string { + switch (a) { + case DataType.INTEGER: + return "integer"; + case DataType.FLOAT: + return "float"; + case DataType.STRING: + return "string"; + case DataType.DATE: + return "date"; + case DataType.BOOLEAN: + return "boolean"; + default: + return ""; + } + } + + /** + * Parse a string to enum(Data Type). + * @param str - Data type in string format. + */ + public static parseDataType (str: string): DataType { + str = str.toLocaleLowerCase(); + switch (str) { + case "integer": + return DataType.INTEGER; + case "float": + return DataType.FLOAT; + case "string": + return DataType.STRING; + case "date": + return DataType.DATE; + case "boolean": + return DataType.BOOLEAN; + default: + return DataType.NONE; + } + } +}