package sk.stuba.fiit.perconik.data; import java.util.Map; import javax.annotation.Nullable; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import sk.stuba.fiit.perconik.data.type.content.AnyContentDeserializer; import sk.stuba.fiit.perconik.data.type.content.AnyContentKeySerializer; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.Maps.newLinkedHashMap; public class AnyData extends Data { protected final Map<String, Object> other; public AnyData() { this.other = newLinkedHashMap(); } protected AnyData(final Map<String, Object> other) { this.other = checkNotNull(other); } public static AnyData fromMap(final Map<String, Object> data) { return fromMap(AnyData.class, data); } public static AnyData fromString(final String data) { return fromString(AnyData.class, data); } public static AnyData of(final Map<String, Object> other) { return new AnyData(other); } @JsonAnyGetter @JsonSerialize(keyUsing = AnyContentKeySerializer.class) public Map<String, Object> any() { return this.other; } @JsonAnySetter @JsonDeserialize(using = AnyContentDeserializer.class) public void put(final String key, @Nullable final Object value) { this.other.put(key, value); } public Object get(final String key) { return this.other.get(key); } }