Skip to content

Commit

Permalink
#50 - Adding Configuration and Configurations + Gson serializer for them
Browse files Browse the repository at this point in the history
  • Loading branch information
ashwanthkumar committed Jul 5, 2016
1 parent fe8b9df commit f3a0df6
Show file tree
Hide file tree
Showing 6 changed files with 199 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.thoughtworks.go.plugin.api.response.DefaultGoPluginApiResponse;
import com.thoughtworks.go.plugin.api.response.GoPluginApiResponse;
import in.ashwanthkumar.gocd.slack.GoNotificationMessage;
import in.ashwanthkumar.gocd.slack.base.serializer.GsonFactory;
import in.ashwanthkumar.utils.collections.Lists;
import org.apache.commons.io.IOUtils;

Expand Down Expand Up @@ -123,18 +124,18 @@ protected GoPluginApiResponse handleRequestGetView() {
* @return
*/
protected Map<String, Object> configField(String displayName, String defaultValue, String displayOrder, boolean required, boolean secure) {
Map<String, Object> serverUrlParams = new TreeMap<>();
serverUrlParams.put("display-name", displayName);
serverUrlParams.put("display-value", defaultValue);
serverUrlParams.put("display-order", displayOrder);
serverUrlParams.put("required", required);
serverUrlParams.put("secure", secure);
return serverUrlParams;
return new Configuration()
.setDisplayName(displayName)
.setDefaultValue(defaultValue)
.setDisplayOrder(Integer.parseInt(displayOrder))
.setRequired(required)
.setSecure(secure)
.asMap();
}


protected GoPluginApiResponse renderJSON(final int responseCode, final Object response) {
final String json = response == null ? null : new GsonBuilder().disableHtmlEscaping().create().toJson(response);
final String json = response == null ? null : GsonFactory.getGson().toJson(response);
DefaultGoPluginApiResponse pluginApiResponse = new DefaultGoPluginApiResponse(responseCode);
pluginApiResponse.setResponseBody(json);
return pluginApiResponse;
Expand Down
93 changes: 93 additions & 0 deletions src/main/java/in/ashwanthkumar/gocd/slack/base/Configuration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package in.ashwanthkumar.gocd.slack.base;

import com.google.gson.annotations.SerializedName;
import in.ashwanthkumar.utils.lang.StringUtils;

import java.util.Map;
import java.util.TreeMap;

/**
* Represents a plugin configuration
*/
public class Configuration {
private transient String id;

@SerializedName("display-name")
private String displayName;

@SerializedName("default-value")
private String defaultValue;

@SerializedName("display-order")
private Integer displayOrder;

@SerializedName("required")
private boolean required;

@SerializedName("secure")
private boolean secure;

public Map<String, Object> asMap() {
Map<String, Object> map = new TreeMap<>();
map.put("display-name", displayName);
map.put("default-value", defaultValue);
map.put("display-order", displayOrder);
map.put("required", required);
map.put("secure", secure);
return map;
}

public String getId() {
return id;
}

public Configuration setId(String id) {
this.id = id;
return this;
}

public String getDisplayName() {
return displayName;
}

public Configuration setDisplayName(String displayName) {
this.displayName = displayName;
return this;
}

public String getDefaultValue() {
return defaultValue;
}

public Configuration setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
return this;
}

public int getDisplayOrder() {
return displayOrder;
}

public Configuration setDisplayOrder(int displayOrder) {
this.displayOrder = displayOrder;
return this;
}

public boolean isRequired() {
return required;
}

public Configuration setRequired(boolean required) {
this.required = required;
return this;
}

public boolean isSecure() {
return secure;
}

public Configuration setSecure(boolean secure) {
this.secure = secure;
return this;
}
}
17 changes: 17 additions & 0 deletions src/main/java/in/ashwanthkumar/gocd/slack/base/Configurations.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package in.ashwanthkumar.gocd.slack.base;

import java.util.Iterator;
import java.util.List;

public class Configurations implements Iterable<Configuration> {
private List<Configuration> configurations;

public Configurations(List<Configuration> configurations) {
this.configurations = configurations;
}

@Override
public Iterator<Configuration> iterator() {
return configurations.iterator();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package in.ashwanthkumar.gocd.slack.base.serializer;

import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import in.ashwanthkumar.gocd.slack.base.Configuration;
import in.ashwanthkumar.gocd.slack.base.Configurations;

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

public class ConfigurationsSerializer implements JsonSerializer<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);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package in.ashwanthkumar.gocd.slack.base.serializer;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import in.ashwanthkumar.gocd.slack.base.Configurations;

public final class GsonFactory {
private final GsonBuilder gsonBuilder;
private static final GsonFactory INSTANCE = new GsonFactory();

/**
* Get a correct configured gson
*
* @return Gson implementation
*/
public static Gson getGson() {
return GsonFactory.INSTANCE.gsonBuilder.create();
}

private GsonFactory() {
gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Configurations.class, new ConfigurationsSerializer());
gsonBuilder.disableHtmlEscaping();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package in.ashwanthkumar.gocd.slack.base.serializer;

import com.google.gson.Gson;
import in.ashwanthkumar.gocd.slack.base.Configuration;
import in.ashwanthkumar.gocd.slack.base.Configurations;
import in.ashwanthkumar.utils.collections.Lists;
import org.junit.Test;

import java.util.Map;
import java.util.TreeMap;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class ConfigurationsSerializerTest {
@Test
public void shouldSerializeConfigurationsProperly() {
Configurations configurations = new Configurations(Lists.of(
new Configuration().setId("prop-1").setDisplayName("Prop 1"),
new Configuration().setId("prop-2").setDisplayName("Prop 2").setRequired(true)
));
Gson gson = GsonFactory.getGson();
String configAsJson = gson.toJson(configurations);
Map<String, Map<String, Object>> expectedMap = new TreeMap<>();
for (Configuration config : configurations) {
expectedMap.put(config.getId(), config.asMap());
}
String expectedJson = gson.toJson(expectedMap);

assertThat(configAsJson, is(expectedJson));
}

}

0 comments on commit f3a0df6

Please sign in to comment.