org.apache.abdera2.activities.client.ActivityEntity.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.abdera2.activities.client.ActivityEntity.java

Source

/*
 * 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.abdera2.activities.client;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.activation.MimeType;

import org.apache.abdera2.activities.extra.Extra;
import org.apache.abdera2.activities.model.ASBase;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.message.BasicHeader;

public class ActivityEntity extends BasicHttpEntity implements HttpEntity {

    private final ASBase base;
    private final Header ct;
    private final long len;
    private byte[] buf = null;

    /**
     * Create the entity using the specified Activity element. 
     * The content length will not be calculated automatically so the 
     * Content-Length header in the part will not be specified. The 
     * Content-Type will be automatically detected based on the type of
     * element passed in.
     */
    public ActivityEntity(ASBase base) {
        this(base, false, (String) null);
    }

    /**
     * Create the entity using the specified Activity document or element.
     * The content length will not be calculated. The Content-Type 
     * specified will be used. If contentType is null, the Content-Type 
     * will be automatically detected based on the type of element passed in.
     */
    public ActivityEntity(ASBase base, String contentType) {
        this(base, false, contentType);
    }

    public ActivityEntity(ASBase base, MimeType contentType) {
        this(base, false, contentType);
    }

    /**
     * Create the entity using the specified Activity document or element.
     * The content length will be automatically calculated if the 
     * calclen argument is true. The Content-Type will be automatically
     * detected based on the type of element passed in.
     */
    public ActivityEntity(ASBase base, boolean calclen) {
        this(base, calclen, (String) null);
    }

    /**
     * Create the entity using the specified Activity document or element.
     * The content length will be automatically calculated if the 
     * calclen argument is true. The Content-Type specified will be
     * used. If contentType is null, the Content-Type will be automatically
     * detected based on the type of element passed in.
     */
    public ActivityEntity(ASBase base, boolean calclen, String contentType) {
        this.base = base;
        this.ct = new BasicHeader("Content-Type",
                contentType != null ? contentType : Extra.getMediaType(base).toString());
        if (calclen) {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            base.writeTo(out);
            buf = out.toByteArray();
            len = buf.length;
        } else
            len = -1;
    }

    public ActivityEntity(ASBase base, boolean calclen, MimeType contentType) {
        this(base, calclen, contentType.toString());
    }

    public boolean isRepeatable() {
        return true;
    }

    public void writeTo(OutputStream out) throws IOException {
        if (buf == null)
            base.writeTo(out);
        else
            out.write(buf);
    }

    public InputStream getContent() {
        try {
            if (buf == null) {
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                base.writeTo(out);
                buf = out.toByteArray();
            }
            return new ByteArrayInputStream(buf);
        } catch (Throwable t) {
            throw new RuntimeException(t);
        }
    }

    public long getContentLength() {
        return len;
    }

    public boolean isChunked() {
        return len == -1;
    }

    public Header getContentType() {
        return ct;
    }

}