diff --git a/src/com/geekhub/hw8/CreateFileServlet.java b/src/com/geekhub/hw8/CreateFileServlet.java
index 940501f..4376b4f 100644
--- a/src/com/geekhub/hw8/CreateFileServlet.java
+++ b/src/com/geekhub/hw8/CreateFileServlet.java
@@ -1,17 +1,34 @@
package com.geekhub.hw8;
+import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.nio.file.FileAlreadyExistsException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
@WebServlet("/file/create")
public class CreateFileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- super.doGet(req, resp);
+ String newFile = req.getParameter("path") + req.getParameter("filename");
+ Path newPath = Paths.get(newFile);
+ String message = "";
+ try {
+ Files.createFile(newPath);
+ } catch (FileAlreadyExistsException x) {
+ message = "error: file already exists";
+ } catch (IOException x) {
+ message = "error: "+x;
+ }
+ RequestDispatcher rd = req.getRequestDispatcher("/dir/view?dir="+newPath.getParent() +
+ "&message="+message);
+ rd.forward(req,resp);
}
}
diff --git a/src/com/geekhub/hw8/RemoveFileServlet.java b/src/com/geekhub/hw8/RemoveFileServlet.java
index a6322e6..d95d059 100644
--- a/src/com/geekhub/hw8/RemoveFileServlet.java
+++ b/src/com/geekhub/hw8/RemoveFileServlet.java
@@ -1,17 +1,35 @@
package com.geekhub.hw8;
+import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.nio.file.*;
@WebServlet("/file/remove")
public class RemoveFileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- super.doGet(req, resp);
+ String fileName = req.getParameter("filename");
+ if (null!=fileName && !fileName.isEmpty()) {
+ Path removeFile = Paths.get(fileName);
+ String message = "";
+ try {
+ Files.delete(removeFile);
+ } catch (NoSuchFileException e) {
+ message = "error: no such file";
+ } catch (DirectoryNotEmptyException e) {
+ message = "error: directory not empty";
+ } catch (IOException e) {
+ message = "error: file permission problems";
+ }
+ RequestDispatcher rd = req.getRequestDispatcher("/dir/view?dir="+removeFile.getParent() +
+ "&message="+message);
+ rd.forward(req,resp);
+ }
}
}
diff --git a/src/com/geekhub/hw8/ViewDirectoryServlet.java b/src/com/geekhub/hw8/ViewDirectoryServlet.java
index d915e71..8fc3f46 100644
--- a/src/com/geekhub/hw8/ViewDirectoryServlet.java
+++ b/src/com/geekhub/hw8/ViewDirectoryServlet.java
@@ -1,5 +1,6 @@
package com.geekhub.hw8;
+import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
@@ -8,35 +9,104 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
@WebServlet(value = "/dir/view", initParams = {
- @WebInitParam(name = "root", value = "D:\\")
+ @WebInitParam(name = "root", value = "D:\\")
})
public class ViewDirectoryServlet extends HttpServlet {
private static Path ROOT_PATH;
+ private static Path NEW_PATH;
@Override
public void init(ServletConfig config) throws ServletException {
ROOT_PATH = Paths.get(config.getInitParameter("root"));
+ NEW_PATH = ROOT_PATH;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
StringBuilder sb = new StringBuilder();
+
sb.append("");
- //TODO: Implement directory listing here
+ String dir = req.getParameter("dir") != null ? req.getParameter("dir") : "";
+ if (!dir.isEmpty()) {
+ NEW_PATH = Paths.get(dir);
+ ROOT_PATH = NEW_PATH.getParent() != null ? NEW_PATH.getParent() : NEW_PATH;
+ }
+
+ if (null != NEW_PATH.getParent()) {
+ appendLink(sb, "...", NEW_PATH.getParent());
+ sb.append("
");
+ }
+
+ if (!Files.isDirectory(NEW_PATH)) {
+ sb.append("");
+ RequestDispatcher rd = req.getRequestDispatcher("/file/view?filename=" + NEW_PATH);
+ rd.forward(req, resp);
+ } else {
+ getSortedDirAndFiles(NEW_PATH).stream()
+ .forEach(path -> {
+ appendLink(sb, path.getFileName().toString(), path);
+ appendDeleteLink(sb, path);
+ sb.append("
");
+ });
+ }
+
+ addMessageIfExist(sb, req);
+ addFileCreationForm(sb);
sb.append("