From 245da57a6e14251c7c8f36ed089d69e592463872 Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Tue, 25 Jan 2022 07:32:26 +0000 Subject: [PATCH] Initial commit --- .classpath | 27 +++++ .gitignore | 1 + .project | 37 +++++++ .settings/.jsdtscope | 12 +++ .settings/org.eclipse.jdt.core.prefs | 9 ++ .settings/org.eclipse.m2e.core.prefs | 4 + .settings/org.eclipse.wst.common.component | 9 ++ ...eclipse.wst.common.project.facet.core.prefs.xml | 12 +++ .../org.eclipse.wst.common.project.facet.core.xml | 12 +++ .../org.eclipse.wst.jsdt.ui.superType.container | 1 + .settings/org.eclipse.wst.jsdt.ui.superType.name | 1 + .settings/org.eclipse.wst.validation.prefs | 2 + WebContent/META-INF/MANIFEST.MF | 3 + WebContent/WEB-INF/jboss-deployment-structure.xml | 9 ++ WebContent/WEB-INF/jboss-web.xml | 8 ++ WebContent/index.jsp | 15 +++ pom.xml | 41 ++++++++ src/org/leolo/web/dm/Constant.java | 6 ++ src/org/leolo/web/dm/DatabaseManager.java | 33 ++++++ src/org/leolo/web/dm/dao/BaseDao.java | 14 +++ src/org/leolo/web/dm/dao/ProjectDao.java | 117 +++++++++++++++++++++ src/org/leolo/web/dm/dao/SystemParameterDao.java | 44 ++++++++ src/org/leolo/web/dm/model/Project.java | 32 ++++++ src/org/leolo/web/dm/model/ProjectMode.java | 6 ++ src/org/leolo/web/dm/servlet/BaseServlet.java | 42 ++++++++ src/org/leolo/web/dm/servlet/LogoutServlet.java | 58 ++++++++++ src/org/leolo/web/dm/servlet/MainServlet.java | 41 ++++++++ .../web/dm/servlet/ProjectMetadataServlet.java | 63 +++++++++++ 28 files changed, 659 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/.jsdtscope create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 .settings/org.eclipse.wst.common.component create mode 100644 .settings/org.eclipse.wst.common.project.facet.core.prefs.xml create mode 100644 .settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 .settings/org.eclipse.wst.validation.prefs create mode 100644 WebContent/META-INF/MANIFEST.MF create mode 100644 WebContent/WEB-INF/jboss-deployment-structure.xml create mode 100644 WebContent/WEB-INF/jboss-web.xml create mode 100644 WebContent/index.jsp create mode 100644 pom.xml create mode 100644 src/org/leolo/web/dm/Constant.java create mode 100644 src/org/leolo/web/dm/DatabaseManager.java create mode 100644 src/org/leolo/web/dm/dao/BaseDao.java create mode 100644 src/org/leolo/web/dm/dao/ProjectDao.java create mode 100644 src/org/leolo/web/dm/dao/SystemParameterDao.java create mode 100644 src/org/leolo/web/dm/model/Project.java create mode 100644 src/org/leolo/web/dm/model/ProjectMode.java create mode 100644 src/org/leolo/web/dm/servlet/BaseServlet.java create mode 100644 src/org/leolo/web/dm/servlet/LogoutServlet.java create mode 100644 src/org/leolo/web/dm/servlet/MainServlet.java create mode 100644 src/org/leolo/web/dm/servlet/ProjectMetadataServlet.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..a9e7765 --- /dev/null +++ b/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/.project b/.project new file mode 100644 index 0000000..ed965d6 --- /dev/null +++ b/.project @@ -0,0 +1,37 @@ + + + Download Manager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..92e666d --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..df9011d --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..7e261e8 --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml b/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml new file mode 100644 index 0000000..c8e0439 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..ddc0c9a --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/WebContent/META-INF/MANIFEST.MF b/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/WebContent/WEB-INF/jboss-deployment-structure.xml b/WebContent/WEB-INF/jboss-deployment-structure.xml new file mode 100644 index 0000000..947cf25 --- /dev/null +++ b/WebContent/WEB-INF/jboss-deployment-structure.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/jboss-web.xml b/WebContent/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..b39c92d --- /dev/null +++ b/WebContent/WEB-INF/jboss-web.xml @@ -0,0 +1,8 @@ + + + /dm + diff --git a/WebContent/index.jsp b/WebContent/index.jsp new file mode 100644 index 0000000..468338a --- /dev/null +++ b/WebContent/index.jsp @@ -0,0 +1,15 @@ +<%@ +page import="java.util.Collection,org.leolo.web.dm.dao.*,org.leolo.web.dm.model.*" +%> + + Download Manager + + +

Download Manager

+ <% Collection projs = new ProjectDao().getAllProjects(); %> +

Project List

+ + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1ecd39b --- /dev/null +++ b/pom.xml @@ -0,0 +1,41 @@ + + 4.0.0 + org.leolo.web.download-manager + download-manager-web + 0.0.1-SNAPSHOT + war + + src + + + maven-compiler-plugin + 3.8.0 + + 11 + + + + maven-war-plugin + 3.2.1 + + WebContent + + + + + + + + org.json + json + 20210307 + + + at.favre.lib + bcrypt + 0.9.0 + + + \ No newline at end of file diff --git a/src/org/leolo/web/dm/Constant.java b/src/org/leolo/web/dm/Constant.java new file mode 100644 index 0000000..9c7c295 --- /dev/null +++ b/src/org/leolo/web/dm/Constant.java @@ -0,0 +1,6 @@ +package org.leolo.web.dm; + +public class Constant { + public static final String SESSION_USER_ID = "uid"; + public static final String SESSION_USER_NAME = "uname"; +} diff --git a/src/org/leolo/web/dm/DatabaseManager.java b/src/org/leolo/web/dm/DatabaseManager.java new file mode 100644 index 0000000..419ec89 --- /dev/null +++ b/src/org/leolo/web/dm/DatabaseManager.java @@ -0,0 +1,33 @@ +package org.leolo.web.dm; + +import java.sql.Connection; +import java.sql.SQLException; + +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.sql.DataSource; + +public class DatabaseManager { + + private static DataSource ds; + + static { + InitialContext context; + try { + context = new InitialContext(); + ds = (DataSource) context.lookup("java:/dm"); + } catch (NamingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private DatabaseManager() { + + } + + public static Connection getConnection() throws SQLException { + return ds.getConnection(); + } + +} diff --git a/src/org/leolo/web/dm/dao/BaseDao.java b/src/org/leolo/web/dm/dao/BaseDao.java new file mode 100644 index 0000000..3d6904c --- /dev/null +++ b/src/org/leolo/web/dm/dao/BaseDao.java @@ -0,0 +1,14 @@ +package org.leolo.web.dm.dao; + +import java.sql.Connection; +import java.sql.SQLException; + +import org.leolo.web.dm.DatabaseManager; + +public abstract class BaseDao { + + protected Connection getConnection() throws SQLException { + return DatabaseManager.getConnection(); + } + +} diff --git a/src/org/leolo/web/dm/dao/ProjectDao.java b/src/org/leolo/web/dm/dao/ProjectDao.java new file mode 100644 index 0000000..e9ec922 --- /dev/null +++ b/src/org/leolo/web/dm/dao/ProjectDao.java @@ -0,0 +1,117 @@ +package org.leolo.web.dm.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Collection; +import java.util.Vector; + +import org.leolo.web.dm.model.Project; +import org.leolo.web.dm.model.ProjectMode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; + +public class ProjectDao extends BaseDao{ + + private static Logger log = LoggerFactory.getLogger(ProjectDao.class); + private static Marker mark = MarkerFactory.getMarker("org.leolo.web.dm"); + + public Collection getAllProjects(){ + Vector v = new Vector<>(); + try( + Connection conn = getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT project_id, project_path, project_name, mode FROM project") + ){ + while(rs.next()) { + Project proj = new Project(); + proj.setProjectId(rs.getInt(1)); + proj.setProjectPath(rs.getString(2)); + proj.setProjectName(rs.getString(3)); + if("master".equalsIgnoreCase(rs.getString(4))) { + proj.setMode(ProjectMode.MASTER); + }else { + proj.setMode(ProjectMode.SLAVE); + } + v.add(proj); + } + }catch(SQLException e) { + log.error(e.getMessage(), e); + } + return v; + } + + public Project getProjectByPath(String path) { + try( + Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement("SELECT project_id, project_path, project_name, mode FROM project WHERE project_path = ?"); + ){ + stmt.setString(1, path); + try(ResultSet rs = stmt.executeQuery()){ + while(rs.next()) { + Project proj = new Project(); + proj.setProjectId(rs.getInt(1)); + proj.setProjectPath(rs.getString(2)); + proj.setProjectName(rs.getString(3)); + if("master".equalsIgnoreCase(rs.getString(4))) { + proj.setMode(ProjectMode.MASTER); + }else { + proj.setMode(ProjectMode.SLAVE); + } + return proj; + } + } + }catch(SQLException e) { + log.error(e.getMessage(), e); + } + return null; + } + + public Collection getProjectPathsIgnoreCase(String path) { + Vector names = new Vector<>(); + try( + Connection conn = getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT project_path FROM project WHERE UPPER(project_path) = ?") + ){ + pstmt.setString(1, path.toUpperCase()); + try(ResultSet rs = pstmt.executeQuery()){ + while(rs.next()) { + names.add(rs.getString(1)); + } + } + }catch(SQLException e) { + log.error(e.getMessage(), e); + } + return names; + } + + public Project getProjectById(int projectId) { + try( + Connection conn = getConnection(); + PreparedStatement stmt = conn.prepareStatement("SELECT project_id, project_path, project_name, mode FROM project WHERE project_id = ?"); + ){ + stmt.setInt(1, projectId); + try(ResultSet rs = stmt.executeQuery()){ + while(rs.next()) { + Project proj = new Project(); + proj.setProjectId(rs.getInt(1)); + proj.setProjectPath(rs.getString(2)); + proj.setProjectName(rs.getString(3)); + if("master".equalsIgnoreCase(rs.getString(4))) { + proj.setMode(ProjectMode.MASTER); + }else { + proj.setMode(ProjectMode.SLAVE); + } + return proj; + } + } + }catch(SQLException e) { + log.error(e.getMessage(), e); + } + return null; + } +} diff --git a/src/org/leolo/web/dm/dao/SystemParameterDao.java b/src/org/leolo/web/dm/dao/SystemParameterDao.java new file mode 100644 index 0000000..b42d70d --- /dev/null +++ b/src/org/leolo/web/dm/dao/SystemParameterDao.java @@ -0,0 +1,44 @@ +package org.leolo.web.dm.dao; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SystemParameterDao extends BaseDao { + private static Logger log = LoggerFactory.getLogger(SystemParameterDao.class); + + private static final Object SYNC_TOKEN = new Object(); + private static Map cache = new HashMap<>(); + static { + new SystemParameterDao().reloadCache(); + } + public void reloadCache() { + synchronized(SYNC_TOKEN) { + try( + Connection conn = getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT parameter_id, parameter_value FROM system_parameter") + ){ + Map cache = new HashMap<>(); + while(rs.next()) { + cache.put(rs.getString(1), rs.getString(2)); + } + SystemParameterDao.cache = cache; + }catch(SQLException e) { + log.error(e.getMessage(), e); + } + SYNC_TOKEN.notifyAll(); + } + } + + public String getParameterValue(String parameterName) { + return cache.get(parameterName); + } + +} diff --git a/src/org/leolo/web/dm/model/Project.java b/src/org/leolo/web/dm/model/Project.java new file mode 100644 index 0000000..57f155f --- /dev/null +++ b/src/org/leolo/web/dm/model/Project.java @@ -0,0 +1,32 @@ +package org.leolo.web.dm.model; + +public class Project { + private int projectId; + private String projectPath; + private String projectName; + private ProjectMode mode; + public int getProjectId() { + return projectId; + } + public void setProjectId(int projectId) { + this.projectId = projectId; + } + public String getProjectPath() { + return projectPath; + } + public void setProjectPath(String projectPath) { + this.projectPath = projectPath; + } + public String getProjectName() { + return projectName; + } + public void setProjectName(String projectName) { + this.projectName = projectName; + } + public ProjectMode getMode() { + return mode; + } + public void setMode(ProjectMode mode) { + this.mode = mode; + } +} diff --git a/src/org/leolo/web/dm/model/ProjectMode.java b/src/org/leolo/web/dm/model/ProjectMode.java new file mode 100644 index 0000000..10560f3 --- /dev/null +++ b/src/org/leolo/web/dm/model/ProjectMode.java @@ -0,0 +1,6 @@ +package org.leolo.web.dm.model; + +public enum ProjectMode { + MASTER, + SLAVE; +} diff --git a/src/org/leolo/web/dm/servlet/BaseServlet.java b/src/org/leolo/web/dm/servlet/BaseServlet.java new file mode 100644 index 0000000..2edfa5a --- /dev/null +++ b/src/org/leolo/web/dm/servlet/BaseServlet.java @@ -0,0 +1,42 @@ +package org.leolo.web.dm.servlet; + +import java.io.IOException; +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 org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Servlet implementation class BaseServlet + */ +public class BaseServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + private static Logger log = LoggerFactory.getLogger(BaseServlet.class); + + /** + * @see HttpServlet#HttpServlet() + */ + public BaseServlet() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + log.debug("Request - [GET] {}", request.getRequestURI()); + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + } + +} diff --git a/src/org/leolo/web/dm/servlet/LogoutServlet.java b/src/org/leolo/web/dm/servlet/LogoutServlet.java new file mode 100644 index 0000000..4e1947c --- /dev/null +++ b/src/org/leolo/web/dm/servlet/LogoutServlet.java @@ -0,0 +1,58 @@ +package org.leolo.web.dm.servlet; + +import java.io.IOException; +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 org.json.JSONObject; +import org.leolo.web.dm.Constant; +import org.leolo.web.dm.dao.ProjectDao; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; + +/** + * Servlet implementation class LogoutServlet + */ +@WebServlet("/Logout") +public class LogoutServlet extends HttpServlet { + private static Logger log = LoggerFactory.getLogger(LogoutServlet.class); + private static Marker mark = MarkerFactory.getMarker("user"); + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public LogoutServlet() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + Object uname = request.getSession().getAttribute(Constant.SESSION_USER_NAME); + log.info(mark, "User {} logged out.", uname); + if(uname!=null) { + request.getSession().invalidate(); + } + response.setContentType("application/json"); + JSONObject obj = new JSONObject(); + obj.put("status", "success"); + obj.write(response.getWriter()); + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + doGet(request, response); + } + +} diff --git a/src/org/leolo/web/dm/servlet/MainServlet.java b/src/org/leolo/web/dm/servlet/MainServlet.java new file mode 100644 index 0000000..d681357 --- /dev/null +++ b/src/org/leolo/web/dm/servlet/MainServlet.java @@ -0,0 +1,41 @@ +package org.leolo.web.dm.servlet; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Servlet implementation class MainServlet + */ +//@WebServlet("/") +public class MainServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public MainServlet() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + response.getWriter().append("Served at: ").append(request.getContextPath()); + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + doGet(request, response); + } + +} diff --git a/src/org/leolo/web/dm/servlet/ProjectMetadataServlet.java b/src/org/leolo/web/dm/servlet/ProjectMetadataServlet.java new file mode 100644 index 0000000..6d1f497 --- /dev/null +++ b/src/org/leolo/web/dm/servlet/ProjectMetadataServlet.java @@ -0,0 +1,63 @@ +package org.leolo.web.dm.servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Collection; + +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 org.json.JSONObject; +import org.leolo.web.dm.dao.ProjectDao; +import org.leolo.web.dm.model.Project; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Servlet implementation class MainServlet + */ +@WebServlet({"/metadata/*"}) +public class ProjectMetadataServlet extends BaseServlet { + private static Logger log = LoggerFactory.getLogger(ProjectMetadataServlet.class); + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public ProjectMetadataServlet() { + super(); + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + super.doGet(request, response); + response.setContentType("application/json"); + log.info("URL: {}", request.getRequestURI()); + String projectPath = request.getRequestURI().substring(request.getContextPath().length()+10); + log.info("Project Requested: {}", projectPath); + ProjectDao projDao = new ProjectDao(); + Project proj = projDao.getProjectByPath(projectPath); + JSONObject retObj = new JSONObject(); + if(proj==null) { + retObj.put("status", "error"); + retObj.put("message", "Specified project cannot be found"); + retObj.put("requested", projectPath); + Collection names = projDao.getProjectPathsIgnoreCase(projectPath); + for(String name:names) { + retObj.append("suggestedPaths", name); + } + }else { + retObj.put("status", "success"); + retObj.put("name", proj.getProjectName()); + retObj.put("id", proj.getProjectId()); + //TODO: Handle other case + } + retObj.write(response.getWriter()); + } + +}