diff --git a/GDMS.iml b/GDMS.iml index 9457690..3a5c57b 100644 --- a/GDMS.iml +++ b/GDMS.iml @@ -19,15 +19,15 @@ - - + + \ No newline at end of file diff --git a/src/core/operation/Delete.java b/src/core/operation/Delete.java index 2827091..f9e7acd 100644 --- a/src/core/operation/Delete.java +++ b/src/core/operation/Delete.java @@ -15,6 +15,6 @@ public class Delete extends Operation { for(String table:DBManagement.graduationDesignTables){ DBManagement.delete(table,map); } - return options; + return this.getOptions(); } } diff --git a/src/core/operation/DownloadFile.java b/src/core/operation/DownloadFile.java index f33f474..ddb242d 100644 --- a/src/core/operation/DownloadFile.java +++ b/src/core/operation/DownloadFile.java @@ -1,12 +1,27 @@ package core.operation; import core.user.User; +import dao.DBManagement; +import java.io.File; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class DownloadFile extends Operation{ @Override public Map execute(User subject) throws Exception { + String table = (String) this.getOptions().get("file_type"); + Map limits = (Map) this.getOptions().get("limits"); + String field = core.operation.utils.Utils.getFileField(table); + List ls = new ArrayList<>(); + ls.add(field); + ResultSet rs = DBManagement.select(ls,table,limits,0,1); + rs.next(); + String filePath = rs.getString(0); + File file = new File(filePath); + this.getOptions().put("file",file); return this.getOptions(); } } diff --git a/src/core/operation/DownloadFile.json b/src/core/operation/DownloadFile.json index ad27ff9..8817266 100644 --- a/src/core/operation/DownloadFile.json +++ b/src/core/operation/DownloadFile.json @@ -1,6 +1,9 @@ { "options":{ - + "file_type":"String", + "limits":"Map" }, - "return":{} + "return":{ + "file":"File" + } } \ No newline at end of file diff --git a/src/core/operation/Operation.java b/src/core/operation/Operation.java index 729a987..37f8c1e 100644 --- a/src/core/operation/Operation.java +++ b/src/core/operation/Operation.java @@ -1,6 +1,7 @@ package core.operation; +import core.operation.utils.Utils; import core.user.User; import error.GExcptFormat; import gdms.Mode; @@ -9,8 +10,8 @@ import java.util.Map; public abstract class Operation { - protected Map options; - protected User subject; + private Map options; + private User subject; Operation(){ super(); } @@ -26,7 +27,7 @@ public abstract class Operation { return options; } public void setOptions(String options) throws GExcptFormat { - this.options = core.operation.utils.util.string2MapOptions(options); + this.options = Utils.string2MapOptions(options); } public void addOptions(String key, Object value){ if ( Mode.strict == 1){ diff --git a/src/core/operation/UploadFileOperation.java b/src/core/operation/UploadFileOperation.java index c3a60dc..527b5ac 100644 --- a/src/core/operation/UploadFileOperation.java +++ b/src/core/operation/UploadFileOperation.java @@ -1,13 +1,38 @@ package core.operation; import core.user.User; +import dao.DBManagement; import error.GExcptSQL; +import java.io.File; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; public class UploadFileOperation extends Operation { @Override - public Map execute(User subject) throws GExcptSQL { + public Map execute(User subject) throws Exception { + File file = (File) this.getOptions().get("file"); + String table = (String) this.getOptions().get("file_type"); + Map limits = (Map) this.getOptions().get("limits"); + + String field = core.operation.utils.Utils.getFileField(table); + String filePath = core.operation.utils.Utils.getFilePathName(table,file.getName()); + Map vMap = new HashMap<>(); + vMap.put(field,filePath); + + file.renameTo(new File(filePath)); + //todo + + List ls = new ArrayList<>(); + ls.add(field); + ResultSet rs = DBManagement.select(ls,table,limits,0,1); + rs.next(); + String lastFilePath = rs.getString(0); + new File(lastFilePath).delete(); + DBManagement.update(table,vMap,limits); return this.getOptions(); } } diff --git a/src/core/operation/UploadFileOperation.json b/src/core/operation/UploadFileOperation.json index ed59a86..c2a2f65 100644 --- a/src/core/operation/UploadFileOperation.json +++ b/src/core/operation/UploadFileOperation.json @@ -1,6 +1,8 @@ { "options":{ - "file": "File" + "file": "File", + "file_type": "String", + "limits":"Map" }, "return":{} } \ No newline at end of file diff --git a/src/core/operation/fileType.json b/src/core/operation/fileType.json new file mode 100644 index 0000000..70b496d --- /dev/null +++ b/src/core/operation/fileType.json @@ -0,0 +1,5 @@ +{ + "公告文件": "announcement", + "开题报告":"graduation_design_reply", + "毕业设计定稿":"graduation_design_finished_product" +} \ No newline at end of file diff --git a/src/core/operation/utils/Utils.java b/src/core/operation/utils/Utils.java new file mode 100644 index 0000000..217e8be --- /dev/null +++ b/src/core/operation/utils/Utils.java @@ -0,0 +1,53 @@ +package core.operation.utils; + +import error.GExcptFormat; +import gdms.Configuration; +import gdms.Mode; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +public interface Utils { + Map fileTableField = new HashMap<>() { + { + put("announcement","annex_url"); + put("graduation_design_finished_product","graduation_design_url"); + put("graduation_design_opening_report","report_url"); + }}; + static String stringOptionsFormat(String options){ + return options.replaceAll(" {2,}", " ") ; + } + static Map string2MapOptions(String sOptions) throws GExcptFormat { + sOptions = stringOptionsFormat(sOptions); + Map options = new HashMap<>(); + String[] sOpts = sOptions.split(" "); + for(int i=0;i string2MapOptions(String sOptions) throws GExcptFormat { - sOptions = stringOptionsFormat(sOptions); - Map options = new HashMap<>(); - String[] sOpts = sOptions.split(" "); - for(int i=0;i vMap = new HashMap<>(); - ResultSetMetaData rsm = rs.getMetaData(); - rs.next(); - for(int i=0;i vMap = new HashMap<>(); + ResultSetMetaData rsm = rs.getMetaData(); + rs.next(); + for(int i=0;i vMap) throws GExcptSQL { + static User register(String userType, Map vMap) throws Exception { DBManagement.insert(userType,vMap); return createUser(userType, vMap); } @@ -65,16 +61,8 @@ public interface AccountManagement { static void destroy(User user){ //todo } - static User getUser(String userType){ - try { - return (User) Class.forName("core.user."+ Utils.toUpperFirstChar(userType)).getDeclaredConstructor().newInstance(); - } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException | ClassNotFoundException e) { - e.printStackTrace(); - } - return null; - } - static User createUser(String userType, Map vMap) { - User user = getUser(userType); + static User createUser(String userType, Map vMap) throws Exception { + User user = GetObjectByName.getUserByName(userType); user.setAttr(vMap); return user; } diff --git a/src/core/utils/GetObjectByName.java b/src/core/utils/GetObjectByName.java index dcd68a1..de87637 100644 --- a/src/core/utils/GetObjectByName.java +++ b/src/core/utils/GetObjectByName.java @@ -1,12 +1,15 @@ package core.utils; +import core.operation.Operation; +import core.user.User; + public interface GetObjectByName { String userClassPath = "core.user"; String operationClassPath = "core.operation"; - static Object getUserByName(String name) throws Exception { - return Class.forName(userClassPath+"."+name).getDeclaredConstructor().newInstance(); + static User getUserByName(String name) throws Exception { + return (User)Class.forName(userClassPath+"."+name).getDeclaredConstructor().newInstance(); } - static Object getOperationByName(String name) throws Exception{ - return Class.forName(operationClassPath+"."+name).getDeclaredConstructor().newInstance(); + static Operation getOperationByName(String name) throws Exception{ + return (Operation)Class.forName(operationClassPath+"."+name).getDeclaredConstructor().newInstance(); } } diff --git a/src/dao/DBManagement.java b/src/dao/DBManagement.java index dd423cc..71224cb 100644 --- a/src/dao/DBManagement.java +++ b/src/dao/DBManagement.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import error.GExcptSQL; +import gdms.Configuration; import org.apache.tomcat.jdbc.pool.DataSource; import org.apache.tomcat.jdbc.pool.PoolProperties; @@ -27,12 +28,9 @@ public class DBManagement { "graduation_design_reply", "graduation_design_reply_opinion_record_score" }; + public static String driverClassName="org.mariadb.jdbc.Driver"; - static final String driverClassName="org.mariadb.jdbc.Driver"; - static final String url="jdbc:mariadb://localhost:3306/gdms"; - static final String username="gdms"; - static final String password="GDMS"; public static DataSource dataSource = new DataSource(); @@ -40,10 +38,10 @@ public class DBManagement { public static void init(){ PoolProperties poolProperties = new PoolProperties(); - poolProperties.setUrl(url); - poolProperties.setDriverClassName(driverClassName); - poolProperties.setUsername(username); - poolProperties.setPassword(password); + poolProperties.setUrl(Configuration.dbUrl); + poolProperties.setDriverClassName(DBManagement.driverClassName); + poolProperties.setUsername(Configuration.dbUsername); + poolProperties.setPassword(Configuration.dbPassword); dataSource.setPoolProperties(poolProperties); try { Class.forName(driverClassName); @@ -55,7 +53,7 @@ public class DBManagement { public static Connection getConnection(){ if(!ifInit) return null; try { - return DriverManager.getConnection(url,username,password); + return DriverManager.getConnection(Configuration.dbUrl,Configuration.dbUsername,Configuration.dbPassword); } catch (SQLException e) { e.printStackTrace(); } diff --git a/src/gdms/Configuration.java b/src/gdms/Configuration.java new file mode 100644 index 0000000..4128db3 --- /dev/null +++ b/src/gdms/Configuration.java @@ -0,0 +1,10 @@ +package gdms; + +public interface Configuration { + //file + String filePath = "/"; + //database + String dbUrl="jdbc:mariadb://localhost:3306/gdms"; + String dbUsername="gdms"; + String dbPassword="GDMS"; +} diff --git a/src/gdms/test.java b/src/gdms/test.java index aac73b8..177f21b 100644 --- a/src/gdms/test.java +++ b/src/gdms/test.java @@ -1,5 +1,6 @@ package gdms; +import core.operation.utils.Utils; import dao.Select; import java.util.ArrayList; @@ -17,5 +18,6 @@ public class test { map.put("c","d"); Select sql = new Select(list,"zx",map,1,2); System.out.println(sql.getSQL()); + System.out.println(Utils.getFilePathName("a","b")); } } diff --git a/src/servlet/account/login.java b/src/servlet/account/login.java index ef1e238..08269c3 100644 --- a/src/servlet/account/login.java +++ b/src/servlet/account/login.java @@ -28,8 +28,10 @@ public class login extends HttpServlet { gExcptSQL.printStackTrace(); } catch (GExcptAccount gExcptAccount) { gExcptAccount.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); } - request.getSession().setAttribute("User",user); + request.getSession().setAttribute("User",user); request.getRequestDispatcher("/home.jsp").forward(request,response); } diff --git a/src/utils/Utils.java b/src/utils/Utils.java index d439588..09f8310 100644 --- a/src/utils/Utils.java +++ b/src/utils/Utils.java @@ -27,4 +27,11 @@ public interface Utils { static String cutTail(String s,int i){ return s.substring(0,s.length()-i); } + static String getFileType(String fileName){ + if(fileName.contains(".")){ + return fileName.substring(fileName.lastIndexOf('.')); + }else{ + return ""; + } + } }