blob: a39cbd3f2ba0bd4deff5bae0ae7288fe3dec9a8e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2016 Orange.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.om2m.sdt.types;
import java.net.URI;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class BasicType {
static private final String PREFIX = "xs:";
static private final String S_INTEGER = PREFIX + "integer";
static private final String S_BOOLEAN = PREFIX + "boolean";
static private final String S_STRING = PREFIX + "string";
static private final String S_BYTE = PREFIX + "byte";
static private final String S_FLOAT = PREFIX + "float";
static private final String S_ENUM = PREFIX + "enum";
static private final String S_DATE = PREFIX + "date";
static private final String S_TIME = PREFIX + "time";
static private final String S_DATETIME = PREFIX + "datetime";
static private final String S_BLOB = PREFIX + "blob";
static private final String S_URI = PREFIX + "uri";
static final private DateFormat dateTimeFormat = DateFormat.getDateTimeInstance();
static final private DateFormat dateFormat = DateFormat.getDateInstance();
static final private DateFormat timeFormat = DateFormat.getTimeInstance();
static private Map<String, BasicType> values = new HashMap<String, BasicType>();
static public final BasicType INTEGER = new BasicType(S_INTEGER, Integer.class);
static public final BasicType BOOLEAN = new BasicType(S_BOOLEAN, Boolean.class);
static public final BasicType STRING = new BasicType(S_STRING, String.class);
static public final BasicType BYTE = new BasicType(S_BYTE, Byte.class);
static public final BasicType FLOAT = new BasicType(S_FLOAT, Float.class);
static public final BasicType ENUM = new BasicType(S_ENUM, Enum.class);
static public final BasicType DATE = new BasicType(S_DATE, Date.class);
static public final BasicType TIME = new BasicType(S_TIME, Date.class);
static public final BasicType DATETIME = new BasicType(S_DATETIME, Date.class);
static public final BasicType BLOB = new BasicType(S_BLOB, byte[].class);
static public final BasicType URI = new BasicType(S_URI, URI.class);
private final String value;
private final Class<?> clazz;
protected BasicType(String v, Class<?> c) {
value = v;
clazz = c;
values.put(v, this);
}
public String getValue() {
return value;
}
public Class<?> getClazz() {
return clazz;
}
static public BasicType getBasicType(final String s) {
return values.get(s);
}
public String toString(Object val) {
if (val == null) {
return null;
}
switch (value) {
case S_STRING:
case S_ENUM:
case S_INTEGER:
case S_FLOAT:
case S_BOOLEAN:
case S_BYTE:
case S_URI:
return val.toString();
case S_DATETIME: return dateTimeFormat.format((Date)val);
case S_TIME: return timeFormat.format((Date)val);
case S_DATE: return dateFormat.format((Date)val);
case S_BLOB: return val.toString(); // TODO serialize byte array
}
return null;
}
public Object fromString(String val) throws Exception {
switch (value) {
case S_STRING: return val;
case S_ENUM:
case S_INTEGER:
return Integer.parseInt(val);
case S_FLOAT: return Float.parseFloat(val);
case S_BOOLEAN: return Boolean.parseBoolean(val);
case S_DATETIME: return dateTimeFormat.parse(val);
case S_TIME: return timeFormat.parse(val);
case S_DATE: return dateFormat.parse(val);
case S_BYTE: return Byte.parseByte(val);
case S_BLOB: return val; // TODO serialize byte array
case S_URI: return new URI(value);
}
return null;
}
@Override
public String toString() {
return clazz.getSimpleName().toLowerCase();
}
}