package sk.stuba.fiit.perconik.data.type.content; import java.io.IOException; import java.lang.reflect.Type; import javax.annotation.Nullable; import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.PropertyNamingStrategy.PropertyNamingStrategyBase; import com.fasterxml.jackson.databind.SerializationConfig; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper; import com.fasterxml.jackson.databind.ser.std.NonTypedScalarSerializerBase; import sk.stuba.fiit.perconik.data.bind.Mapper; import static com.google.common.base.Strings.isNullOrEmpty; public class AnyContentKeySerializer extends NonTypedScalarSerializerBase<String> { public AnyContentKeySerializer() { super(String.class); } @Override public void acceptJsonFormatVisitor(final JsonFormatVisitorWrapper visitor, final JavaType type) throws JsonMappingException { if (visitor != null) { visitor.expectStringFormat(type); } } @Override public void serialize(final String value, final JsonGenerator generator, final SerializerProvider provider) throws IOException, JsonGenerationException { SerializationConfig configuration = Mapper.getShared().getSerializationConfig(); PropertyNamingStrategyBase strategy = (PropertyNamingStrategyBase) configuration.getPropertyNamingStrategy(); generator.writeFieldName(strategy.translate(value)); } @Override public JsonNode getSchema(final SerializerProvider provider, final Type typeHint) { return createSchemaNode("string", true); } @Override public boolean isEmpty(@Nullable final String value) { return isNullOrEmpty(value); } }