Skip to content

Commit 4c97789

Browse files
author
kinyelo
committed
Added webdav stubs code.
1 parent 3dcba1e commit 4c97789

24 files changed

+788
-7
lines changed

api/pom.xml

+19
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@
122122
<artifactId>commons-digester</artifactId>
123123
<version>1.8.1</version>
124124
</dependency>
125+
<dependency>
126+
<groupId>commons-codec</groupId>
127+
<artifactId>commons-codec</artifactId>
128+
<version>1.4</version>
129+
</dependency>
125130

126131
<!-- sitemesh -->
127132

@@ -207,6 +212,20 @@
207212
<version>1.6</version>
208213
</dependency>
209214

215+
<!-- Milton WebDAV -->
216+
217+
<dependency>
218+
<groupId>com.ettrema</groupId>
219+
<artifactId>milton-api</artifactId>
220+
<version>1.5.1</version>
221+
</dependency>
222+
223+
<dependency>
224+
<groupId>com.ettrema</groupId>
225+
<artifactId>milton-servlet</artifactId>
226+
<version>1.5.1</version>
227+
</dependency>
228+
210229
</dependencies>
211230

212231
<properties>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/**
2+
* Vosao CMS. Simple CMS for Google App Engine.
3+
* Copyright (C) 2009 Vosao development team
4+
*
5+
* This program is free software; you can redistribute it and/or
6+
* modify it under the terms of the GNU General Public License
7+
* as published by the Free Software Foundation; either version 2
8+
* of the License, or (at your option) any later version.
9+
*
10+
* This program 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
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program; if not, write to the Free Software
17+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18+
*
19+
20+
*/
21+
22+
package org.vosao.common;
23+
24+
import org.vosao.business.Business;
25+
import org.vosao.dao.Dao;
26+
import org.vosao.global.SystemService;
27+
28+
public class AbstractServiceBean {
29+
30+
private Business business;
31+
32+
public AbstractServiceBean() {
33+
}
34+
35+
public AbstractServiceBean(Business aBusiness) {
36+
business = aBusiness;
37+
}
38+
39+
public Business getBusiness() {
40+
return business;
41+
}
42+
43+
public void setBusiness(Business bean) {
44+
business = bean;
45+
}
46+
47+
public Dao getDao() {
48+
return getBusiness().getDao();
49+
}
50+
51+
public SystemService getSystemService() {
52+
return getBusiness().getSystemService();
53+
}
54+
}

kernel/pom.xml

+19
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,11 @@
170170
<artifactId>commons-digester</artifactId>
171171
<version>1.8.1</version>
172172
</dependency>
173+
<dependency>
174+
<groupId>commons-codec</groupId>
175+
<artifactId>commons-codec</artifactId>
176+
<version>1.4</version>
177+
</dependency>
173178

174179
<!-- sitemesh -->
175180

@@ -255,6 +260,20 @@
255260
<version>1.6</version>
256261
</dependency>
257262

263+
<!-- Milton WebDAV -->
264+
265+
<dependency>
266+
<groupId>com.ettrema</groupId>
267+
<artifactId>milton-api</artifactId>
268+
<version>1.5.1</version>
269+
</dependency>
270+
271+
<dependency>
272+
<groupId>com.ettrema</groupId>
273+
<artifactId>milton-servlet</artifactId>
274+
<version>1.5.1</version>
275+
</dependency>
276+
258277
</dependencies>
259278

260279
<properties>

kernel/src/main/java/org/vosao/business/impl/FileBusinessImpl.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.apache.commons.logging.LogFactory;
3131
import org.vosao.business.FileBusiness;
3232
import org.vosao.business.FolderBusiness;
33+
import org.vosao.business.decorators.TreeItemDecorator;
3334
import org.vosao.entity.FileEntity;
3435
import org.vosao.entity.FolderEntity;
3536
import org.vosao.servlet.MimeType;
@@ -121,12 +122,13 @@ public FileEntity findFile(String filename) {
121122
try {
122123
String path = FolderUtil.getFilePath(filename);
123124
String name = FolderUtil.getFileName(filename);
124-
FolderEntity folder = getFolderBusiness().findFolderByPath(
125-
getFolderBusiness().getTree(), path).getEntity();
125+
TreeItemDecorator<FolderEntity> folder = getFolderBusiness()
126+
.findFolderByPath(getFolderBusiness().getTree(), path);
126127
if (folder == null) {
127128
return null;
128129
}
129-
return getDao().getFileDao().getByName(folder.getId(), name);
130+
return getDao().getFileDao().getByName(folder.getEntity().getId(),
131+
name);
130132
}
131133
catch (Exception e) {
132134
e.printStackTrace();

kernel/src/main/java/org/vosao/business/impl/ImportExportBusinessImpl.java

+11
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,17 @@ public void importZip(ZipInputStream in) throws IOException,
102102
List<String> result = new ArrayList<String>();
103103
ZipEntry entry;
104104
byte[] buffer = new byte[4096];
105+
boolean skipping = getDaoTaskAdapter().getCurrentFile() != null;
105106
while((entry = in.getNextEntry()) != null) {
107+
if (skipping) {
108+
if (entry.getName().equals(getDaoTaskAdapter().getCurrentFile())) {
109+
skipping = false;
110+
}
111+
else {
112+
continue;
113+
}
114+
}
115+
getDaoTaskAdapter().setCurrentFile(entry.getName());
106116
if (entry.isDirectory()) {
107117
getBusiness().getFolderBusiness().createFolder(
108118
"/" + entry.getName());
@@ -129,6 +139,7 @@ else if (themeExporter.isThemeContent(entry)) {
129139
entry, data.toByteArray()));
130140
}
131141
}
142+
getDaoTaskAdapter().reset();
132143
}
133144
clearResourcesCache(result);
134145
}

kernel/src/main/java/org/vosao/business/impl/imex/dao/DaoTaskAdapter.java

+6
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ public interface DaoTaskAdapter {
5050
void setStart(int value);
5151

5252
int getEnd();
53+
54+
void reset();
55+
56+
String getCurrentFile();
57+
58+
void setCurrentFile(String file);
5359

5460
void configSave(ConfigEntity entity) throws DaoTaskException;
5561

kernel/src/main/java/org/vosao/business/impl/imex/dao/DaoTaskAdapterImpl.java

+14
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public class DaoTaskAdapterImpl implements DaoTaskAdapter {
5454
private int current;
5555
private int start;
5656
private long startTime = 0;
57+
private String currentFile;
5758

5859
public Dao getDao() {
5960
return dao;
@@ -77,6 +78,11 @@ public int getEnd() {
7778
return current;
7879
}
7980

81+
public void reset() {
82+
current = 0;
83+
start = 0;
84+
}
85+
8086
private boolean isSkip() throws DaoTaskException {
8187
current++;
8288
if (System.currentTimeMillis() - startTime > 24000) {
@@ -375,5 +381,13 @@ public void pluginSave(PluginEntity entity) throws DaoTaskException {
375381
getDao().getPluginDao().save(entity);
376382
}
377383
}
384+
385+
public String getCurrentFile() {
386+
return currentFile;
387+
}
388+
389+
public void setCurrentFile(String currentFile) {
390+
this.currentFile = currentFile;
391+
}
378392

379393
}

kernel/src/main/java/org/vosao/servlet/FolderUtil.java

+8
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,12 @@ public static String getFileExt(final String path) {
105105
return path.substring(s + 1, path.length()).toLowerCase();
106106
}
107107

108+
public static String getParentPath(String path) {
109+
int i = path.lastIndexOf('/');
110+
if (i > 0) {
111+
return path.substring(0, i);
112+
}
113+
return null;
114+
}
115+
108116
}

kernel/src/main/java/org/vosao/servlet/ImportTaskServlet.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,10 @@ public void doImport(HttpServletRequest request, HttpServletResponse response)
6565
try {
6666
CurrentUser.setInstance(UserHelper.ADMIN);
6767
int start = Integer.valueOf(request.getParameter("start"));
68+
String currentFile = request.getParameter("currentFile");
6869
getDaoTaskAdapter().setStart(start);
69-
logger.info("Import " + filename + " " + start);
70+
getDaoTaskAdapter().setCurrentFile(currentFile);
71+
logger.info("Import " + filename + " " + start + " " + currentFile);
7072
FolderEntity folder = getBusiness().getFolderBusiness()
7173
.findFolderByPath(getBusiness().getFolderBusiness().getTree(),
7274
"/tmp").getEntity();
@@ -95,8 +97,10 @@ public void doImport(HttpServletRequest request, HttpServletResponse response)
9597
Queue queue = getSystemService().getQueue("import");
9698
queue.add(url(IMPORT_TASK_URL).param("start",
9799
String.valueOf(getDaoTaskAdapter().getEnd()))
98-
.param("filename", filename));
99-
logger.info("Added new import task " + getDaoTaskAdapter().getEnd());
100+
.param("filename", filename)
101+
.param("currentFile", getDaoTaskAdapter().getCurrentFile()));
102+
logger.info("Added new import task " + getDaoTaskAdapter().getEnd()
103+
+ " " + getDaoTaskAdapter().getCurrentFile());
100104
}
101105
catch(UploadException e) {
102106
logger.error(e.getMessage());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package org.vosao.servlet;
2+
3+
import java.io.IOException;
4+
5+
import javax.servlet.ServletConfig;
6+
import javax.servlet.ServletException;
7+
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpServletResponse;
9+
10+
import com.bradmcevoy.http.HttpManager;
11+
import com.bradmcevoy.http.Request;
12+
import com.bradmcevoy.http.Response;
13+
import com.bradmcevoy.http.ServletResponse;
14+
15+
public class WebdavServlet extends BaseSpringServlet {
16+
17+
ServletConfig config;
18+
HttpManager httpManager;
19+
20+
private static final ThreadLocal<HttpServletRequest> originalRequest =
21+
new ThreadLocal<HttpServletRequest>();
22+
private static final ThreadLocal<HttpServletResponse> originalResponse =
23+
new ThreadLocal<HttpServletResponse>();
24+
25+
public static HttpServletRequest request() {
26+
return originalRequest.get();
27+
}
28+
29+
public static HttpServletResponse response() {
30+
return originalResponse.get();
31+
}
32+
33+
public static void forward(String url) {
34+
try {
35+
request().getRequestDispatcher(url).forward(originalRequest.get(),
36+
originalResponse.get());
37+
} catch (IOException ex) {
38+
throw new RuntimeException(ex);
39+
} catch (ServletException ex) {
40+
throw new RuntimeException(ex);
41+
}
42+
}
43+
44+
public void init(ServletConfig config) throws ServletException {
45+
try {
46+
this.config = config;
47+
httpManager = (HttpManager) getSpringBean("milton.http.manager");
48+
} catch (Throwable ex) {
49+
logger.error("Exception starting milton servlet " + ex.getMessage());
50+
throw new RuntimeException(ex);
51+
}
52+
}
53+
54+
public void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws ServletException, IOException {
55+
HttpServletRequest req = (HttpServletRequest) servletRequest;
56+
HttpServletResponse resp = (HttpServletResponse) servletResponse;
57+
try {
58+
originalRequest.set(req);
59+
originalResponse.set(resp);
60+
Request request = new WebdavServletRequest(req);
61+
Response response = new ServletResponse(resp);
62+
httpManager.process(request, response);
63+
} finally {
64+
originalRequest.remove();
65+
originalResponse.remove();
66+
servletResponse.getOutputStream().flush();
67+
servletResponse.flushBuffer();
68+
}
69+
}
70+
71+
public String getServletInfo() {
72+
return "WebdavServlet";
73+
}
74+
75+
public ServletConfig getServletConfig() {
76+
return config;
77+
}
78+
79+
public void destroy() {
80+
81+
}
82+
}
83+
84+

0 commit comments

Comments
 (0)