package com.norteksoft.acs.web.organization;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.springframework.beans.factory.annotation.Required;
import com.norteksoft.acs.base.enumeration.TreeType;
import com.norteksoft.acs.base.web.struts2.CRUDActionSupport;
import com.norteksoft.acs.entity.organization.Company;
import com.norteksoft.acs.entity.organization.Department;
import com.norteksoft.acs.entity.organization.Workgroup;
import com.norteksoft.acs.service.organization.CompanyManager;
import com.norteksoft.acs.service.organization.DepartmentManager;
import com.norteksoft.acs.service.organization.WorkGroupManager;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.JsTreeUtils;
import com.norteksoft.product.util.TreeUtils;
import com.norteksoft.tags.tree.DepartmentDisplayType;
@SuppressWarnings("deprecation")
@ParentPackage("default")
public class LoadTreeAction extends CRUDActionSupport<Company> {
private static final long serialVersionUID = 1L;
private CompanyManager companyManager;
private DepartmentManager departmentManager;
private WorkGroupManager workGroupManager;
private String currentId;
private String treeType;
public String loadWorkgroupTree(){
StringBuilder sb = new StringBuilder("[ ");
if(currentId == null || currentId.trim().length() <= 0) return null;
//初始化时显示公司根节点和工作站根节点
if("INITIALIZED".equals(currentId)){
Company company = companyManager.getCompany(ContextUtils.getCompanyId());
sb.append(JsTreeUtils.generateJsTreeNodeNew("WORKGROUPS-"+company.getId(), "open", company.getName(), getWorkGroupNodes(company.getId()), ""));
}
sb.append(" ]") ;
this.renderText(sb.toString());
return null;
}
/**
* 以公司为根节点的树
* @return
*/
public String loadDepartmentTree(){
StringBuilder sb = new StringBuilder("[ ");
if(currentId == null || currentId.trim().length() <= 0) return null;
//初始化时显示公司根节点和工作站根节点
Company company = companyManager.getCompany(ContextUtils.getCompanyId());
if("INITIALIZED".equals(currentId)){
sb.append(JsTreeUtils.generateJsTreeNodeNew("DEPARTMENTS-" + company.getId(), "open", company.getName(), getDepartmentNodes(company.getId()), ""));
}else if("INITIALIZED_USERS".equals(currentId)){
StringBuilder strs=new StringBuilder();
strs.append(getDepartmentNodes(company.getId()));
if(StringUtils.isNotEmpty(strs.toString())){
strs.append(",");
}
sb.append(JsTreeUtils.generateJsTreeNodeNew("DEPARTMENTS-" + company.getId(), "open", company.getName(),
strs.append(JsTreeUtils.generateJsTreeNodeNew("NODEPARTMENT_USER-"+ company.getId(), "", getText("user.noDepartment"), "")+","+JsTreeUtils.generateJsTreeNodeNew("DELETED_USER-" + company.getId(), "", getText("common.userDelete"),"")).toString(),""));
}
sb.append(" ]") ;
this.renderText(sb.toString());
return null;
}
/**
* 部门树
* @return
*/
public String loadDepartment(){
StringBuilder sb = new StringBuilder("[ ");
if(currentId == null || currentId.trim().length() <= 0) return null;
//初始化时显示公司根节点和工作站根节点
Company company = companyManager.getCompany(ContextUtils.getCompanyId());
if("INITIALIZED".equals(currentId)){
sb.append(JsTreeUtils.generateJsTreeNodeNew("DEPARTMENTS-" + company.getId()+"="+company.getName(), "open", company.getName(), getDepartmentNodes2(company.getId()),""));
}else if("INITIALIZED_USERS".equals(currentId)){
StringBuilder strs=new StringBuilder();
strs.append(getDepartmentNodes2(company.getId()));
if(StringUtils.isNotEmpty(strs.toString())){
strs.append(",");
}
sb.append(JsTreeUtils.generateJsTreeNodeNew("DEPARTMENTS-" + company.getId()+"="+company.getName(), "open", company.getName(),
strs.append(JsTreeUtils.generateJsTreeNodeNew("DELETED_USER-" + company.getId()+"="+company.getName(), "", getText("common.userDelete"),"")).toString(), ""));
}
sb.append(" ]") ;
this.renderText(sb.toString());
return null;
}
/**
* 生成公司的子公司及部门的树
* @param companyId
*/
public String getDepartmentNodes(Long companyId){
Company company = companyManager.getCompany(companyId);
StringBuilder nodes = new StringBuilder();
for(Company comp : company.getChildren()){
//nodes.append(generateJsTreeNode("DEPARTMENTS,"+comp.getId().toString()+"="+comp.getName(), "closed", comp.getName()));
nodes.append(JsTreeUtils.generateJsTreeNodeNew("DEPARTMENTS-"+comp.getId().toString(), "closed", comp.getName(),""));
nodes.append(",");
}
List<Department> departments = departmentManager.getAllDepartment();
for(Department d : departments){
String nodeString = getDepartmentsNodes(d, false);
if(StringUtils.isNotEmpty(nodeString)){
nodes.append(nodeString).append(",");
}
}
//去掉最后一个逗号
if(StringUtils.isNotEmpty(nodes.toString())){
if(nodes.charAt(nodes.length()-1)==','){
nodes.delete(nodes.length()-1, nodes.length());
}
}
return nodes.toString();
}
public String getDepartmentNodes2(Long companyId){
Company company = companyManager.getCompany(companyId);
StringBuilder nodes = new StringBuilder();
for(Company comp : company.getChildren()){
nodes.append(JsTreeUtils.generateJsTreeNodeNew("DEPARTMENTS-"+comp.getId().toString()+"="+comp.getName(), "closed", comp.getName(), ""));
nodes.append(",");
}
List<Department> departments = departmentManager.getAllDepartment();
for(Department d : departments){
String nodeString = getDepartmentsNodes2(d, false);
if(StringUtils.isNotEmpty(nodeString)){
nodes.append(nodeString).append(",");
}
}
//去掉最后一个逗号
if(StringUtils.isNotEmpty(nodes.toString())){
if(nodes.charAt(nodes.length()-1)==','){
nodes.delete(nodes.length()-1, nodes.length());
}
}
return nodes.toString();
}
private String getDepartmentsNodes(Department dept, boolean isSubDept){
StringBuilder nodes = new StringBuilder();
if(dept.getParent() != null && !isSubDept) return "";
List<Department> subDepts = departmentManager.getSubDeptments(dept.getId());
if(subDepts.size() > 0){
StringBuilder subNodes = new StringBuilder();
//子部门树节点列表
for(Department d : subDepts){
if(d.isDeleted()) continue;
subNodes.append(getDepartmentsNodes(d, true));
subNodes.append(",");
}
//去掉最后一个逗号
if(StringUtils.isNotEmpty(subNodes.toString())){
if(subNodes.charAt(subNodes.length()-1)==','){
subNodes.delete(subNodes.length()-1, subNodes.length());
}
}
//部门树节点
//nodes.append(JsTreeUtil.generateJsTreeNode("USERSBYDEPARTMENT,"+dept.getId()+"="+dept.getDepartmentName(), "closed", dept.getDepartmentName(), subNodes.toString()));
nodes.append(JsTreeUtils.generateJsTreeNodeNew("USERSBYDEPARTMENT-"+dept.getId(), "closed", dept.getName(), subNodes.toString(),""));
}else{
//nodes.append(JsTreeUtil.generateJsTreeNode("USERSBYDEPARTMENT,"+dept.getId()+"="+dept.getDepartmentName(), "", dept.getDepartmentName(), ""));
nodes.append(JsTreeUtils.generateJsTreeNodeNew("USERSBYDEPARTMENT-"+dept.getId(), "", dept.getName(), ""));
}
return nodes.toString();
}
private String getDepartmentsNodes2(Department dept, boolean isSubDept){
StringBuilder nodes = new StringBuilder();
if(dept.getParent() != null && !isSubDept) return "";
List<Department> subDepts = departmentManager.getSubDeptments(dept.getId());
if(subDepts.size() > 0){
StringBuilder subNodes = new StringBuilder();
//子部门树节点列表
for(Department d : subDepts){
if(d.isDeleted()) continue;
subNodes.append(getDepartmentsNodes2(d, true));
subNodes.append(",");
}
//去掉最后一个逗号
if(subNodes.charAt(subNodes.length()-1)==','){
subNodes.delete(subNodes.length()-1, subNodes.length());
}
//部门树节点
nodes.append(JsTreeUtils.generateJsTreeNodeNew("USERSBYDEPARTMENT-"+dept.getId()+"="+dept.getName(), "closed", dept.getName(), subNodes.toString(),""));
}else{
nodes.append(JsTreeUtils.generateJsTreeNodeNew("USERSBYDEPARTMENT-"+dept.getId()+"="+dept.getName(), "", dept.getName(), ""));
}
return nodes.toString();
}
@Required
public void setDepartmentManager(DepartmentManager departmentManager) {
this.departmentManager = departmentManager;
}
public String getWorkGroupNodes(Long companyId){
List<Workgroup> workGroups = workGroupManager.queryWorkGroupByCompany(ContextUtils.getCompanyId());
StringBuilder nodes = new StringBuilder();
for(Workgroup wg: workGroups){
if(wg.isDeleted()) continue;
nodes.append(JsTreeUtils.generateJsTreeNodeNew("USERSBYWORKGROUP-"+wg.getId().toString(), "", wg.getName(), ""));
nodes.append(",");
}
if(nodes.lastIndexOf(",") != -1 && nodes.lastIndexOf(",") == nodes.length()-1){
nodes.replace(nodes.length()-1, nodes.length(), "");
}
return nodes.toString();
}
//公司人员树
public String createManCompanyTree() throws Exception {
renderText(TreeUtils.getCreateManCompanyTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(), currentId,false,DepartmentDisplayType.NAME,false));
return null;
}
//部门工作组人员树
public String createManDepartmentGroupTree(){
renderText(TreeUtils.getCreateManDepartmentGroupTree(ContextUtils.getCompanyId(), currentId,false,DepartmentDisplayType.NAME,false));
return null;
}
//部门人员树
public String createManDepartmentTree(){
renderText(TreeUtils.getCreateManDepartmentTree(ContextUtils.getCompanyId(), currentId,false,DepartmentDisplayType.NAME,false));
return null;
}
//工作组人员树
public String createManGroupTree(){
renderText(TreeUtils.getCreateManGroupTree(ContextUtils.getCompanyId(), currentId,false));
return null;
}
//部门树
public String createDepartmentTree(){
renderText(TreeUtils.getCreateDepartmentTree(ContextUtils.getCompanyId(), currentId,DepartmentDisplayType.NAME));
return null;
}
//工作组树
public String createGroupTree(){
renderText(TreeUtils.getCreateGroupTree(ContextUtils.getCompanyId(), currentId));
return null;
}
/*public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
((HttpServletResponse)response).setHeader("Pragma","No-cache");
((HttpServletResponse)response).setHeader("Cache-Control","no-cache");
((HttpServletResponse)response).setHeader("Expires","0");
chain.doFilter(request, response);
}*/
//标签树
public String getTree(){
switch(TreeType.valueOf(treeType)) {
case COMPANY:
renderText(TreeUtils.getCreateManCompanyTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(), currentId,false,DepartmentDisplayType.NAME,false));
break;
case MAN_DEPARTMENT_GROUP_TREE:
renderText(TreeUtils.getCreateManDepartmentGroupTree(ContextUtils.getCompanyId(), currentId,false,DepartmentDisplayType.NAME,false));
break;
case MAN_DEPARTMENT_TREE:
renderText(TreeUtils.getCreateManDepartmentTree(ContextUtils.getCompanyId(), currentId,false,DepartmentDisplayType.NAME,false));
break;
case MAN_GROUP_TREE:
renderText(TreeUtils.getCreateManGroupTree(ContextUtils.getCompanyId(), currentId,false));
break;
case DEPARTMENT_TREE:
renderText(TreeUtils.getCreateDepartmentTree(ContextUtils.getCompanyId(), currentId,DepartmentDisplayType.NAME));
break;
case GROUP_TREE:
renderText(TreeUtils.getCreateGroupTree(ContextUtils.getCompanyId(), currentId));
break;
default: return renderText(TreeUtils.getCreateManCompanyTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(), currentId,false,DepartmentDisplayType.NAME,false));
}
return null;
}
public String getCurrentId() {
return currentId;
}
public void setCurrentId(String currentId) {
this.currentId = currentId;
}
@Required
public void setCompanyManager(CompanyManager companyManager) {
this.companyManager = companyManager;
}
@Required
public void setWorkGroupManager(WorkGroupManager workGroupManager) {
this.workGroupManager = workGroupManager;
}
// 继承自父类的方法=======================================================================
@Override
public String delete() throws Exception {
return null;
}
@Override
public String list() throws Exception {
return null;
}
@Override
protected void prepareModel() throws Exception {
}
@Override
public String save() throws Exception {
return null;
}
public Company getModel() {
return null;
}
public String getTreeType() {
return treeType;
}
public void setTreeType(String treeType) {
this.treeType = treeType;
}
}