Skip to content

Commit

Permalink
#50 - Implementing custom deserializer as well for Configurations
Browse files Browse the repository at this point in the history
  • Loading branch information
ashwanthkumar committed Jul 5, 2016
1 parent f3e6837 commit 68fb6ab
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package in.ashwanthkumar.gocd.slack.base.serializer;

import com.google.gson.*;
import in.ashwanthkumar.gocd.slack.base.config.Configuration;
import in.ashwanthkumar.gocd.slack.base.config.Configurations;
import in.ashwanthkumar.utils.collections.Lists;
import in.ashwanthkumar.utils.func.Function;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class ConfigurationsSerDe implements JsonSerializer<Configurations>, JsonDeserializer<Configurations> {
@Override
public JsonElement serialize(Configurations configurations, Type type, JsonSerializationContext jsonSerializationContext) {
Map<String, Configuration> configMap = new TreeMap<>();
for (Configuration configuration : configurations) {
configMap.put(configuration.getId(), configuration);
}
return jsonSerializationContext.serialize(configMap);
}

@Override
public Configurations deserialize(JsonElement jsonElement, Type type, final JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
JsonObject json = jsonElement.getAsJsonObject();
List<Configuration> configurations = new ArrayList<>();
for (Map.Entry<String, JsonElement> element : json.entrySet()) {
String id = element.getKey();
Configuration config = jsonDeserializationContext.deserialize(json.get(id), Configuration.class);
config.setId(id);
configurations.add(config);
}
return new Configurations(configurations);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public static Gson getGson() {

private GsonFactory() {
gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Configurations.class, new ConfigurationsSerializer());
gsonBuilder.registerTypeAdapter(Configurations.class, new ConfigurationsSerDe());
gsonBuilder.disableHtmlEscaping();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class ConfigurationsSerializerTest {
public class ConfigurationsSerDeTest {
@Test
public void shouldSerializeConfigurationsProperly() {
Configurations configurations = new Configurations(Lists.of(
Expand All @@ -30,4 +30,21 @@ public void shouldSerializeConfigurationsProperly() {
assertThat(configAsJson, is(expectedJson));
}

@Test
public void shouldDeserializeConfigurations() {
String input = "{\"pluginConfig\":{\"display-name\":\"Pipeline Notification Rules\",\"default-value\":\"\",\"display-order\":1,\"required\":false,\"secure\":false}," +
"\"server-url-external\":{\"display-name\":\"External GoCD Server\",\"default-value\":\"\",\"display-order\":1,\"required\":false,\"secure\":false}}";
Configurations configurations = GsonFactory.getGson().fromJson(input, Configurations.class);
assertThat(configurations.size(), is(2));

Configuration c1 = configurations.get(0);
Configuration e1 = new Configuration().setId("pluginConfig").setDisplayName("Pipeline Notification Rules").setDisplayOrder(1);
assertThat(c1, is(e1));

Configuration c2 = configurations.get(1);
Configuration e2 = new Configuration().setId("server-url-external").setDisplayName("External GoCD Server").setDisplayOrder(1);
assertThat(c2, is(e2));
}


}

0 comments on commit 68fb6ab

Please sign in to comment.