Package v7db.files.milton

Source Code of v7db.files.milton.FolderResource

/**
* 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.util.ArrayList;
import java.util.List;

import v7db.files.mongodb.V7File;
import v7db.files.spi.ContentPointer;

import com.bradmcevoy.http.CollectionResource;
import com.bradmcevoy.http.CopyableResource;
import com.bradmcevoy.http.MakeCollectionableResource;
import com.bradmcevoy.http.PutableResource;
import com.bradmcevoy.http.Resource;
import com.bradmcevoy.http.exceptions.BadRequestException;
import com.bradmcevoy.http.exceptions.ConflictException;
import com.bradmcevoy.http.exceptions.NotAuthorizedException;

public class FolderResource extends FileResource implements CollectionResource,
    PutableResource, MakeCollectionableResource {

  FolderResource(String name, V7File file, ResourceFactory factory) {
    super(name, file, factory);
  }

  FolderResource(V7File file, ResourceFactory factory) {
    super(file, factory);
  }

  public List<? extends Resource> getChildren() {
    List<V7File> children = file.getChildren();
    List<FileResource> result = new ArrayList<FileResource>(children.size());
    for (V7File child : children) {
      if (child.hasContent())
        result.add(new FileResource(child, factory));
      else
        result.add(new FolderResource(child, factory));
    }
    return result;
  }

  public Resource createNew(String newName, InputStream inputStream,
      Long length, String contentType) throws IOException,
      ConflictException, NotAuthorizedException, BadRequestException {

    Resource existingChild = child(newName);
    if (existingChild == null) {

      V7File child = file.createChild(inputStream, newName, contentType);

      return new FileResource(child, factory);
    }
    if (existingChild instanceof FolderResource) {
      throw new ConflictException(existingChild,
          "already exists and is a folder");
    }

    if (length != null)
      ((FileResource) existingChild).file.setContent(inputStream, length,
          contentType);
    else
      ((FileResource) existingChild).file.setContent(inputStream,
          contentType);
    return existingChild;
  }

  Resource createNew(String newName, ContentPointer content,
      String contentType) throws IOException, ConflictException {
    Resource existingChild = child(newName);
    if (existingChild == null) {

      V7File child = file.createChild(content, newName, contentType);

      return new FileResource(child, factory);
    }
    if (existingChild instanceof FolderResource) {
      throw new ConflictException(existingChild,
          "already exists and is a folder");
    }

    ((FileResource) existingChild).file.setContent(content, contentType);
    return existingChild;
  }

  public CollectionResource createCollection(String newName)
      throws NotAuthorizedException, ConflictException,
      BadRequestException {
    V7File child;
    try {
      child = file.createChild((byte[]) null, newName, null);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    return new FolderResource(child, factory);
  }

  public Resource child(String childName) {
    V7File child = file.getChild(childName);
    if (child == null)
      return null;
    if (child.hasContent())
      return new FileResource(child, factory);
    return new FolderResource(child, factory);
  }

  @Override
  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();
    FolderResource copy = (FolderResource) newParent.createCollection(name);
    for (Resource child : getChildren()) {
      ((CopyableResource) child).copyTo(copy, child.getName());
    }
  }
}
TOP

Related Classes of v7db.files.milton.FolderResource

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.