package com.itth.ttraq;
import com.itth.commons.hibernate.DatabaseException;
import com.itth.commons.hibernate.HBN;
import com.itth.ttraq.actionforms.TimeStampForm;
import com.itth.ttraq.actionforms.TimeStampFormExport;
import com.itth.ttraq.actionforms.TimeStampsForm;
import com.itth.ttraq.beans.*;
import com.itth.ttraq.exceptions.NoProjectsException;
import com.itth.ttraq.exceptions.NoTimeStampsException;
import com.itth.ttraq.exceptions.UnprivilegedAccessException;
import com.itth.ttraq.om.*;
import net.sf.hibernate.*;
import net.sf.hibernate.expression.Order;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.ParseException;
import java.util.*;
/**
* 工具类
*/
public class RefreshUtils {
// 声明一个类变量
User user;
// 声明一个Session变量
Session hibernateSession;
/**
* 用来得到描述基本用户信息
*/
public static void populateParameters(HttpServletRequest req,
ActionMessages messages, ActionMessages errors,
Session hibernateSession, User user) throws DatabaseException,
NoProjectsException, UnprivilegedAccessException {
// 获取session实例
HttpSession session = req.getSession();
User userLogin = user.getUserLogin();
User userView = user;
Project projectById = null;
Project project = null;
try {
// 如果用户已经被分配项目则加载projectById
if (!user.getUserDataBean().getProjectId().equals(""))
projectById = (Project) HBN.getOM(Project.class, user
.getUserDataBean().getProjectId(), hibernateSession);
// 如果当前查看的用户已经分配项目,则把项目保存到project中否则将登录时用户的项目保存到project中
project = user.getUserDataBean().getProjectId() != null
&& projectById != null ? projectById : RefreshUtils
.getDefaultProject(userLogin, hibernateSession);
} catch (DatabaseException e) {
TTraqService.logger.warn(e);
if (!user.isSuperuser()) {
// 如果不是管理员则给出相应的提示信息
errors.add(Globals.ERROR_KEY, new ActionMessage(
"error.no.projects.available"));
}
}
Set projects = new TreeSet();
if (userLogin.isSuperuser()) {
// 如果登录用户为管理员可以查看所有的用户信息
userView = user;
if (project != null && !userView.isAssignedTo(project)) {
Set users = project.getUsers();
// 如果项目还没有被分配出去,查看登录者的项目信息
if (users.isEmpty()) {
// 保存项目名称
String oldProjectName = project.getName();
// 查看登录者的项目信息
project = getDefaultProject(userLogin, hibernateSession);
if (project == null) {
project = getDefaultProject(userLogin, hibernateSession);
// 如果登录者依然没有项目则抛出没有项目信息的异常,否则显示被查看对象变更的信息
if (project == null)
throw new NoProjectsException();
} else {
users = project.getUsers();
messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("hint.project.changed",
oldProjectName, project.getName()));
}
}
// 保存被查看对象的信息
String oldName = userView.getFullName();
User newViewUser = users.contains(userView) ? userView
: (User) users.iterator().next();
String newName = newViewUser.getFullName();
// 用户改变时给出提示信息
if (!userView.equals(newViewUser)) {
messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("hint.viewuser.changed", oldName,
newName, project.getName()));
userView = newViewUser;
}
}
populateManagerParameterBean(req, userView, project, true);
} else if (userLogin.isManagerInProject(project)) {
userView = (User) HBN.getOM(User.class, user.getUserDataBean()
.getId(), hibernateSession);
// 项目经理只能看到他所管理的项目
if (!userView.isAssignedTo(project)) {
throw new UnprivilegedAccessException(userLogin, userView);
}
populateManagerParameterBean(req, userView, project, false);
} else {
if (userLogin.getId() != user.getUserDataBean().getId()) {
throw new UnprivilegedAccessException(userLogin, userView);
} else {
// 持久化加载
userView = (User) HBN.getOM(User.class, user.getUserDataBean()
.getId(), hibernateSession);
}
}
// 把项目保存到集合中
projects.addAll(getProjects(true, userLogin.isSuperuser(),
hibernateSession, userLogin));
List filteredTimeStamps = null;
ParameterBean bean = ParameterBean.createParameterBean(session);
if (project != null) {
Set subProjects = new TreeSet();
//添加子项目
subProjects.add(project);
Project.getChildren(subProjects, project, true);
HashMap hashMap = new HashMap(2);
hashMap.put("user", user);
hashMap.put("project", subProjects);
List timeFilters = findTimefilters(HBN.getOMList(TimeStamp.class,
Order.asc(user.getUserDataBean().getOrderBy()), null,
hashMap, null, hibernateSession));
// 得到时间列表
String currentTimeFilter = checkTimefilter(user.getUserDataBean()
.getTimeFilter(), timeFilters);
filteredTimeStamps = project.getTimeStampsOrderedBy(user
.getUserDataBean().getOrderBy(), userView,
currentTimeFilter, user.getUserDataBean().getQuery(),
hibernateSession);
String summaryView = calculateSummaryHours(filteredTimeStamps);
bean.setSelectableTimefilter(timeFilters);
user.getUserDataBean().setTimeFilter(currentTimeFilter);
if (timeFilters.size() > 1
&& (!timeFilters.contains(user.getUserDataBean()
.getTimeFilter()) || user.getUserDataBean()
.getTimeFilter().equals(""))) {
user.getUserDataBean().setTimeFilter(
(String) timeFilters.get(1));
}
bean.setSummary(summaryView);
TimeStampsForm editTimeStampsForm = new TimeStampsForm();
Vector vector = new Vector(filteredTimeStamps.size());
for (int i = 0; i < filteredTimeStamps.size(); i++) {
TimeStamp timeStamp = (TimeStamp) filteredTimeStamps.get(i);
vector.add(TimeStampForm.createTimeStampForm(timeStamp));
}
editTimeStampsForm.setTimeStampForms(vector);
session.setAttribute("editTimeStampsForm", editTimeStampsForm);
user.getUserDataBean().setProjectId(project.getId());
}
bean.setFortune(Fortune.randomFortune());
populateProjectListBean(session, projects);
session.setAttribute("parameterBean", bean);
user.getUserDataBean().setId(userView.getId());
}
/**
* 得到登录用户的项目
*/
public static Project getDefaultProject(User user, Session hibernateSession)
throws DatabaseException, NoProjectsException {
Set projects = user.getProjects();
if (projects != null && projects.size() > 0) {
return (Project) projects.iterator().next();
} else {
if (user.isSuperuser()) {
List users = getAllUsers(hibernateSession);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user1 = (User) iterator.next();
if (user1.getProjects() != null
&& user1.getProjects().size() > 0) {
return (Project) user1.getProjects().iterator().next();
}
}
}
throw new NoProjectsException();
}
}
/**
* 设置初始化显示的都是所有时间段的信息
*/
private static String checkTimefilter(String currentTimeFilter,
List timeFilters) {
if (!timeFilters.contains(currentTimeFilter)) {
if (timeFilters.size() > 1) {
currentTimeFilter = (String) timeFilters.get(1);
} else {
Calendar now = Calendar.getInstance();
now.setTimeInMillis(System.currentTimeMillis());
currentTimeFilter = TTraqService
.formatTimefilter(now.getTime());
}
}
return currentTimeFilter;
}
private static String calculateSummaryHours(List timestamps) {
long summary = 0;
summary = calculateSummary(timestamps, summary);
return calculateHours(summary);
}
/**
* 转换时间
*/
private static String calculateHours(long milliseconds) {
long hours = milliseconds / 3600000;
long minutes = (milliseconds - (hours * 3600000)) / 60000;
St

kuileo
- 粉丝: 3
- 资源: 8
最新资源
- 移动机器人路径跟踪的设计和仿真模型预测控制附Matlab代码.rar
- 综合能源系统中基于电转气和碳捕集系统的热电联产建模与优化研究附Matlab代码.rar
- 增强型PID-自适应-前馈-神经网络控制研究 附Matlab代码.rar
- 由20L NPC逆变器控制的3 HP电机的电磁辐射和谐波分析的比较附Matlab代码.rar
- 毕业设计,开题报告,论文参考:自动化服务部署平台设计与实现-基于Django与VMware vSphere的高效虚拟机管理与服务部署系统
- 毕业设计,开题报告,论文参考:基于虚拟现实技术的汽车虚拟装配系统设计与实现-虚拟现实,汽车装配,沉浸式交互,培训教学用途
- 毕业设计,开题报告,论文参考:温度试验设备监控与自动化排班系统的设计与实现-基于C#与ORACLE的高效解决方案
- 毕业设计,开题报告,论文参考:Android垃圾清理应用设计与实现-高效优化手机性能与存储
- 编程控制器(PLC)的基础知识
- 实用强大的LabVIEW用户登录程序:支持密码登录、用户管理,便捷易用,基于Access数据库制作,Labview密码登录系统:实用、便捷的用户管理功能,采用Access数据库安全存储,COMSOL磁
- 基于SpringBoot+Vue框架的电商应用系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip
- C#加载运行VisonPro的toolblock
- 基于SpringBoot框架的失物招领平台的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip
- 实用强大的LabVIEW用户登录程序:方便的密码登录系统与用户管理,基于Access数据库,Labview用户登录程序:基于Access数据库的高效用户管理,实用便捷密码认证系统,利用光子晶体实现空气
- 基于SpringBoot的小学生身体素质测评管理系统设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip
- 2025蛇年v2.0觅知扶风计费系统全新重制全新UI优化修复完整版
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


