package com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel; import com.smartcodeltd.jenkinsci.plugins.buildmonitor.viewmodel.features.Feature; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.SerializerProvider; import java.io.IOException; /** * @author Jan Molak */ public class JobViewSerialiser extends JsonSerializer<JobView> { @Override public void serialize(JobView job, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStartObject(); jgen.writeObjectField("name", job.name()); jgen.writeObjectField("url", job.url()); jgen.writeObjectField("status", job.status()); jgen.writeObjectField("hashCode", job.hashCode()); jgen.writeObjectField("progress", job.progress()); jgen.writeObjectField("estimatedDuration", job.estimatedDuration()); for (Feature<?> feature : job.features()) { Object serialised = feature.asJson(); if (serialised != null) { jgen.writeObjectField(nameOf(serialised), serialised); } } jgen.writeEndObject(); } private String nameOf(Object serialised) { // http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/beans/Introspector.java#265 char chars[] = serialised.getClass().getSimpleName().toString().toCharArray(); chars[0] = Character.toLowerCase(chars[0]); return new String(chars); } }