Browse Source

Initial commit

master
LO Kam Tao Leo 4 years ago
commit
245da57a6e
  1. 27
      .classpath
  2. 1
      .gitignore
  3. 37
      .project
  4. 12
      .settings/.jsdtscope
  5. 9
      .settings/org.eclipse.jdt.core.prefs
  6. 4
      .settings/org.eclipse.m2e.core.prefs
  7. 9
      .settings/org.eclipse.wst.common.component
  8. 12
      .settings/org.eclipse.wst.common.project.facet.core.prefs.xml
  9. 12
      .settings/org.eclipse.wst.common.project.facet.core.xml
  10. 1
      .settings/org.eclipse.wst.jsdt.ui.superType.container
  11. 1
      .settings/org.eclipse.wst.jsdt.ui.superType.name
  12. 2
      .settings/org.eclipse.wst.validation.prefs
  13. 3
      WebContent/META-INF/MANIFEST.MF
  14. 9
      WebContent/WEB-INF/jboss-deployment-structure.xml
  15. 8
      WebContent/WEB-INF/jboss-web.xml
  16. 15
      WebContent/index.jsp
  17. 41
      pom.xml
  18. 6
      src/org/leolo/web/dm/Constant.java
  19. 33
      src/org/leolo/web/dm/DatabaseManager.java
  20. 14
      src/org/leolo/web/dm/dao/BaseDao.java
  21. 117
      src/org/leolo/web/dm/dao/ProjectDao.java
  22. 44
      src/org/leolo/web/dm/dao/SystemParameterDao.java
  23. 32
      src/org/leolo/web/dm/model/Project.java
  24. 6
      src/org/leolo/web/dm/model/ProjectMode.java
  25. 42
      src/org/leolo/web/dm/servlet/BaseServlet.java
  26. 58
      src/org/leolo/web/dm/servlet/LogoutServlet.java
  27. 41
      src/org/leolo/web/dm/servlet/MainServlet.java
  28. 63
      src/org/leolo/web/dm/servlet/ProjectMetadataServlet.java

27
.classpath

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.jboss.ide.eclipse.as.core.server.runtime.runtimeTarget/WildFly 22.0 Runtime">
<attributes>
<attribute name="owner.project.facets" value="jst.web"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="module" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

1
.gitignore vendored

@ -0,0 +1 @@
target/

37
.project

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Download Manager</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>

12
.settings/.jsdtscope

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="WebContent"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
<attributes>
<attribute name="hide" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
<classpathentry kind="output" path=""/>
</classpath>

9
.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

4
.settings/org.eclipse.m2e.core.prefs

@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

9
.settings/org.eclipse.wst.common.component

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="download-manager-web-0.0.1-SNAPSHOT">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
<property name="java-output-path" value="/Download Manager/build/classes"/>
<property name="context-root" value="download-manager-web"/>
</wb-module>
</project-modules>

12
.settings/org.eclipse.wst.common.project.facet.core.prefs.xml

@ -0,0 +1,12 @@
<root>
<facet id="jst.jaxrs">
<node name="libprov">
<attribute name="provider-id" value="jaxrs-no-op-library-provider"/>
</node>
</facet>
<facet id="jst.jsf">
<node name="libprov">
<attribute name="provider-id" value="jsf-no-op-library-provider"/>
</node>
</facet>
</root>

12
.settings/org.eclipse.wst.common.project.facet.core.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="WildFly 22.0 Runtime"/>
<fixed facet="jst.web"/>
<fixed facet="java"/>
<fixed facet="wst.jsdt.web"/>
<installed facet="jst.web" version="4.0"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="jst.jaxrs" version="2.1"/>
<installed facet="java" version="11"/>
<installed facet="jst.jsf" version="2.2"/>
</faceted-project>

1
.settings/org.eclipse.wst.jsdt.ui.superType.container

@ -0,0 +1 @@
org.eclipse.wst.jsdt.launching.baseBrowserLibrary

1
.settings/org.eclipse.wst.jsdt.ui.superType.name

@ -0,0 +1 @@
Window

2
.settings/org.eclipse.wst.validation.prefs

@ -0,0 +1,2 @@
disabled=06target
eclipse.preferences.version=1

3
WebContent/META-INF/MANIFEST.MF

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Class-Path:

9
WebContent/WEB-INF/jboss-deployment-structure.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.slf4j" />
</dependencies>
</deployment>
</jboss-deployment-structure>

8
WebContent/WEB-INF/jboss-web.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.jboss.com/xml/ns/javaee
http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
<context-root>/dm</context-root>
</jboss-web>

15
WebContent/index.jsp

@ -0,0 +1,15 @@
<!DOCTYPE html><%@
page import="java.util.Collection,org.leolo.web.dm.dao.*,org.leolo.web.dm.model.*"
%><html>
<head>
<title>Download Manager</title>
</head>
<body>
<h1>Download Manager</h1>
<% Collection<Project> projs = new ProjectDao().getAllProjects(); %>
<h2>Project List</h2>
<ul><% for(Project proj:projs){ %>
<li><a href="project/<%=proj.getProjectPath()%>"><%= proj.getProjectName() %></a></li>
<%} %></ul>
</body>
</html>

41
pom.xml

@ -0,0 +1,41 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.leolo.web.download-manager</groupId>
<artifactId>download-manager-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
<dependency>
<groupId>at.favre.lib</groupId>
<artifactId>bcrypt</artifactId>
<version>0.9.0</version>
</dependency>
</dependencies>
</project>

6
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";
}

33
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();
}
}

14
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();
}
}

117
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<Project> getAllProjects(){
Vector<Project> 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<String> getProjectPathsIgnoreCase(String path) {
Vector<String> 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;
}
}

44
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<String, String> 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<String, String> 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);
}
}

32
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;
}
}

6
src/org/leolo/web/dm/model/ProjectMode.java

@ -0,0 +1,6 @@
package org.leolo.web.dm.model;
public enum ProjectMode {
MASTER,
SLAVE;
}

42
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 {
}
}

58
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);
}
}

41
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);
}
}

63
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<String> 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());
}
}
Loading…
Cancel
Save