/*
* Copyright (c) 2013-2016. Urban Airship and Contributors
*/
package com.urbanairship.api.push.parse.notification.mpns;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.urbanairship.api.common.parse.FieldParser;
import com.urbanairship.api.common.parse.FieldParserRegistry;
import com.urbanairship.api.common.parse.MapFieldParserRegistry;
import com.urbanairship.api.common.parse.StandardObjectDeserializer;
import com.urbanairship.api.push.model.notification.mpns.MPNSTileData;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.JsonDeserializer;
import java.io.IOException;
public class MPNSTileDeserializer extends JsonDeserializer<MPNSTileData> {
private static final FieldParserRegistry<MPNSTileData, MPNSTileReader> FIELD_PARSERS = new MapFieldParserRegistry<MPNSTileData, MPNSTileReader>(
ImmutableMap.<String, FieldParser<MPNSTileReader>>builder()
.put("background_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readBackgroundImage(json);
}
})
.put("count", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readCount(json);
}
})
.put("title", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readTitle(json);
}
})
.put("back_background_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readBackBackgroundImage(json);
}
})
.put("back_title", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readBackTitle(json);
}
})
.put("back_content", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readBackContent(json);
}
})
// WP8 common fields
.put("id", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readId(json);
}
})
.put("template", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readTemplate(json);
}
})
// WP8 FlipTile fields
.put("wide_background_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readWideBackgroundImage(json);
}
})
.put("wide_back_background_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readWideBackBackgroundImage(json);
}
})
.put("wide_back_content", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readWideBackContent(json);
}
})
.put("small_background_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readSmallBackgroundImage(json);
}
})
// WP8 IconicTile fields
.put("icon_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readIconImage(json);
}
})
.put("small_icon_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readSmallIconImage(json);
}
})
.put("background_color", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readBackgroundColor(json);
}
})
.put("wide_content_1", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readWideContent1(json);
}
})
.put("wide_content_2", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readWideContent2(json);
}
})
.put("wide_content_3", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readWideContent3(json);
}
})
// WP8 CycleTile fields
.put("cycle_image", new FieldParser<MPNSTileReader>() {
public void parse(MPNSTileReader reader, JsonParser json, DeserializationContext context) throws IOException {
reader.readCycleImage(json);
}
})
.build()
);
private final StandardObjectDeserializer<MPNSTileData, ?> deserializer;
public MPNSTileDeserializer() {
deserializer = new StandardObjectDeserializer<MPNSTileData, MPNSTileReader>(
FIELD_PARSERS,
new Supplier<MPNSTileReader>() {
@Override
public MPNSTileReader get() {
return new MPNSTileReader();
}
}
);
}
@Override
public com.urbanairship.api.push.model.notification.mpns.MPNSTileData deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
return deserializer.deserialize(jp, ctxt);
}
}