- NEW: supprt IContentDeletable for folders
[polymap3:polymap3-core.git] / plugins / org.polymap.service.fs / src / org / polymap / service / fs / providers / FsFolder.java
1 /* 
2  * polymap.org
3  * Copyright 2012, Polymap GmbH. All rights reserved.
4  *
5  * This is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU Lesser General Public License as
7  * published by the Free Software Foundation; either version 2.1 of
8  * the License, or (at your option) any later version.
9  *
10  * This software is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  */
15 package org.polymap.service.fs.providers;
16
17 import java.util.Map;
18
19 import java.io.File;
20 import java.io.IOException;
21 import java.io.InputStream;
22
23 import com.bradmcevoy.http.FileItem;
24
25 import org.eclipse.core.runtime.IPath;
26
27 import org.polymap.service.fs.spi.BadRequestException;
28 import org.polymap.service.fs.spi.DefaultContentFolder;
29 import org.polymap.service.fs.spi.IContentDeletable;
30 import org.polymap.service.fs.spi.IContentFile;
31 import org.polymap.service.fs.spi.IContentFolder;
32 import org.polymap.service.fs.spi.IContentMoveable;
33 import org.polymap.service.fs.spi.IContentProvider;
34 import org.polymap.service.fs.spi.IContentPutable;
35 import org.polymap.service.fs.spi.IContentWriteable;
36 import org.polymap.service.fs.spi.IMakeFolder;
37 import org.polymap.service.fs.spi.NotAuthorizedException;
38
39 /**
40  * 
41  * <p/>
42  * Impl.: Implements IContentWriteable to allow upload via browser.
43  * 
44  * @author <a href="http://www.polymap.de">Falko Bräutigam</a>
45  */
46 class FsFolder
47         extends DefaultContentFolder
48         implements IContentPutable, IContentWriteable, IMakeFolder, IContentMoveable, IContentDeletable {
49
50     public FsFolder( String name, IPath parentPath, IContentProvider provider, File dir ) {
51         super( name, parentPath, provider, dir );
52     }
53
54     public FsContentProvider getProvider() {
55         return (FsContentProvider)super.getProvider();
56     }
57
58     public File getDir() {
59         return (File)super.getSource();
60     }
61     
62
63 //    public String getDescription( String contentType ) {
64 //        // FIXME hard coded servlet path
65 //        String basePath = FilenameUtils.normalizeNoEndSeparator( getPath().toString() );
66 //        String path = "/webdav" + basePath; // + "/" + r.getName();
67 //
68 //        return "<b>Dieses Verzeichnis bietet eine Schittstelle zum Filesystem des POLYMAP3-Servers.</b>" +
69 //            "<p/>" +
70 //            "<form action=\"" + path + "\"" +
71 //            "  enctype=\"multipart/form-data\" method=\"post\">" +
72 //            "  <p>" +
73 //            "    Waehlen Sie eine Datei fuer den Import (EDBS, *.zip):<br/>" +
74 //            "    <input type=\"file\" name=\"datafile\" size=\"40\">" +
75 //            "  </p>" +
76 //            "  <div>" +
77 //            "    <input type=\"submit\" value=\"Senden\">" +
78 //            "  </div>" +
79 //            "</form>";
80 //    }
81
82     
83     public IContentFile createNew( String newName, InputStream in, Long length, String contentType )
84     throws IOException, NotAuthorizedException, BadRequestException {
85         return getProvider().createNew( this, newName, in );
86     }
87
88
89     public IContentFolder createFolder( String newName ) {
90         return getProvider().createFolder( this, newName );
91     }
92
93     
94     public void replaceContent( InputStream in, Long length )
95     throws IOException, BadRequestException, NotAuthorizedException {
96         throw new RuntimeException( "not yet implemented." );
97     }
98
99
100     public void moveTo( IPath dest, String newName )
101     throws IOException, BadRequestException {
102         getProvider().moveTo( this, dest, newName );
103     }
104
105     
106     @Override
107     public void delete() throws BadRequestException, NotAuthorizedException {
108         try {
109             getProvider().delete( this );
110         }
111         catch (IOException e) {
112             throw new RuntimeException( e );
113         }
114     }
115
116     
117     /**
118      * Upload a new file via the browser interface created in
119      * {@link #getDescription(String)}.
120      */
121     public String processForm( Map<String,String> params, Map<String,FileItem> files )
122     throws IOException, NotAuthorizedException, BadRequestException {
123         
124         for (FileItem item : files.values()) {
125             createNew( item.getName(), item.getInputStream(), item.getSize(), "text/plain" );
126         }
127         return null;
128     }
129     
130 }