package io.cattle.platform.db.jooq.converter; import io.cattle.platform.db.jooq.converter.impl.JsonUnmodifiableMap; import io.cattle.platform.json.JacksonJsonMapper; import io.cattle.platform.json.JsonMapper; import java.io.IOException; import java.util.Map; import org.jooq.Converter; public class DataConverter implements Converter<String, Map<String, Object>> { private static final long serialVersionUID = 8496703546902403178L; JsonMapper mapper = new JacksonJsonMapper(); @Override public Map<String, Object> from(String databaseObject) { if (databaseObject == null) { return null; } return new JsonUnmodifiableMap<String, Object>(mapper, databaseObject); } @Override public String to(Map<String, Object> userObject) { if (userObject == null) { return null; } try { String result = mapper.writeValueAsString(userObject); if (userObject instanceof JsonUnmodifiableMap<?, ?>) { ((JsonUnmodifiableMap<?, ?>) userObject).setText(result); } return result; } catch (IOException e) { throw new IllegalStateException("Failed to marshall [" + userObject + "]", e); } } @Override public Class<String> fromType() { return String.class; } @SuppressWarnings("unchecked") @Override public Class<Map<String, Object>> toType() { return (Class<Map<String, Object>>) (Class<?>) Map.class; } }