📄 modelmanagerimpl.java
字号:
package org.minjey.cjsjk.core;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.Date;import java.util.Calendar;import java.util.HashMap;import java.util.Iterator;import java.util.Properties;import org.minjey.cjsjk.dao.Dao;import org.minjey.cjsjk.model.Course;import org.minjey.cjsjk.model.EnrollTime;import org.minjey.cjsjk.model.Major;import org.minjey.cjsjk.model.Student;import org.minjey.cjsjk.model.StudentCourse;import org.minjey.cjsjk.util.Cloner;import org.minjey.cjsjk.util.PropertyDict;import org.minjey.cjsjk.util.PropertyLoader;import org.minjey.cjsjk.util.Reflector;import org.minjey.cjsjk.view.tree.ModelListener;public class ModelManagerImpl implements ModelManager { private ModelListener listener; private Properties properties; private Reflector reflector; private Dao dao; private HashMap<Class, HashMap<Integer, Object>> temp; public void clearCache() { SysDict.clearCache(); } public ModelManagerImpl(ModelListener listener) { properties = PropertyLoader.loadSystemProperty(); reflector = new Reflector(); dao = Dao.getDao(); temp = new HashMap<Class, HashMap<Integer, Object>>(); this.listener = listener;//new ModelListenerImpl();<--把TreePanel加进去 } public void delete(Object obj) { dao.delete(obj); //存入数据库 afterDelete(obj); listener.objectDeleted(obj); } public void save(Object obj) { try{ if(obj.getClass().equals(Major.class)) { Major major = (Major)obj; Date intime = major.getIntime(); EnrollTime et = getEnrollTime(intime); major.setEnrolltime(et); } Integer id = (Integer)reflector.getValue(obj, "id"); if(id == null) { dao.save(obj); // 存入数据库 afterSave(obj); listener.objectAdded(obj); } else { update(obj); } } catch(Exception e) { e.printStackTrace(); } } public void beforeEdit(Object obj) { //通知Model即将更新,将对象脱离Model Integer id = (Integer)reflector.getValue(obj, "id"); if(id == null) { return; } Class type = obj.getClass(); Object cobj = Cloner.clone(obj); if(temp.containsKey(type)) { HashMap<Integer, Object> map = temp.get(type); putIntoTemp(map, cobj); } else { HashMap<Integer, Object> map = new HashMap<Integer, Object>(); temp.put(type, map); putIntoTemp(map, cobj); } } private Object getObject(Object obj) { Class type = obj.getClass(); Reflector reflector = new Reflector(); Integer id = (Integer)reflector.getValue(obj, "id"); HashMap<Integer, Object> map = temp.get(type); return map.get(id); } private void update(Object obj) { if(obj instanceof StudentCourse) { } else { Object oldobj = getObject(obj); afterDelete(oldobj); } dao.update(obj); //存入数据库 afterSave(obj); listener.objectAdded(obj); } private void putIntoTemp(HashMap<Integer, Object> map, Object obj) { Reflector reflector = new Reflector(); Integer id = (Integer)reflector.getValue(obj, "id"); map.put(id, obj); } private void afterDelete(Object obj) { Integer id = (Integer)reflector.getValue(obj, "id"); Class cla = obj.getClass(); if(cla.equals(StudentCourse.class)) { } else{ if(cla.equals(Major.class)) { Major major = (Major)obj; major.getStation().getMajors().remove(id); } else if(cla.equals(Course.class)) { Course course = (Course)obj; course.getMajor().getCourses().remove(id); } else if(cla.equals(Student.class)) { Student student = (Student)obj; student.getMajor().getStudents().remove(id); } else { String objName = cla.getSimpleName().toUpperCase(); Class dictClass = SysDict.class; Field[] fields = dictClass.getDeclaredFields(); for(int i = 0; i < fields.length; i++) { if(objName.equals(fields[i].getName())) { HashMap<Integer, Object> map = (HashMap<Integer, Object>)reflector.doStaticGetValue(SysDict.class, objName); map.remove(id); } } } listener.objectDeleted(obj); } } private void afterSave(Object obj) { //完成更新以后维持对象模型 Integer id = (Integer)reflector.getValue(obj, "id"); Class cla = obj.getClass(); if(cla.equals(Major.class)) { Major major = (Major)obj; major.getStation().getMajors().put(id, major); //加入新函授站 } else if(cla.equals(Course.class)) { Course course = (Course)obj; course.getMajor().getCourses().put(id, course); } else if(cla.equals(Student.class)) { Student student = (Student)obj; student.getMajor().getStudents().put(id, student); } else if(cla.equals(StudentCourse.class)) { StudentCourse sc = (StudentCourse)obj; sc.getStudent().getStudentcourses().put(sc.getId(), sc); //System.out.println("Saved"); } else { String objName = cla.getSimpleName().toUpperCase(); Class dictClass = SysDict.class; Field[] fields = dictClass.getDeclaredFields(); for(int i = 0; i < fields.length; i++) { if(objName.equals(fields[i].getName())) { HashMap<Integer, Object> map = (HashMap<Integer, Object>)reflector.doStaticGetValue(SysDict.class, objName); map.put(id, obj); } } } } private EnrollTime getEnrollTime(Date intime) throws Exception { EnrollTime et = null; if(intime != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(intime); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); boolean showMonth = Boolean.valueOf(properties .getProperty(PropertyDict.MONTH4ENROLLTIME)); boolean find = false; HashMap<Integer, Object> ets = SysDict.getENROLLTIME(); Iterator<Object> it = ets.values().iterator(); while (it.hasNext()) { et = (EnrollTime) it.next(); calendar.setTime(et.getEtime()); int ey = calendar.get(Calendar.YEAR); int em = calendar.get(Calendar.MONTH); if (ey == year) { if (showMonth) { if (em == month) { find = true; break; } } else { find = true; break; } } else { continue; } } if (!find) { et = new EnrollTime(); et.setEtime(intime); dao.save(et); Integer id = (Integer) reflector.getValue(et, "id"); SysDict.getENROLLTIME().put(id, et); } return et; } else { throw new Exception("清输入入学时间"); } } public Connection getConnection() { return dao.getConnection(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -