Package v7db.files.milton

Source Code of v7db.files.milton.FileResource

/**
* Copyright (c) 2011, Thilo Planz. All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package v7db.files.milton;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import v7db.files.mongodb.V7File;

import com.bradmcevoy.http.Auth;
import com.bradmcevoy.http.CollectionResource;
import com.bradmcevoy.http.CopyableResource;
import com.bradmcevoy.http.DeletableResource;
import com.bradmcevoy.http.GetableResource;
import com.bradmcevoy.http.HttpManager;
import com.bradmcevoy.http.MoveableResource;
import com.bradmcevoy.http.PropFindableResource;
import com.bradmcevoy.http.Range;
import com.bradmcevoy.http.Request;
import com.bradmcevoy.http.Resource;
import com.bradmcevoy.http.Response;
import com.bradmcevoy.http.Request.Method;
import com.bradmcevoy.http.exceptions.BadRequestException;
import com.bradmcevoy.http.exceptions.ConflictException;
import com.bradmcevoy.http.exceptions.NotAuthorizedException;
import com.bradmcevoy.http.exceptions.NotFoundException;

class FileResource implements GetableResource, PropFindableResource,
    MoveableResource, DeletableResource, CopyableResource {

  final V7File file;

  final ResourceFactory factory;

  // could be different from file.getName()
  // at least for the endpoint root folders, which needs
  // to match the URL part
  final String name;

  FileResource(String name, V7File file, ResourceFactory factory) {
    this.file = file;
    this.name = name;
    this.factory = factory;
  }

  FileResource(V7File file, ResourceFactory factory) {
    this(file.getName(), file, factory);
  }

  public Long getContentLength() {
    return file.getLength();
  }

  public String getContentType(String accepts) {
    return file.getContentType();
  }

  public Long getMaxAgeSeconds(Auth auth) {
    return null;
  }

  public void sendContent(OutputStream out, Range range,
      Map<String, String> params, String contentType) throws IOException,
      NotAuthorizedException, BadRequestException, NotFoundException {

    Request request = HttpManager.request();
    if (StringUtils.contains(request.getAcceptEncodingHeader(), "gzip")) {
      Long len = file.getGZipLength();
      if (len != null) {
        InputStream content = file.getInputStreamWithGzipContents();
        Response response = HttpManager.response();
        response
            .setContentEncodingHeader(Response.ContentEncoding.GZIP);
        response.setVaryHeader("Accept-Encoding");
        response.setContentLengthHeader(len);
        MiltonServlet.response().setContentLength(len.intValue());
        IOUtils.copy(content, out);
        return;
      }
    }

    InputStream content = file.getInputStream();
    if (content == null)
      throw new BadRequestException("file has no contents");
    IOUtils.copy(content, out);
  }

  public Object authenticate(String user, String password) {
    return factory.authenticate(user, password);
  }

  public boolean authorise(Request request, Method method, Auth auth) {
    return factory.authorise(file, request, method, auth);
  }

  public String checkRedirect(Request request) {
    // TODO Auto-generated method stub
    return null;
  }

  public Date getModifiedDate() {
    Date d = file.getModifiedDate();
    if (d == null)
      return file.getCreateDate();
    return d;
  }

  public String getName() {
    return name;
  }

  public String getRealm() {
    return factory.getRealm();
  }

  public String getUniqueId() {
    return file.getDigest();
  }

  public Date getCreateDate() {
    return file.getCreateDate();
  }

  public void moveTo(CollectionResource rDest, String name)
      throws ConflictException, NotAuthorizedException,
      BadRequestException {

    FolderResource newParent = (FolderResource) rDest;

    try {
      if (newParent.file.getId().equals(file.getParentId()))
        file.rename(name);
      else
        file.moveTo(newParent.file.getId(), name);
    } catch (IOException e) {
      System.err.println();
      throw new ConflictException(this);
    }

  }

  public void delete() throws NotAuthorizedException, ConflictException,
      BadRequestException {
    try {
      file.delete();
    } catch (IOException e) {
      e.printStackTrace();
      throw new ConflictException(this);
    }
  }

  public void copyTo(CollectionResource to, String name)
      throws NotAuthorizedException, BadRequestException,
      ConflictException {
    FolderResource newParent = (FolderResource) to;
    Resource existing = newParent.child(name);
    if (existing != null)
      throw new ConflictException();
    try {
      // avoid copying the data, just copy the ContentPointer
      newParent.createNew(name, file.getContentPointer(), file
          .getContentType());
    } catch (IOException e) {
      e.printStackTrace();
      throw new ConflictException(this);
    }

  }

}
TOP

Related Classes of v7db.files.milton.FileResource

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.