//**************************************************
//
// Copyright 2013 SOASTA, Inc.
// All rights reserved.
// Proprietary and confidential.
//
// File: MessageConverter.java
// Contains the MessageConverter class.
//
// This file contains the MessageConverter class.
//
//**************************************************
package com.soasta.jenkins;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class JunitResultActionConverter implements Converter
{
public boolean canConvert(Class clazz)
{
return clazz.equals(JunitResultAction.class);
}
// Convert this JunitResultAction object to XML
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context)
{
// Create JunitResultAction object
JunitResultAction resultAction = (JunitResultAction) value;
writer.startNode("resultID");
writer.setValue(resultAction.getResultID());
writer.endNode();
writer.startNode("url");
writer.setValue(resultAction.getUrl());
writer.endNode();
writer.startNode("isPlayList");
writer.setValue(Boolean.toString(resultAction.isPlayList()));
writer.endNode();
writer.startNode("exception");
writer.setValue(resultAction.getExceptionMessage());
writer.endNode();
writer.startNode("messages");
// sets the messages one at a time
if (resultAction.getMessages() != null &
resultAction.getErrorMessages().isEmpty())
{
for (Message message : resultAction.getMessages())
{
writer.startNode("message");
context.convertAnother(message);
writer.endNode();
}
}
else if (resultAction.getErrorMessages() != null &&
!resultAction.getErrorMessages().isEmpty())
{
// if this list is not null then this is from an older
// version. Store it in the new Message object version.
for (String error : resultAction.getErrorMessages())
{
writer.startNode("message");
context.convertAnother(new Message(null, null, error));
writer.endNode();
}
}
writer.endNode();
}
// Convert the JunitResultAction XML to a JunitResultAction object
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context)
{
// Create JunitResultAction object
JunitResultAction resultAction = new JunitResultAction();
// Traverse the XML tree
while (reader.hasMoreChildren())
{
reader.moveDown();
String nodeName = reader.getNodeName();
if ("m__resultID".equals(nodeName) || "resultID".equals(nodeName))
{
resultAction.setResultID(reader.getValue());
}
else if ("m__url".equals(nodeName) || "url".equals(nodeName))
{
resultAction.setUrl(reader.getValue());
}
else if ("m__isPlayList".equals(nodeName) || "isPlayList".equals(nodeName))
{
resultAction.setPlayList(Boolean.valueOf(reader.getValue()));
}
else if ("m__exception".equals(nodeName) || "exception".equals(nodeName))
{
resultAction.setExceptionMessage(reader.getValue());
}
else if ("messages".equals(nodeName))
{
// loop through all the message-xml
while (reader.hasMoreChildren())
{
reader.moveDown();
if ("message".equals(reader.getNodeName()))
{
Message message = (Message) context.convertAnother(resultAction, Message.class);
resultAction.addMessage(message);
}
reader.moveUp();
}
}
// Convert the errorMessages String objects to
// messages Message objects.
else if ("m__errorMessages".equals(nodeName))
{
// loop through all the string-xml
while (reader.hasMoreChildren())
{
reader.moveDown();
if ("string".equals(reader.getNodeName()))
{
resultAction.addErrorMessage(reader.getValue());
}
reader.moveUp();
}
}
reader.moveUp();
}
return resultAction;
}
}