package com.norteksoft.tags.tree.web; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import com.norteksoft.acs.base.web.struts2.CRUDActionSupport; import com.norteksoft.acs.entity.organization.Company; import com.norteksoft.product.api.entity.Department; import com.norteksoft.product.api.entity.Workgroup; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.JsonParser; import com.norteksoft.product.util.PropUtils; import com.norteksoft.product.util.ZTreeUtils; import com.norteksoft.product.util.freemarker.TagUtil; import com.norteksoft.product.web.struts2.Struts2Utils; import com.norteksoft.tags.tree.TreeType; import com.norteksoft.tags.tree.ZtreeLeafPage; @Namespace("/ztree") @ParentPackage("default") public class ZTreeAction extends CRUDActionSupport<Company> { private static final long serialVersionUID = 1L; private Log log=LogFactory.getLog(ZTreeAction.class); private String currentId; private String searchValue;//搜索 //标签tree的参数 private TreeType treeType;//树的类型 private String chkStyle;//树的选择类型 private String treeNodeShowContent;//设置树节点显示内容 private boolean userWithoutDeptVisible=false;//是否显示无部门人员 //标准tree的参数(包括标签树的参数) private String leafEnable="fasle";//是否需要页签 private String multiLeafJson;//多页签内容json private String append="false";//显示框的内容是否追加-- private boolean onlineVisible=false;//是否显示在线人员 private String mode;//模式??-- private String treeNodeData;//设置树节点data private String chkboxType;//设置checkbox时父子节点勾选关系{"Y" : "ps", "N" : "ps" } private String feedbackEnable="false";//是否启用自动赋值 private String showInput;//显示input框id private String showThing;//显示input内容设置 private String hiddenInput;//隐藏input框id private String hiddenThing;//隐藏input内容设置 private String departmentShow;//显示的部门 @Override public String delete() throws Exception { return null; } @Override public String list() throws Exception { getTree(); return null; } @Override protected void prepareModel() throws Exception { // TODO Auto-generated method stub } @Override public String save() throws Exception { // TODO Auto-generated method stub return null; } public Company getModel() { // TODO Auto-generated method stub return null; } //封装树的数据 public String getTree() throws Exception{ if(treeType==null){ treeType = TreeType.valueOf(Struts2Utils.getParameter("treeType")); } switch(treeType) { case COMPANY: log.debug("进入TreeAction,COMPANY"); renderText(ZTreeUtils.createCompanyTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; case MAN_DEPARTMENT_TREE: log.debug("进入TreeAction,MAN_DEPARTMENT_TREE"); renderText(ZTreeUtils.createDepartmentUserTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; case MAN_GROUP_TREE: log.debug("进入TreeAction,MAN_GROUP_TREE"); renderText(ZTreeUtils.createWorkgroupUserTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; case DEPARTMENT_TREE: log.debug("进入TreeAction,DEPARTMENT_TREE"); renderText(ZTreeUtils.createDepartmentsTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; case GROUP_TREE: log.debug("进入TreeAction,GROUP_TREE"); renderText(ZTreeUtils.createWorkgroupsTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; case DEPARTMENT_WORKGROUP_TREE: log.debug("进入TreeAction,DEPARTMENT_WORKGROUP_TREE"); renderText(ZTreeUtils.createDepartmentsAndWorkgroupsTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; default: return renderText(ZTreeUtils.createCompanyTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); } return null; } //树的搜索 public String searchZtree(){ if(treeType==null){ treeType = TreeType.valueOf(Struts2Utils.getParameter("treeType")); } switch(treeType) { case COMPANY: renderText(delComma(getParentDepartment().append(getParentWorkgroup()).toString())); break; case MAN_DEPARTMENT_TREE: renderText(ZTreeUtils.createDepartmentUserTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; case MAN_GROUP_TREE: renderText(ZTreeUtils.createWorkgroupUserTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); break; case DEPARTMENT_TREE: break; case GROUP_TREE: break; case DEPARTMENT_WORKGROUP_TREE: break; default: return renderText(ZTreeUtils.createCompanyTree(ContextUtils.getCompanyId(), ContextUtils.getCompanyName(),currentId)); } return null; } private StringBuilder getParentDepartment(){ StringBuilder result = new StringBuilder(); List<Department> depts= ApiFactory.getAcsService().getUpstageDepartmentsByUserLike(ContextUtils.getCompanyId(), searchValue); for(Department d : depts){ result.append("department_"+d.getId()).append(","); } return result; } private StringBuilder getParentWorkgroup(){ StringBuilder result = new StringBuilder(); List<Workgroup> wgs=ApiFactory.getAcsService().getWorkGroupsByUserLike(ContextUtils.getCompanyId(), searchValue); for(Workgroup w : wgs){ result.append("workgroup_"+w.getId()).append(","); } return result; } /** * 去逗号 * @param str * @return */ private static String delComma(String str){ if(StringUtils.endsWith(str, ","))str= str.substring(0,str.length() - 1); return str; } //弹出标准树 public String popZtree() throws IOException{ HttpServletResponse response = Struts2Utils.getResponse(); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); String webapp = PropUtils.getProp("host.app"); String resourceCtx=PropUtils.getProp("host.resources"); //得到树的数据请求地址 String actionUrl = ""; if("true".equals(leafEnable)){ actionUrl = webapp+"/portal/ztree.action"; }else{ actionUrl = webapp+"/portal/ztree.action?treeType="+treeType; } String searchUrl = webapp+"/portal/search-ztree.action?treeType="+treeType; String theme=ContextUtils.getTheme(); Map<String, Object> root=new HashMap<String, Object>(); root.put("ctx", webapp); root.put("actionUrl", actionUrl); root.put("searchUrl", searchUrl); root.put("treeType", treeType); root.put("chkStyle", (chkStyle==null||chkStyle.equals("undefined"))?"":chkStyle); root.put("chkboxType", (chkboxType==null||chkboxType.equals("undefined"))?"":chkboxType); root.put("theme",StringUtils.isEmpty(theme)?"black":theme); root.put("leafEnable",leafEnable); root.put("multiLeafList",createZtreeLeafList(multiLeafJson,treeType)); root.put("feedbackEnable",feedbackEnable); root.put("showInput",(StringUtils.isEmpty(showInput)||showInput.equals("undefined"))?"":showInput); root.put("showThing",(StringUtils.isEmpty(showThing)||showThing.equals("undefined"))?"":showThing); root.put("hiddenInput",(StringUtils.isEmpty(hiddenInput)||hiddenInput.equals("undefined"))?"":hiddenInput); root.put("hiddenThing",(StringUtils.isEmpty(hiddenThing)||hiddenThing.equals("undefined"))?"":hiddenThing); root.put("append",append); root.put("resourcesCtx",StringUtils.isEmpty(resourceCtx)?webapp:resourceCtx); try { writer.print(TagUtil.getContent(root, "tree/ztree-pop.ftl")); } catch (Exception e) { e.printStackTrace(); } return null; } //把multiLeafJson转换成list private List<ZtreeLeafPage> createZtreeLeafList(String multiLeafJson,TreeType treeType) { if(StringUtils.isEmpty(multiLeafJson)||multiLeafJson.equals("undefined")){ //给multiLeafList默认值 return JsonParser.json2List(ZtreeLeafPage.class, getDefaultMultiLeafJson(treeType)); }else{ return JsonParser.json2List(ZtreeLeafPage.class, multiLeafJson); } } //"[{'name':'公司树','type':'COMPANY','hiddenValue':'','showValue':''}]" //得到默认的多页签设置 private String getDefaultMultiLeafJson(TreeType treeType) { String result=""; switch(treeType) { case COMPANY: result = "[{'name':'公司树','type':'COMPANY','hiddenValue':'{\"user\":\"id\"}','showValue':'{\"user\":\"name\"}'}]"; break; case MAN_DEPARTMENT_TREE: result = "[{'name':'部门人员树','type':'MAN_DEPARTMENT_TREE','hiddenValue':'{\"user\":\"id\"}','showValue':'{\"user\":\"name\"}'}]"; break; case MAN_GROUP_TREE: result = "[{'name':'工作组人员树','type':'MAN_GROUP_TREE','hiddenValue':'{\"user\":\"id\"}','showValue':'{\"user\":\"name\"}'}]"; break; case DEPARTMENT_TREE: result = "[{'name':'部门树','type':'DEPARTMENT_TREE','hiddenValue':'{\"department\":\"id\"}','showValue':'{\"department\":\"name\"}'}]"; break; case GROUP_TREE: result = "[{'name':'工作组树','type':'GROUP_TREE','hiddenValue':'{\"workgroup\":\"id\"}','showValue':'{\"workgroup\":\"name\"}'}]"; break; case DEPARTMENT_WORKGROUP_TREE: result = "[{'name':'部门工作组树','type':'DEPARTMENT_WORKGROUP_TREE','hiddenValue':'{\"department\":\"id\",\"workgroup\":\"id\"}','showValue':'{\"department\":\"name\",\"workgroup\":\"name\"}'}]"; break; default: return "[{'name':'公司树','type':'COMPANY','hiddenValue':'{\"user\":\"name\"}','showValue':'{\"user\":\"name\"}'}]"; } return result; } //删除树的内容 public String removeZtree() throws Exception{ HttpServletResponse response = Struts2Utils.getResponse(); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); String webapp = Struts2Utils.getRequest().getContextPath(); String theme=ContextUtils.getTheme(); String resourceCtx=PropUtils.getProp("host.resources"); //封装参数 Map<String, Object> root=new HashMap<String, Object>(); root.put("resourceCtx",StringUtils.isEmpty(resourceCtx)?webapp:resourceCtx); root.put("theme",StringUtils.isEmpty(theme)?"black":theme); root.put("showInput",(StringUtils.isEmpty(showInput)||showInput.equals("undefined"))?"":showInput); root.put("hiddenInput",(StringUtils.isEmpty(hiddenInput)||hiddenInput.equals("undefined"))?"":hiddenInput); writer.print(TagUtil.getContent(root, "tree/ztree-remove.ftl")); return null; } public String getCurrentId() { return currentId; } public void setCurrentId(String currentId) { this.currentId = currentId; } public TreeType getTreeType() { return treeType; } public void setTreeType(String treeType) { this.treeType =TreeType.valueOf(treeType) ; } public String getTreeNodeShowContent() { return treeNodeShowContent; } public void setTreeNodeShowContent(String treeNodeShowContent) { ZTreeUtils.setTreeNodeShowContent(treeNodeShowContent); this.treeNodeShowContent = treeNodeShowContent; } public void setUserWithoutDeptVisible(boolean userWithoutDeptVisible) { ZTreeUtils.setUserWithoutDeptVisible(userWithoutDeptVisible); this.userWithoutDeptVisible =userWithoutDeptVisible; } public String getSearchValue() { return searchValue; } public void setSearchValue(String searchValue) { this.searchValue = searchValue; } public void setTreeNodeData(String treeNodeData) { ZTreeUtils.setTreeNodeData(treeNodeData); this.treeNodeData = treeNodeData; } public String getLeafEnable() { return leafEnable; } public void setLeafEnable(String leafEnable) { this.leafEnable = leafEnable; } public void setMultiLeafJson(String multiLeafJson) { this.multiLeafJson = multiLeafJson; } public void setAppend(String append) { this.append = append; } public void setOnlineVisible(boolean onlineVisible) { ZTreeUtils.setOnlineVisible(onlineVisible); this.onlineVisible = onlineVisible; } public void setMode(String mode) { this.mode = mode; } public void setChkStyle(String chkStyle) { this.chkStyle = chkStyle; } public void setChkboxType(String chkboxType) { this.chkboxType = chkboxType; } public String getFeedbackEnable() { return feedbackEnable; } public void setFeedbackEnable(String feedbackEnable) { this.feedbackEnable = feedbackEnable; } public String getShowInput() { return showInput; } public void setShowInput(String showInput) { this.showInput = showInput; } public String getShowThing() { return showThing; } public void setShowThing(String showThing) { this.showThing = showThing; } public String getHiddenInput() { return hiddenInput; } public void setHiddenInput(String hiddenInput) { this.hiddenInput = hiddenInput; } public String getHiddenThing() { return hiddenThing; } public void setHiddenThing(String hiddenThing) { this.hiddenThing = hiddenThing; } public String getDepartmentShow() { return departmentShow; } public void setDepartmentShow(String departmentShow) { ZTreeUtils.setDepartmentShow(departmentShow); this.departmentShow = departmentShow; } }