/**
* Global Sensor Networks (GSN) Source Code
* Copyright (c) 2006-2014, Ecole Polytechnique Federale de Lausanne (EPFL)
*
* This file is part of GSN.
*
* GSN 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.
*
* GSN 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 GSN. If not, see <http://www.gnu.org/licenses/>.
*
* File: gsn-tiny/src/tinygsn/beans/DataTypes.java
*
* @author Do Ngoc Hoan
*/
package tinygsn.beans;
import java.util.regex.Pattern;
import tinygsn.utils.GSNRuntimeException;
public class DataTypes {
public final static String OPTIONAL_NUMBER_PARAMETER = "\\s*(\\(\\s*\\d+\\s*\\))?";
public final static String REQUIRED_NUMBER_PARAMETER = "\\s*\\(\\s*\\d+\\s*\\)";
// NEXT FIELD
public final static String VAR_CHAR_PATTERN_STRING = "\\s*varchar" + REQUIRED_NUMBER_PARAMETER + "\\s*";
public final static byte VARCHAR = 0;
public final static String VARCHAR_NAME = "Varchar(256)";
// NEXT FIELD
public final static String CHAR_PATTERN_STRING = "\\s*char" + REQUIRED_NUMBER_PARAMETER + "\\s*";
public final static byte CHAR = 1;
public final static String CHAR_NAME = "Char(256)";
// NEXT FIELD
public final static String INTEGER_PATTERN_STRING = "\\s*((INTEGER)|(INT))\\s*";
public final static byte INTEGER = 2;
public final static String INTEGER_NAME = "Integer";
// NEXT FIELD
public final static String BIGINT_PATTERN_STRING = "\\s*BIGINT\\s*";
public final static byte BIGINT = 3;
public final static String BIGINT_NAME = "BigInt";
// NEXT FIELD
public final static String BINARY_PATTERN_STRING = "\\s*(BINARY|BLOB)" + OPTIONAL_NUMBER_PARAMETER + "(\\s*:.*)?";
public final static byte BINARY = 4;
public final static String BINARY_NAME = "Binary";
// NEXT FIELD
public final static String DOUBLE_PATTERN_STRING = "\\s*DOUBLE\\s*";
public final static byte DOUBLE = 5;
public final static String DOUBLE_NAME = "Double";
// NEXT FIELD
/**
* Type Time is not supported at the moment. If you want to present time,
* please use longint. For more information consult the GSN mailing list on
* the same subject.
*/
public final static String TIME_PATTERN_STRING = "\\s*TIME\\s*";
public final static byte TIME = 6;
public final static String TIME_NAME = "Time";
// NEXT FIELD
public final static String TINYINT_PATTERN_STRING = "\\s*TINYINT\\s*";
public final static byte TINYINT = 7;
public final static String TINYINT_NAME = "TinyInt";
// NEXT FIELD
public final static String SMALLINT_PATTERN_STRING = "\\s*SMALLINT\\s*";
public final static byte SMALLINT = 8;
public final static String SMALLINT_NAME = "SmallInt";
// NEXT FIELD
public final static String FLOAT_PATTERN_STRING = "\\s*FLOAT\\s*";
public final static byte FLOAT = 9;
public final static String FLOAT_NAME = "Float";
// FINISH
public final static Pattern[] ALL_PATTERNS = new Pattern[] {
Pattern.compile(VAR_CHAR_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(CHAR_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(INTEGER_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(BIGINT_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(BINARY_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(DOUBLE_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(TIME_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(TINYINT_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(SMALLINT_PATTERN_STRING, Pattern.CASE_INSENSITIVE),
Pattern.compile(FLOAT_PATTERN_STRING, Pattern.CASE_INSENSITIVE) };
public final static StringBuilder ERROR_MESSAGE = new StringBuilder(
"Acceptable types are (TINYINT,SMALLINT,INTEGER,BIGINT,CHAR(#),BINARY[(#)],VARCHAR(#),DOUBLE,TIME,FLOAT).");
public final static String[] TYPE_NAMES = new String[] { VARCHAR_NAME,
CHAR_NAME, INTEGER_NAME, BIGINT_NAME, BINARY_NAME, DOUBLE_NAME,
TIME_NAME, TINYINT_NAME, SMALLINT_NAME, FLOAT_NAME };
public static byte convertTypeNameToGSNTypeID(final String type) {
if (type == null)
throw new GSNRuntimeException(new StringBuilder(
"The type *null* is not recoginzed by GSN.").append(
DataTypes.ERROR_MESSAGE).toString());
if (type.trim().equalsIgnoreCase("string"))
return DataTypes.VARCHAR;
for (byte i = 0; i < DataTypes.ALL_PATTERNS.length; i++)
if (DataTypes.ALL_PATTERNS[i].matcher(type).matches()) {
return i;
}
if (type.trim().equalsIgnoreCase("numeric"))
return DataTypes.DOUBLE;
throw new GSNRuntimeException(new StringBuilder("The type *").append(type)
.append("* is not recognized.").append(DataTypes.ERROR_MESSAGE)
.toString());
}
}