package com.grendelscan.commons.http.apache_overrides.serializable;
import java.io.IOException;
import java.io.Serializable;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.ParseException;
import org.apache.http.message.BasicHeaderValueParser;
import org.apache.http.message.BasicLineFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SerializableHttpHeader implements Header, Serializable
{
private static final Logger LOGGER = LoggerFactory.getLogger(SerializableHttpHeader.class);
/**
*
*/
private static final long serialVersionUID = -5590741863734703260L;
private final String name;
/**
* Header value.
*/
private final String value;
public SerializableHttpHeader()
{
this(null, null);
}
public SerializableHttpHeader(Header header)
{
this(header.getName(), header.getValue());
}
public SerializableHttpHeader(String name, String value)
{
this.name = name;
this.value = value;
}
@Override
public SerializableHttpHeader clone()
{
return new SerializableHttpHeader(new String(name), new String(value));
}
/**
* Returns an array of {@link HeaderElement}s constructed from my value.
*
* @see BasicHeaderValueParser#parseElements
*
* @return an array of header elements
*
* @throws ParseException
* in case of a parse error
*/
@Override
public HeaderElement[] getElements() throws ParseException
{
if (value != null)
{
// result intentionally not cached, it's probably not used again
return BasicHeaderValueParser.parseElements(value, null);
}
else
{
return new HeaderElement[] {};
}
}
/**
* Returns the header name.
*
* @return String name The name
*/
@Override
public String getName()
{
return name;
}
/**
* Returns the header value.
*
* @return String value The current value.
*/
@Override
public String getValue()
{
return value;
}
/**
* Returns a {@link String} representation of the header.
*
* @return a string
*/
@Override
public String toString()
{
// no need for non-default formatting in toString()
return BasicLineFormatter.DEFAULT.formatHeader(null, this).toString();
}
public byte[] getBytes()
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
try
{
out.write(name.getBytes());
out.write(':');
out.write(' ');
out.write(value.getBytes());
}
catch (IOException e)
{
LOGGER.error("Weird problem getting bytes for header: " + e.toString(), e);
}
return out.toByteArray();
}
public static SerializableHttpHeader convertToSerializableHeader(Header header)
{
SerializableHttpHeader basic = null;
if (header instanceof SerializableHttpHeader)
{
basic = (SerializableHttpHeader) header;
}
else if (header != null)
{
basic = new SerializableHttpHeader(header.getName(), header.getValue());
}
return basic;
}
}