Java tutorial
/* * 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; } }