@Inject //We will place more than one config there (i.e. H2/SQLite database) Settings(Logger logger, @ConfigDir(sharedRoot = false) Path dataFolder) { this.logger = logger; this.dataFolder = dataFolder; try { configMapper = options.getObjectMapperFactory().getMapper(General.class).bindToNew(); textMapper = options.getObjectMapperFactory().getMapper(TextConfig.class).bindToNew(); } catch (ObjectMappingException objMappingExc) { logger.error("Invalid plugin structure", objMappingExc); } }
@Override @SuppressWarnings("unchecked") public void serialize(TypeToken<?> type, Object obj, ConfigurationNode value) throws ObjectMappingException { if (type.getRawType().isInterface() || Modifier.isAbstract(type.getRawType().getModifiers())) { value.getNode("__class__").setValue(type.getRawType().getCanonicalName()); } ((ObjectMapper<Object>) value.getOptions().getObjectMapperFactory().getMapper(obj.getClass())) .bind(obj).serialize(value); } }
@Override @SuppressWarnings("unchecked") public void serialize(@NonNull TypeToken<?> type, @Nullable Object obj, @NonNull ConfigurationNode value) throws ObjectMappingException { if (type.getRawType().isInterface() || Modifier.isAbstract(type.getRawType().getModifiers())) { // serialize obj's concrete type rather than the interface/abstract class value.getNode("__class__").setValue(obj.getClass().getName()); } ((ObjectMapper<Object>) value.getOptions().getObjectMapperFactory().getMapper(obj.getClass())).bind(obj).serialize(value); } }
@Override @SuppressWarnings("unchecked") public void serialize(@NonNull TypeToken<?> type, @Nullable Object obj, @NonNull ConfigurationNode value) throws ObjectMappingException { if (type.getRawType().isInterface() || Modifier.isAbstract(type.getRawType().getModifiers())) { // serialize obj's concrete type rather than the interface/abstract class value.getNode("__class__").setValue(obj.getClass().getName()); } ((ObjectMapper<Object>) value.getOptions().getObjectMapperFactory().getMapper(obj.getClass())).bind(obj).serialize(value); } }
@Override public Object deserialize(TypeToken<?> type, ConfigurationNode value) throws ObjectMappingException { Class<?> clazz = getInstantiableType(type, value.getNode("__class__").getString()); return value.getOptions().getObjectMapperFactory().getMapper(clazz).bindToNew().populate(value); }
@Override public Object deserialize(@NonNull TypeToken<?> type, @NonNull ConfigurationNode value) throws ObjectMappingException { Class<?> clazz = getInstantiableType(type, value.getNode("__class__").getString()); return value.getOptions().getObjectMapperFactory().getMapper(clazz).bindToNew().populate(value); }
@Override public Object deserialize(@NonNull TypeToken<?> type, @NonNull ConfigurationNode value) throws ObjectMappingException { Class<?> clazz = getInstantiableType(type, value.getNode("__class__").getString()); return value.getOptions().getObjectMapperFactory().getMapper(clazz).bindToNew().populate(value); }