package org.webpieces.httpparser.api.dto; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.webpieces.data.api.DataWrapper; import org.webpieces.data.api.DataWrapperGeneratorFactory; import org.webpieces.httpparser.api.common.Header; public class HttpLastChunk extends HttpChunk { protected List<Header> headers = new ArrayList<>(); //Convenience structure that further morphs the headers into a Map that can //be looked up by key. private transient Headers headersStruct = new Headers(); /** * Order of HTTP Headers matters for Headers with the same key */ public List<Header> getHeaders() { return Collections.unmodifiableList(headers); } public void addHeader(Header header) { headers.add(header); headersStruct.addHeader(header); } /** * * @return */ public Headers getHeaderLookupStruct() { return headersStruct; } @Override public HttpMessageType getMessageType() { return HttpMessageType.LAST_CHUNK; } @Override public void setBody(DataWrapper data) { if(data.getReadableSize() != 0) throw new IllegalArgumentException("Can't set body on HttpLastChunk according to http spec. It must be size=0"); super.setBody(data); } @Override public DataWrapper getBody() { return DataWrapperGeneratorFactory.EMPTY; } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((extensions == null) ? 0 : extensions.hashCode()); result = prime * result + ((headers == null) ? 0 : headers.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; if (getClass() != obj.getClass()) return false; HttpLastChunk other = (HttpLastChunk) obj; if (extensions == null) { if (other.extensions != null) return false; } else if (!extensions.equals(other.extensions)) return false; if (headers == null) { if (other.headers != null) return false; } else if (!headers.equals(other.headers)) return false; return true; } @Override public String createTrailer() { String lastPart = ""; for(Header header : getHeaders()) { lastPart += header.getName()+": "+header.getValue()+TRAILER_STR; } lastPart += TRAILER_STR; return lastPart; } }