Package org.apache.abdera.protocol.server.context

Source Code of org.apache.abdera.protocol.server.context.AbstractResponseContext

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.  For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.abdera.protocol.server.context;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.activation.MimeType;

import org.apache.abdera.i18n.text.Localizer;
import org.apache.abdera.i18n.text.UrlEncoding;
import org.apache.abdera.i18n.text.CharUtils.Profile;
import org.apache.abdera.protocol.server.ResponseContext;
import org.apache.abdera.protocol.util.AbstractResponse;
import org.apache.abdera.protocol.util.EncodingUtil;
import org.apache.abdera.util.EntityTag;
import org.apache.abdera.writer.Writer;

public abstract class AbstractResponseContext
  extends AbstractResponse
  implements ResponseContext {

  protected static final String[] EMPTY = new String[0];
 
  protected int status = 0;
  protected String status_text = null;
  protected Writer writer = null;
 
  protected Map<String,Object[]> headers = null;

  public ResponseContext removeHeader(String name) {
    Map<String,Object[]> headers = getHeaders();
    headers.remove(name);
    return this;
  }
 
  public ResponseContext setEncodedHeader(String name, String charset, String value) {
    return setHeader(name, EncodingUtil.encode(value, charset));
  }
 
  public ResponseContext setEncodedHeader(String name, String charset, String... vals) {
    Object[] evals = new Object[vals.length];
    for (int n = 0; n < vals.length; n++) {
      evals[n] = EncodingUtil.encode(vals[n], charset);
    }
    return setHeader(name, evals);
  }
 
  public ResponseContext setEscapedHeader(String name, Profile profile, String value) {
    return setHeader(name,UrlEncoding.encode(value, profile.filter()));
  }
 
  public ResponseContext setHeader(String name, Object value) {
    return setHeader(name, new Object[] {value});
  }
 
  public ResponseContext setHeader(String name, Object... vals) {
    Map<String,Object[]> headers = getHeaders();
    List<Object> values = new ArrayList<Object>();
    for (Object value : vals) {
      values.add(value);
    }
    headers.put(name, values.toArray(new Object[values.size()]));
    return this;
  }
 
  public ResponseContext addEncodedHeader(String name, String charset, String value) {
    return addHeader(name, EncodingUtil.encode(value, charset));
  }
 
  public ResponseContext addEncodedHeaders(String name, String charset, String... vals) {
    for (String value : vals) {
      addHeader(name,EncodingUtil.encode(value, charset));
    }
    return this;
  }
 
  public ResponseContext addHeader(String name, Object value) {
    return addHeaders(name, new Object[] {value});
  }
 
  public ResponseContext addHeaders(String name, Object... vals) {
    Map<String,Object[]> headers = getHeaders();
    Object[] values = headers.get(name);
    List<Object> l = null;
    if (values == null) {
      l = new ArrayList<Object>();
    } else {
      l = Arrays.asList(values);
    }
    for (Object value : vals) {
      l.add(value);
    }
    headers.put(name, l.toArray(new Object[l.size()]));
    return this;
  }
 
  public Map<String, Object[]> getHeaders() {
    if (headers == null)
      headers = new HashMap<String,Object[]>();
    return headers;
  }
   
  public Date getDateHeader(String name) {
    Map<String,Object[]> headers = getHeaders();
    Object[] values = headers.get(name);
    if (values != null) {
      for (Object value : values) {
        if (value instanceof Date)
          return (Date)value;
      }
    }
    return null;
  }
 
  public String getHeader(String name) {
    Map<String,Object[]> headers = getHeaders();
    Object[] values = headers.get(name);
    if (values != null && values.length > 0)
      return values[0].toString();
    return null;
  }

  public Object[] getHeaders(String name) {
    Map<String,Object[]> headers = getHeaders();
    return headers.get(name);
  }

  public String[] getHeaderNames() {
    Map<String,Object[]> headers = getHeaders();
    return headers.keySet().toArray(new String[headers.size()]);
  }
 
  private void append(StringBuilder buf, String value) {
    if (buf.length() > 0) buf.append(", ");
    buf.append(value);
  }
   
  public String getCacheControl() {
    StringBuilder buf = new StringBuilder();
    if (isPublic()) append(buf,"public");
    if (isPrivate()) append(buf,"private");
    if (private_headers != null && private_headers.length > 0) {
      buf.append("=\"");
      for (String header : private_headers) {
        append(buf,header);
      }
      buf.append("\"");
    }
    if (isNoCache()) append(buf,"no-cache");
    if (nocache_headers != null && nocache_headers.length > 0) {
      buf.append("=\"");
      for (String header : nocache_headers) {
        append(buf,header);
      }
      buf.append("\"");
    }
    if (isNoStore()) append(buf,"no-store");
    if (isMustRevalidate()) append(buf,"must-revalidate");
    if (isNoTransform()) append(buf, "no-transform");
    if (getMaxAge() != -1) append(buf, "max-age=" + getMaxAge());
    if (getSMaxAge() != -1) append(buf, "smax-age=" + getMaxAge());
    return buf.toString();
  }

  public ResponseContext  setAge(long age) {
    return age == -1 ?
        removeHeader("Age") :
        setHeader("Age", String.valueOf(age));
  }
 
  public ResponseContext  setContentLanguage(String language) {
    return language == null ?
        removeHeader("Content-Language") :
        setHeader("Content-Language",language);
  }

  public ResponseContext  setContentLength(long length) {
    return length == -1 ?
      removeHeader("Content-Length") :
      setHeader("Content-Length", String.valueOf(length));
  }

  public ResponseContext  setContentLocation(String uri) {
    return uri == null ?
      removeHeader("Content-Location") :
      setHeader("Content-Location",uri);
  }
 
  public ResponseContext setSlug(String slug) {
    if (slug == null) {
      return removeHeader("Slug");
    }
    if (slug.indexOf((char)10) > -1 ||
        slug.indexOf((char)13) > -1)
      throw new IllegalArgumentException(
        Localizer.get("SLUG.BAD.CHARACTERS"));
    return setEscapedHeader("Slug", Profile.ASCIISANSCRLF, slug);
  }
 
  public ResponseContext setContentType(String type) {
    return setContentType(type,null);
  }
 
  public ResponseContext setContentType(String type, String charset) {
    if (type == null) {
      return removeHeader("Content-Type");
    }
    try {
      MimeType mimeType = new MimeType(type);
      if (charset != null) mimeType.setParameter("charset", charset);
      return setHeader("Content-Type", mimeType.toString());
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  public ResponseContext setEntityTag(String etag) {
    return etag != null ?
      setEntityTag(new EntityTag(etag)) :
      removeHeader("ETag");
  }
 
  public ResponseContext  setEntityTag(EntityTag etag) {
    return etag == null ?
      removeHeader("ETag") :
      setHeader("ETag",etag.toString());
  }

  public ResponseContext  setExpires(Date date) {
    return date == null ?
      removeHeader("Expires") :
      setHeader("Expires",date);
  }
 
  public ResponseContext  setLastModified(Date date) {
    return date == null ?
      removeHeader("Last-Modified") :
      setHeader("Last-Modified",date);
  }

  public ResponseContext setLocation(String uri) {
    return uri == null ?
      removeHeader("Location") :
      setHeader("Location",uri);
  }
 
  public int getStatus() {
    return status;
  }
 
  public ResponseContext setStatus(int status) {
    this.status = status;
    return this;
  }

  public String getStatusText() {
    return status_text;
  }
 
  public ResponseContext setStatusText(String text) {
    this.status_text = text;
    return this;
  }

  public ResponseContext setAllow(String method) {
    return setHeader("Allow", method);
  }
 
  public ResponseContext setAllow(String... methods) {
    StringBuilder buf = new StringBuilder();
    for(String method : methods) {
      if (buf.length() > 0) buf.append(", ");
      buf.append(method);
    }
    return setAllow(buf.toString());
  }
 
  public ResponseContext setWriter(Writer writer) {
    this.writer = writer;
    return this;
  }
 
}
TOP

Related Classes of org.apache.abdera.protocol.server.context.AbstractResponseContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.