package org.etk.orm.plugins.bean.type;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class SimpleTypeProviders {
private SimpleTypeProviders() {
}
public final static class STRING extends SimpleTypeProvider.STRING<String> {
@Override
public String getInternal(String s) {
return s;
}
@Override
public String getExternal(String s) {
return s;
}
@Override
public String fromString(String s) {
return s;
}
@Override
public String toString(String s) throws TypeConversionException {
return s;
}
@Override
public Class<String> getExternalType() {
return String.class;
}
}
public final static class PATH extends SimpleTypeProvider.PATH<String> {
@Override
public String getInternal(String s) {
return s;
}
@Override
public String getExternal(String s) {
return s;
}
@Override
public String fromString(String s) {
return s;
}
@Override
public String toString(String s) throws TypeConversionException {
return s;
}
@Override
public Class<String> getExternalType() {
return String.class;
}
}
public static final class NAME extends SimpleTypeProvider.NAME<String> {
@Override
public String getInternal(String s) {
return s;
}
@Override
public String getExternal(String s) {
return s;
}
@Override
public String fromString(String s) {
return s;
}
@Override
public String toString(String s) throws TypeConversionException {
return s;
}
@Override
public Class<String> getExternalType() {
return String.class;
}
}
public static final class INTEGER extends SimpleTypeProvider.LONG<Integer> {
@Override
public Long getInternal(Integer external) {
return (long)external;
}
@Override
public Integer getExternal(Long internal) {
return (int)(long)internal;
}
@Override
public Integer fromString(String s) {
return Integer.parseInt(s);
}
@Override
public String toString(Integer integer) throws TypeConversionException {
return integer.toString();
}
@Override
public Class<Integer> getExternalType() {
return Integer.class;
}
}
public static final class LONG extends SimpleTypeProvider.LONG<Long> {
@Override
public Long getInternal(Long external) {
return external;
}
@Override
public Long getExternal(Long internal) {
return internal;
}
@Override
public Long fromString(String s) {
return Long.parseLong(s);
}
@Override
public String toString(Long aLong) throws TypeConversionException {
return aLong.toString();
}
@Override
public Class<Long> getExternalType() {
return Long.class;
}
}
public static final class DOUBLE extends SimpleTypeProvider.DOUBLE<Double> {
@Override
public Double getInternal(Double external) {
return external;
}
@Override
public Double getExternal(Double internal) {
return internal;
}
@Override
public Double fromString(String s) {
return Double.parseDouble(s);
}
@Override
public String toString(Double aDouble) throws TypeConversionException {
return aDouble.toString();
}
@Override
public Class<Double> getExternalType() {
return Double.class;
}
}
public static final class FLOAT extends SimpleTypeProvider.DOUBLE<Float> {
@Override
public Double getInternal(Float external) {
return (double)(float)external;
}
@Override
public Float getExternal(Double internal) {
return (float)(double)internal;
}
@Override
public Float fromString(String s) {
return Float.parseFloat(s);
}
@Override
public String toString(Float aFloat) throws TypeConversionException {
return aFloat.toString();
}
@Override
public Class<Float> getExternalType() {
return Float.class;
}
}
public static final class BOOLEAN extends SimpleTypeProvider.BOOLEAN<Boolean> {
@Override
public Boolean getInternal(Boolean external) {
return external;
}
@Override
public Boolean getExternal(Boolean internal) {
return internal;
}
@Override
public Boolean fromString(String s) {
return Boolean.parseBoolean(s);
}
@Override
public String toString(Boolean aBoolean) throws TypeConversionException {
return aBoolean.toString();
}
@Override
public Class<Boolean> getExternalType() {
return Boolean.class;
}
}
public static final class BINARY extends SimpleTypeProvider.BINARY<java.io.InputStream> {
@Override
public InputStream getInternal(InputStream inputStream) {
return inputStream;
}
@Override
public InputStream getExternal(InputStream inputStream) {
return inputStream;
}
@Override
public InputStream fromString(String s) {
throw new UnsupportedOperationException();
}
@Override
public String toString(InputStream inputStream) throws TypeConversionException {
throw new UnsupportedOperationException();
}
@Override
public Class<InputStream> getExternalType() {
return InputStream.class;
}
}
public static final class BYTE_ARRAY extends SimpleTypeProvider.BINARY<byte[]> {
@Override
public Class<byte[]> getExternalType() {
return byte[].class;
}
@Override
public InputStream getInternal(byte[] bytes) throws TypeConversionException {
return new ByteArrayInputStream(bytes);
}
@Override
public byte[] getExternal(InputStream inputStream) throws TypeConversionException {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[256];
for (int l = inputStream.read(buffer);l != -1;l = inputStream.read(buffer)) {
baos.write(buffer, 0, l);
}
return baos.toByteArray();
}
catch (IOException e) {
throw new TypeConversionException(e);
}
}
@Override
public byte[] fromString(String s) throws TypeConversionException {
throw new UnsupportedOperationException();
}
@Override
public String toString(byte[] bytes) throws TypeConversionException {
throw new UnsupportedOperationException();
}
}
public static final class DATE extends SimpleTypeProvider.DATE<Date> {
@Override
public Calendar getInternal(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
@Override
public Date getExternal(Calendar calendar) {
return calendar.getTime();
}
@Override
public Date fromString(String s) throws TypeConversionException {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
return sdf.parse(s);
}
catch (ParseException e) {
throw new TypeConversionException(e);
}
}
@Override
public String toString(Date date) throws TypeConversionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
return sdf.format(date);
}
@Override
public Class<Date> getExternalType() {
return Date.class;
}
}
public static final class CALENDAR extends SimpleTypeProvider.DATE<Calendar> {
@Override
public Class<Calendar> getExternalType() {
return Calendar.class;
}
@Override
public Calendar getInternal(Calendar calendar) throws TypeConversionException {
return calendar;
}
@Override
public Calendar getExternal(Calendar calendar) throws TypeConversionException {
return calendar;
}
@Override
public Calendar fromString(String s) throws TypeConversionException {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(s));
return c;
}
catch (ParseException e) {
throw new TypeConversionException(e);
}
}
@Override
public String toString(Calendar calendar) throws TypeConversionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
return sdf.format(calendar.getTime());
}
}
public static final class TIMESTAMP extends SimpleTypeProvider.DATE<Long> {
@Override
public Class<Long> getExternalType() {
return Long.class;
}
@Override
public Calendar getInternal(Long l) throws TypeConversionException {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(l);
return c;
}
@Override
public Long getExternal(Calendar calendar) throws TypeConversionException {
return calendar.getTimeInMillis();
}
@Override
public Long fromString(String s) throws TypeConversionException {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(s));
return c.getTimeInMillis();
}
catch (ParseException e) {
throw new TypeConversionException(e);
}
}
@Override
public String toString(Long l) throws TypeConversionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Calendar c = Calendar.getInstance();
c.setTimeInMillis(l);
return sdf.format(c);
}
}
}