com.concursive.connect.web.webdav.resources.WebdavFolderResource.java Source code

Java tutorial

Introduction

Here is the source code for com.concursive.connect.web.webdav.resources.WebdavFolderResource.java

Source

/*
 * ConcourseConnect
 * Copyright 2009 Concursive Corporation
 * http://www.concursive.com
 *
 * This file is part of ConcourseConnect, an open source social business
 * software and community platform.
 *
 * Concursive ConcourseConnect 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, version 3 of the License.
 *
 * Under the terms of the GNU Affero General Public License you must release the
 * complete source code for any application that uses any part of ConcourseConnect
 * (system header files and libraries used by the operating system are excluded).
 * These terms must be included in any work that has ConcourseConnect components.
 * If you are developing and distributing open source applications under the
 * GNU Affero General Public License, then you are free to use ConcourseConnect
 * under the GNU Affero General Public License.
 *
 * If you are deploying a web site in which users interact with any portion of
 * ConcourseConnect over a network, the complete source code changes must be made
 * available.  For example, include a link to the source archive directly from
 * your web site.
 *
 * For OEMs, ISVs, SIs and VARs who distribute ConcourseConnect with their
 * products, and do not license and distribute their source code under the GNU
 * Affero General Public License, Concursive provides a flexible commercial
 * license.
 *
 * To anyone in doubt, we recommend the commercial license. Our commercial license
 * is competitively priced and will eliminate any confusion about how
 * ConcourseConnect can be used and distributed.
 *
 * ConcourseConnect 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 ConcourseConnect.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Attribution Notice: ConcourseConnect is an Original Work of software created
 * by Concursive Corporation
 */

package com.concursive.connect.web.webdav.resources;

import com.bradmcevoy.http.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Description
 *
 * @author matt rajkowski
 * @created Dec 6, 2008 12:12:11 AM
 */
public class WebdavFolderResource extends WebdavResource implements PutableResource, MakeCollectionableResource {

    private static final Log LOG = LogFactory.getLog(WebdavResource.class);

    ArrayList<WebdavResource> children = new ArrayList<WebdavResource>();

    public WebdavFolderResource(WebdavFolderResource parent, String name) {
        super(parent, name);
    }

    @Override
    public Long getContentLength() {
        return null;
    }

    public String getContentType() {
        return null;
    }

    @Override
    public String checkRedirect(Request request) {
        return null;
    }

    public List<? extends WebdavResource> getChildren() {
        return children;
    }

    @Override
    protected void sendContentMiddle(final PrintWriter printer) {
        super.sendContentMiddle(printer);
        printer.print("file upload field");
        printer.print("<form method='POST' enctype='multipart/form-data' action='" + this.getHref() + "'>");
        printer.print("<input type='file' name='file1' /><input type='submit'>");
        printer.print("</form>");
    }

    @Override
    protected void sendContentMenu(final PrintWriter printer) {
        printer.print("<ul>");
        for (WebdavResource r : children) {
            printer.print("<li><a href='" + r.getHref() + "'>" + r.getName() + "</a>");
        }
        printer.print("</ul>");
    }

    @Override
    public Long getMaxAgeSeconds() {
        return (long) 10;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        WebdavFolderResource r = new WebdavFolderResource(parent, name);
        for (WebdavResource child : children) {
            child.clone(r);
        }
        return r;
    }

    private ByteArrayOutputStream readStream(final InputStream in) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            bos.write(buf, 0, len);
        }
        return bos;
    }

    public CollectionResource createCollection(String newName) {
        WebdavFolderResource r = new WebdavFolderResource(this, newName);
        return r;
    }

    @Override
    public String processForm(Map<String, String> params, Map<String, com.bradmcevoy.http.FileItem> files) {
        super.processForm(params, files);
        Object file = params.get("file1");
        if (file != null) {
            FileItem fitem = (FileItem) file;
            LOG.debug("found file: " + fitem.getName());
            ByteArrayOutputStream bos;
            try {
                bos = readStream(fitem.getInputStream());
            } catch (IOException ex) {
                LOG.error("error reading stream: ", ex);
                return null;
            }
            new WebdavBinaryResource(this, fitem.getName(), bos.toByteArray());
        }
        return null;
    }

    public Resource createNew(String newName, InputStream inputStream, Long length, String contentType)
            throws IOException {
        ByteArrayOutputStream bos = readStream(inputStream);
        WebdavResource r = new WebdavBinaryResource(this, newName, bos.toByteArray());
        return r;
    }

    public Resource child(String childName) {
        for (Resource r : getChildren()) {
            if (r.getName().equals(childName))
                return r;
        }
        return null;
    }

}