package io.shockah.skylark.db;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.common.base.Joiner;
import com.j256.ormlite.field.FieldType;
import com.j256.ormlite.field.SqlType;
import com.j256.ormlite.field.types.BaseDataType;
import com.j256.ormlite.support.DatabaseResults;
import io.shockah.skylark.util.Lazy;
public class StringListToSpaceDelimitedStringPersister extends BaseDataType {
private static final Lazy<StringListToSpaceDelimitedStringPersister> singleton = Lazy.of(() -> new StringListToSpaceDelimitedStringPersister());
public static StringListToSpaceDelimitedStringPersister getSingleton() {
return singleton.get();
}
private StringListToSpaceDelimitedStringPersister() {
super(SqlType.LONG_STRING, new Class<?>[] { List.class });
}
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr) throws SQLException {
return defaultStr;
}
@Override
public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos) throws SQLException {
return results.getString(columnPos);
}
@Override
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException {
if (fieldType == null)
return sqlArg;
String str = ((String)sqlArg).trim();
if (str.isEmpty())
return new ArrayList<>();
return Arrays.asList(str.split(" "));
}
@SuppressWarnings("unchecked")
@Override
public Object javaToSqlArg(FieldType fieldType, Object javaObject) throws SQLException {
return Joiner.on(" ").join((List<String>)javaObject);
}
}