
net.anotheria.moskito.webui.shared.resource.ReplyObjectWriter Maven / Gradle / Ivy
package net.anotheria.moskito.webui.shared.resource;
import net.anotheria.moskito.webui.accumulators.api.AccumulatorDefinitionAO;
import net.anotheria.moskito.webui.dashboards.api.DashboardAO;
import net.anotheria.moskito.webui.dashboards.api.DashboardDefinitionAO;
import net.anotheria.moskito.webui.producers.api.UnitCountAO;
import net.anotheria.moskito.webui.threshold.api.ThresholdAlertAO;
import net.anotheria.moskito.webui.threshold.api.ThresholdDefinitionAO;
import net.anotheria.moskito.webui.threshold.api.ThresholdStatusAO;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Writer for xml output of the reply object.
*
* @author lrosenberg
* @since 06.10.14 13:20
*/
@Provider
@Produces(MediaType.APPLICATION_XML)
public class ReplyObjectWriter implements MessageBodyWriter {
/**
* The list of java classes to be recognized by the new {@link JAXBContext}.
*/
private static final Class[] classesToBeBound = {
ThresholdAlertAO.class,
ThresholdStatusAO.class,
AccumulatorDefinitionAO.class,
ThresholdDefinitionAO.class,
UnitCountAO.class,
DashboardDefinitionAO.class,
DashboardAO.class
};
@Override
public boolean isWriteable(Class> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return type.equals(ReplyObject.class);
}
@Override
public long getSize(ReplyObject replyObject, Class> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return -1;
}
@Override
public void writeTo(ReplyObject replyObject, Class> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException {
try {
entityStream.write(
"".getBytes("UTF-8")
);
entityStream.write("".getBytes());
entityStream.write((""+replyObject.isSuccessful()+" ").getBytes("UTF-8"));
if (replyObject.getMessage()!=null)
entityStream.write((""+replyObject.getMessage()+" ").getBytes("UTF-8"));
entityStream.write("".getBytes());
HashMap results = replyObject.getResults();
Set resultSet = results.entrySet();
JAXBContext context = JAXBContext.newInstance(classesToBeBound);
Marshaller m = context.createMarshaller();
m.setProperty("jaxb.fragment", Boolean.TRUE);
for (Map.Entry entry : resultSet){
String sectionName = entry.getKey().toString();
entityStream.write(('<' +sectionName+ '>').getBytes());
m.marshal(entry.getValue(), entityStream);
entityStream.write((""+sectionName+ '>').getBytes());
}
entityStream.write(" ".getBytes());
entityStream.write(" ".getBytes());
} catch (JAXBException exception) {
exception.printStackTrace();
}
}
private void writeList(List list, Marshaller marshaller, OutputStream stream ) throws IOException, JAXBException{
for (Object o : list){
marshaller.marshal(o, stream);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy