Skip to content

Commit bafc440

Browse files
committed
2.2
1 parent 737691d commit bafc440

39 files changed

+1781
-1074
lines changed

deltav/pom.xml

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66

7-
<groupId>com.ithit.webdav.server.samples</groupId>
7+
<groupId>com.ithit.webdav.samples</groupId>
88
<artifactId>deltav</artifactId>
9-
<version>2.1.621</version>
9+
<version>2.2</version>
1010
<packaging>war</packaging>
1111

1212
<properties>
@@ -86,26 +86,23 @@
8686
</exclusions>
8787
</dependency>
8888
<dependency>
89-
<groupId>com.ithit.webdav.server</groupId>
90-
<artifactId>WebDavEngine</artifactId>
91-
<version>2.1.621</version>
89+
<groupId>com.ithit.webdav</groupId>
90+
<artifactId>webdav-server</artifactId>
91+
<version>2.2</version>
9292
</dependency>
9393

94+
<dependency>
95+
<groupId>javax.websocket</groupId>
96+
<artifactId>javax.websocket-api</artifactId>
97+
<version>1.1</version>
98+
</dependency>
9499
</dependencies>
95100

96101
<repositories>
97102
<repository>
98103
<id>nuxeo</id>
99104
<url>https://maven.nuxeo.org/nexus/content/groups/public</url>
100105
</repository>
101-
<repository>
102-
<id>webdavengine</id>
103-
<url>https://raw.github.com/ithit/WebDAVServerSamplesJava/mvn-repo/</url>
104-
<snapshots>
105-
<enabled>true</enabled>
106-
<updatePolicy>always</updatePolicy>
107-
</snapshots>
108-
</repository>
109106
</repositories>
110107

111108
<build>
@@ -131,7 +128,7 @@
131128
<goal>copy-resources</goal>
132129
</goals>
133130
<configuration>
134-
<outputDirectory>${project.build.directory}/deltav-2.1.621/META-INF</outputDirectory>
131+
<outputDirectory>${project.build.directory}/deltav-2.2/META-INF</outputDirectory>
135132
<overwrite>true</overwrite>
136133
<resources>
137134
<resource>
@@ -210,7 +207,7 @@
210207
<server>filesystem</server>
211208
<port>11021</port>
212209
<path>/</path>
213-
<warSourceDirectory>target/deltav-2.1.621</warSourceDirectory>
210+
<warSourceDirectory>target/deltav-2.2</warSourceDirectory>
214211
</configuration>
215212
</plugin>
216213
<plugin>

deltav/src/main/java/com/ithit/webdav/samples/deltavservlet/CustomFolderGetHandler.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.nio.file.Files;
1414
import java.nio.file.Path;
1515
import java.nio.file.Paths;
16-
import java.util.Properties;
1716

1817
/**
1918
* This handler processes GET requests to folders returning custom HTML page.
@@ -22,18 +21,18 @@ public class CustomFolderGetHandler implements MethodHandler {
2221

2322
private MethodHandler previousHandler;
2423
private String charset;
24+
private String version;
2525
private String pathToHTML = "WEB-INF/MyCustomHandlerPage.html";
2626

27-
public CustomFolderGetHandler(String charset) {
27+
public CustomFolderGetHandler(String charset, String version) {
2828
this.charset = charset;
29+
this.version = version;
2930
}
3031

3132
public void processRequest(HttpServletRequest request, HttpServletResponse response, HierarchyItem item)
3233
throws DavException, IOException {
3334

3435
if (item instanceof Folder) {
35-
Properties properties = new Properties();
36-
properties.load(request.getSession().getServletContext().getResourceAsStream("/WEB-INF/web.properties"));
3736
response.setCharacterEncoding(charset);
3837
response.setContentType("text/html");
3938
PrintStream stream = new PrintStream(response.getOutputStream(), true, charset);
@@ -50,7 +49,7 @@ public void processRequest(HttpServletRequest request, HttpServletResponse respo
5049
}
5150
String versionNumber = "<%version%>";
5251
if (line.contains(versionNumber)) {
53-
line = line.replace(versionNumber, properties.getProperty("project.version"));
52+
line = line.replace(versionNumber, version);
5453
}
5554
stream.println(line);
5655
}

deltav/src/main/java/com/ithit/webdav/samples/deltavservlet/DataAccess.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,10 @@ long getTotalBytes() {
107107
*/
108108
void closeConnection() {
109109
try {
110-
if (currentConnection != null)
110+
if (currentConnection != null) {
111111
currentConnection.close();
112+
currentConnection = null;
113+
}
112114
} catch (SQLException e) {
113115
engine.getLogger().logError("Failed to rollback connection", e);
114116
}

deltav/src/main/java/com/ithit/webdav/samples/deltavservlet/FileImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public void delete() throws LockedException, MultistatusException, ServerExcepti
112112
ensureHasToken();
113113

114114
deleteThisItem();
115+
getEngine().notifyRefresh(getParent(getPath()));
115116
try {
116117
getEngine().getIndexer().deleteIndex(this);
117118
} catch (Exception ex){
@@ -214,6 +215,7 @@ public void copyTo(Folder folder, String destName, boolean deep)
214215
} else {
215216
copy = copyThisItem(destFolder, null, destName);
216217
}
218+
getEngine().notifyRefresh(folder.getPath());
217219
try {
218220
if (copy != null) {
219221
newID = copy.getId();
@@ -344,7 +346,7 @@ public long write(InputStream content, String contentType, long startIndex, long
344346
if (os != null)
345347
os.close();
346348
}
347-
349+
getEngine().notifyRefresh(getParent(getPath()));
348350
try {
349351
getEngine().getIndexer().indexFile(getName(), getId(), getId(), this);
350352
} catch (Exception ex){
@@ -382,6 +384,8 @@ public void moveTo(Folder folder, String destName)
382384
} else {
383385
moveThisItem(destFolder, destName, parent);
384386
}
387+
getEngine().notifyRefresh(getParent(getPath()));
388+
getEngine().notifyRefresh(folder.getPath());
385389
try {
386390
getEngine().getIndexer().indexFile(destName, getId(), getId(), this);
387391
} catch (Exception ex){

deltav/src/main/java/com/ithit/webdav/samples/deltavservlet/FolderImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ private HierarchyItemImpl createChild(String name, byte itemType) throws ServerE
144144
item = new FileImpl(newId, getId(), name, getPath() + name,
145145
now, now, now, 0, false, false, false, false, getEngine().getAutoVersionMode(), getEngine());
146146
}
147+
getEngine().notifyRefresh(getPath());
147148
return item;
148149

149150
}
@@ -235,6 +236,8 @@ public void moveTo(Folder folder, String destName)
235236
}
236237
// delete this folder
237238
deleteThisItem();
239+
getEngine().notifyDelete(getPath());
240+
getEngine().notifyRefresh(folder.getPath());
238241
}
239242

240243
@Override
@@ -282,6 +285,7 @@ public void copyTo(Folder folder, String destName, boolean deep)
282285
}
283286
}
284287

288+
getEngine().notifyRefresh(folder.getPath());
285289
if (mr.getResponses().length > 0)
286290
throw mr;
287291

@@ -323,6 +327,7 @@ public void delete() throws ServerException, LockedException, MultistatusExcepti
323327
}
324328
deleteThisItem();
325329
}
330+
getEngine().notifyDelete(getPath());
326331
}
327332

328333
/**
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.ithit.webdav.samples.deltavservlet;
2+
3+
import javax.servlet.http.HttpSession;
4+
import javax.websocket.HandshakeResponse;
5+
import javax.websocket.server.HandshakeRequest;
6+
import javax.websocket.server.ServerEndpointConfig;
7+
8+
public class GetHttpSessionConfigurator extends ServerEndpointConfig.Configurator
9+
{
10+
@Override
11+
public void modifyHandshake(ServerEndpointConfig config,
12+
HandshakeRequest request,
13+
HandshakeResponse response) {
14+
HttpSession httpSession = (HttpSession)request.getHttpSession();
15+
config.getUserProperties().put(HttpSession.class.getName(),httpSession);
16+
}
17+
}

deltav/src/main/java/com/ithit/webdav/samples/deltavservlet/HierarchyItemImpl.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ public void updateProperties(Property[] setProps, Property[] delProps) throws
282282
}
283283

284284
updateModified();
285+
getEngine().notifyRefresh(getParent(getPath()));
285286
}
286287

287288
/**
@@ -539,6 +540,7 @@ public LockResult lock(boolean shared, boolean deep, long timeout, String owner)
539540
getDataAccess().executeUpdate("INSERT INTO Locks (ItemID,Token,Shared,Deep,Expires,Owner)"
540541
+ " VALUES(?, ?, ?, ?, ?, ?)",
541542
getId(), token, shared, deep, expires, owner);
543+
getEngine().notifyRefresh(getParent(getPath()));
542544
return new LockResult(token, timeout);
543545
}
544546

@@ -569,7 +571,7 @@ public RefreshLockResult refreshLock(String token, long timeout) throws Precondi
569571

570572
getDataAccess().executeUpdate("UPDATE Locks SET Expires = ? WHERE Token = ?",
571573
expires, token);
572-
574+
getEngine().notifyRefresh(getParent(getPath()));
573575
return new RefreshLockResult(lockInfo.isShared(), lockInfo.isDeep(),
574576
timeout, lockInfo.getOwner());
575577
}
@@ -597,8 +599,8 @@ public void unlock(String lockToken) throws PreconditionFailedException, ServerE
597599
if (!found)
598600
throw new PreconditionFailedException();
599601

600-
601602
getDataAccess().executeUpdate("DELETE FROM Locks WHERE Token = ?", lockToken);
603+
getEngine().notifyRefresh(getParent(getPath()));
602604
}
603605

604606
/**
@@ -777,4 +779,15 @@ <T> void setDbField(String columnName, T value) throws ServerException {
777779
BigDecimal getSerialNumber() throws ServerException {
778780
return getDataAccess().executeScalar("SELECT SerialNumber FROM Repository WHERE ID = ?", id);
779781
}
782+
783+
String getParent(String path) {
784+
String parentPath = StringUtil.trimEnd(StringUtil.trimStart(path, "/"), "/");
785+
int index = parentPath.lastIndexOf("/");
786+
if (index > -1) {
787+
parentPath = parentPath.substring(0, index);
788+
} else {
789+
parentPath = "";
790+
}
791+
return parentPath;
792+
}
780793
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.ithit.webdav.samples.deltavservlet;
2+
3+
import javax.websocket.EncodeException;
4+
import javax.websocket.Encoder;
5+
import javax.websocket.EndpointConfig;
6+
7+
public class NotificationEncoder implements Encoder.Text<WebSocketServer.Notification> {
8+
9+
@Override
10+
public void init(EndpointConfig config) {
11+
}
12+
13+
@Override
14+
public void destroy() {
15+
}
16+
17+
@Override
18+
public String encode(WebSocketServer.Notification notification) throws EncodeException {
19+
return "{" +
20+
"\"folderPath\" : \"" + notification.getFolderPath() + "\" ," +
21+
"\"eventType\" : \"" + notification.getEventType() + "\"" +
22+
"}";
23+
}
24+
}

deltav/src/main/java/com/ithit/webdav/samples/deltavservlet/WebDavEngine.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.ithit.webdav.server.Logger;
66
import com.ithit.webdav.server.deltav.AutoVersion;
77
import com.ithit.webdav.server.exceptions.ServerException;
8+
import com.ithit.webdav.server.util.StringUtil;
89
import org.apache.lucene.analysis.standard.StandardAnalyzer;
910
import org.apache.lucene.index.IndexWriter;
1011
import org.apache.lucene.index.IndexWriterConfig;
@@ -29,6 +30,7 @@
2930
*/
3031
public class WebDavEngine extends Engine {
3132

33+
private WebSocketServer webSocketServer;
3234
private HttpServletRequest request;
3335
private final Logger logger;
3436
private final String license;
@@ -217,6 +219,10 @@ Searcher getSearcher() {
217219
return searcher;
218220
}
219221

222+
void setWebSocketServer(WebSocketServer webSocketServer) {
223+
this.webSocketServer = webSocketServer;
224+
}
225+
220226
/**
221227
* Build initial index of root folder.
222228
* @param indexFolder Index folder.
@@ -249,4 +255,20 @@ void indexRootFolder(String indexFolder, Integer interval) {
249255
private List<HierarchyItemImpl> getFilesToIndex() {
250256
return dataAccess.getFiles();
251257
}
258+
259+
void notifyRefresh(String folder) {
260+
folder = StringUtil.trimEnd(StringUtil.trimStart(folder, "/"), "/");
261+
notify("refresh", folder);
262+
}
263+
264+
void notifyDelete(String folder) {
265+
folder = StringUtil.trimEnd(StringUtil.trimStart(folder, "/"), "/");
266+
notify("delete", folder);
267+
}
268+
269+
private void notify(String type, String folder) {
270+
if (webSocketServer != null) {
271+
webSocketServer.send(type, folder);
272+
}
273+
}
252274
}

deltav/src/main/java/com/ithit/webdav/samples/deltavservlet/WebDavServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ public void init(ServletConfig servletConfig) throws ServletException {
9999
servletContext = servletConfig.getServletContext().getContextPath();
100100
license = getContents(licenseFile);
101101
engine = new WebDavEngine(logger, license);
102-
CustomFolderGetHandler handler = new CustomFolderGetHandler(engine.getResponseCharacterEncoding());
103-
CustomFolderGetHandler handlerHead = new CustomFolderGetHandler(engine.getResponseCharacterEncoding());
102+
CustomFolderGetHandler handler = new CustomFolderGetHandler(engine.getResponseCharacterEncoding(), engine.getVersion());
103+
CustomFolderGetHandler handlerHead = new CustomFolderGetHandler(engine.getResponseCharacterEncoding(), engine.getVersion());
104104
handler.setPreviousHandler(engine.registerMethodHandler("GET", handler));
105105
handlerHead.setPreviousHandler(engine.registerMethodHandler("HEAD", handlerHead));
106106
DataAccess dataAccess = new DataAccess(engine);

0 commit comments

Comments
 (0)