diff --git a/pom.xml b/pom.xml
index 2b0c6f4..b1796e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,9 @@
TestSpringWebDav
17
+ UTF-8
+
org.springframework.boot
@@ -41,6 +43,14 @@
reactor-test
test
+
+
+
+ io.milton
+ milton-server-ce
+ 4.0.1.1802
+
+
diff --git a/src/main/java/ru/ldeloff/testspringwebdav/config/MiltonConfig.java b/src/main/java/ru/ldeloff/testspringwebdav/config/MiltonConfig.java
new file mode 100644
index 0000000..773e3c1
--- /dev/null
+++ b/src/main/java/ru/ldeloff/testspringwebdav/config/MiltonConfig.java
@@ -0,0 +1,20 @@
+package ru.ldeloff.testspringwebdav.config;
+
+import io.milton.http.fs.NullSecurityManager;
+import io.milton.servlet.DefaultMiltonConfigurator;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MiltonConfig extends DefaultMiltonConfigurator {
+ private final NullSecurityManager securityManager;
+
+ public MiltonConfig() {
+ this.securityManager = new NullSecurityManager();
+ }
+
+ @Override
+ protected void build() {
+ builder.setSecurityManager(securityManager);
+ super.build();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/ru/ldeloff/testspringwebdav/controller/HelloWorldController.java b/src/main/java/ru/ldeloff/testspringwebdav/controller/HelloWorldController.java
new file mode 100644
index 0000000..9373c5d
--- /dev/null
+++ b/src/main/java/ru/ldeloff/testspringwebdav/controller/HelloWorldController.java
@@ -0,0 +1,94 @@
+package ru.ldeloff.testspringwebdav.controller;
+
+import io.milton.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.LoggerFactory;
+import ru.ldeloff.testspringwebdav.model.WebDavFile;
+import ru.ldeloff.testspringwebdav.model.WebDavFolder;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.*;
+import java.util.logging.Logger;
+
+@Slf4j
+@ResourceController
+public class HelloWorldController {
+
+ private static HashMap webDavFiles = new HashMap<>();
+
+ static {
+ try {
+ byte[] bytes = "Hello World".getBytes("UTF-8");
+ webDavFiles.put("file1.txt", new WebDavFile("file1.txt", bytes));
+ webDavFiles.put("file2.txt", new WebDavFile("file2.txt", bytes));
+ } catch (UnsupportedEncodingException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
+
+ @Root
+ public HelloWorldController getRoot() {
+ return this;
+ }
+
+ @ChildrenOf
+ public List getWebDavFolders(HelloWorldController root) {
+ List webDavFolders = new ArrayList();
+ webDavFolders.add(new WebDavFolder("folder1"));
+ webDavFolders.add(new WebDavFolder("folder2"));
+ return webDavFolders;
+ }
+
+ @ChildrenOf
+ public Collection getWebDavFiles(WebDavFolder webDavFolder) {
+ return webDavFiles.values();
+ }
+
+ @Get
+ public InputStream getChild(WebDavFile webDavFile) {
+ return new ByteArrayInputStream(webDavFiles.get(webDavFile.getName()).getBytes());
+ }
+
+ @PutChild
+ public void putChild(WebDavFile parent, String name, byte[] bytes) {
+ if(name!=null) {
+ webDavFiles.put(name, new WebDavFile(name, bytes));
+ } else {
+ parent.setBytes(bytes);
+ webDavFiles.put(parent.getName(), parent);
+ }
+ }
+
+ @Delete
+ public void delete(WebDavFile webDavFile) {
+ webDavFiles.remove(webDavFile.getName());
+ }
+
+ @Name
+ public String getWebDavFile(WebDavFile webDavFile) {
+ return webDavFile.getName();
+ }
+
+ @DisplayName
+ public String getDisplayName(WebDavFile webDavFile) {
+ return webDavFile.getName();
+ }
+
+ @UniqueId
+ public String getUniqueId(WebDavFile webDavFile) {
+ return webDavFile.getName();
+ }
+
+ @ModifiedDate
+ public Date getModifiedDate(WebDavFile webDavFile) {
+ return webDavFile.getModifiedDate();
+ }
+
+ @CreatedDate
+ public Date getCreatedDate(WebDavFile webDavFile) {
+ return webDavFile.getCreatedDate();
+ }
+
+}
diff --git a/src/main/java/ru/ldeloff/testspringwebdav/model/WebDavFile.java b/src/main/java/ru/ldeloff/testspringwebdav/model/WebDavFile.java
new file mode 100644
index 0000000..be06246
--- /dev/null
+++ b/src/main/java/ru/ldeloff/testspringwebdav/model/WebDavFile.java
@@ -0,0 +1,54 @@
+package ru.ldeloff.testspringwebdav.model;
+
+import io.milton.annotations.*;
+
+import java.util.Date;
+
+public class WebDavFile {
+ private String name;
+ private Date createdDate;
+ private Date modifiedDate;
+ private Long contentLength;
+ private byte[] bytes;
+
+ public WebDavFile(String name, byte[] bytes) {
+ this.name = name;
+ this.bytes = bytes;
+ this.createdDate = new Date();
+ this.modifiedDate= new Date();
+ this.contentLength = (long) bytes.length;
+ }
+
+ @Name
+ public String getName() {
+ return name;
+ }
+
+ @UniqueId
+ public String getUniqueId() {
+ return name;
+ }
+
+ @ModifiedDate
+ public Date getModifiedDate() {
+ return modifiedDate;
+ }
+
+ @CreatedDate
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+
+ @ContentLength
+ public Long getContentLength() {
+ return (long) bytes.length;
+ }
+
+ public byte[] getBytes() {
+ return bytes;
+ }
+
+ public void setBytes(byte[] bytes) {
+ this.bytes = bytes;
+ }
+}
diff --git a/src/main/java/ru/ldeloff/testspringwebdav/model/WebDavFolder.java b/src/main/java/ru/ldeloff/testspringwebdav/model/WebDavFolder.java
new file mode 100644
index 0000000..ec05a60
--- /dev/null
+++ b/src/main/java/ru/ldeloff/testspringwebdav/model/WebDavFolder.java
@@ -0,0 +1,31 @@
+package ru.ldeloff.testspringwebdav.model;
+
+import io.milton.annotations.CreatedDate;
+import io.milton.annotations.Name;
+import io.milton.annotations.UniqueId;
+
+import java.util.Date;
+
+public class WebDavFolder {
+ private String name;
+ private Date createdDate;
+
+ public WebDavFolder(String name) {
+ this.name = name;
+ }
+
+ @Name
+ public String getName() {
+ return name;
+ }
+
+ @UniqueId
+ public String getUniqueId() {
+ return name;
+ }
+
+ @CreatedDate
+ public Date getCreatedDate() {
+ return createdDate;
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 8b13789..17ed050 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,10 @@
+# ==============================================================
+# = Server Settings
+# ==============================================================
+server.port=8084
+# ==============================================================
+# = Log Level
+# ==============================================================
+logging.level.root=INFO
+logging.level.org.springframework=WARN