package com.norteksoft.mms.module.web;
import java.util.List;
import org.apache.commons.lang.xwork.StringUtils;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.beans.factory.annotation.Autowired;
import com.norteksoft.mms.module.entity.Button;
import com.norteksoft.mms.module.entity.Menu;
import com.norteksoft.mms.module.entity.ModulePage;
import com.norteksoft.mms.module.enumeration.ViewType;
import com.norteksoft.mms.module.service.ButtonManager;
import com.norteksoft.mms.module.service.MenuManager;
import com.norteksoft.mms.module.service.ModulePageManager;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.JsTreeUtils;
import com.norteksoft.product.web.struts2.CrudActionSupport;
import com.norteksoft.product.web.struts2.Struts2Utils;
@Namespace("/module")
@ParentPackage("default")
@Results( { @Result(name = CrudActionSupport.RELOAD, location = "button", type = "redirectAction")})
public class ButtonAction extends CrudActionSupport<Button> {
private static final long serialVersionUID = 1L;
private List<Button> buttons;
private Button button;
private Long id;
private String code;
private Long pageId;
private Long menuId;
private Integer currentDisplayOrder;
private String currentId;
private static final String SUCCESS_MESSAGE_LEFT = "<font class=\"onSuccess\"><nobr>";
private static final String MESSAGE_RIGHT = "</nobr></font>";
private static final String ERROR_MESSAGE_LEFT = "<font class=\"onError\"><nobr>";
private ButtonManager buttonManager;
private MenuManager menuManager;
private ModulePageManager modulePageManager;
//列表需要的字段
private ModulePage modulePage;
private String rowid;
@Autowired
public void setMenuManager(MenuManager menuManager) {
this.menuManager = menuManager;
}
@Autowired
public void setModulePageManager(ModulePageManager modulePageManager) {
this.modulePageManager = modulePageManager;
}
@Autowired
public void setButtonManager(ButtonManager buttonManager) {
this.buttonManager = buttonManager;
}
private void addErrorMessage(String message){
this.addActionMessage(ERROR_MESSAGE_LEFT+message+MESSAGE_RIGHT);
}
private void addSuccessMessage(String message){
this.addActionMessage(SUCCESS_MESSAGE_LEFT+message+MESSAGE_RIGHT);
}
@Override
public String delete() throws Exception {
buttonManager.deleteButton(id);
String callback=Struts2Utils.getParameter("callback");
ApiFactory.getBussinessLogService().log("系统元数据管理/按钮管理",
"删除按钮",
ContextUtils.getSystemId("mms"));
this.renderText(callback+"({msg:'删除成功'})");
return null;
}
@Override
public String input() throws Exception {
return INPUT;
}
@Override
public String list() throws Exception {
//buttons = buttonManager.getButtons(pageId);
modulePage = modulePageManager.getModulePage(pageId);
ViewType viewType = modulePage.getViewType();
Boolean sign = buttonManager.isButtonExist(pageId);
if(sign){
if(viewType.equals(ViewType.LIST_VIEW)){
//buttons = buttonManager.createDefaultListButton(pageId);
buttonManager.saveDefaultListButton(pageId);
}else{
//buttons = buttonManager.createDefaultFormButton(pageId);
buttonManager.saveDefaultFormButton(pageId);
}
}
ApiFactory.getBussinessLogService().log("系统元数据管理/按钮管理",
"按钮列表",
ContextUtils.getSystemId("mms"));
return SUCCESS;
}
@Override
protected void prepareModel() throws Exception {
if(id==null){
button=new Button();
}else{
button=buttonManager.getButton(id);
}
}
@Override
public String save() throws Exception {
return null;
}
@SuppressWarnings("unchecked")
public String saveButtons() throws Exception {
//Map<String,String[]> parameterMap=Struts2Utils.getRequest().getParameterMap();
buttonManager.save(pageId);
ApiFactory.getBussinessLogService().log("系统元数据管理/按钮管理",
"保存按钮",
ContextUtils.getSystemId("mms"));
addSuccessMessage("保存成功");
return list();
}
public String validateCode() throws Exception {
Boolean isCodeExist=buttonManager.isCodeExist(code,pageId);
if(isCodeExist){
this.renderText("true");
}else{
this.renderText("false");
}
return null;
}
public String selectPage() throws Exception{
return "selectPage";
}
/**
* 菜单页面树
*/
public String pageTree() throws Exception {
StringBuilder tree = new StringBuilder();
String[] str=currentId.split(";");
if("0".equals(currentId)){
tree.append(defaultTree(menuId));
}else if("menu".equals(str[str.length-1])){
tree.append(defaultTree(Long.parseLong(str[0])));
}
renderText(tree.toString());
return null;
}
private String defaultTree(Long menuId){
Menu menu=menuManager.getMenu(menuManager.getRootMenu(menuId).getId());
StringBuilder tree = new StringBuilder("[ ");
List<Menu> children=menuManager.getChildrenEnabledMenus(menu.getId());
if(children==null||children.size()<=0){
List<ModulePage> modulePages=modulePageManager.getEnableModulePagesByMenuId(menu.getId());
if(modulePages.size()>0){
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString()+";"+menu.getName()+";menu", "open", menu.getName()+"(菜单)",childModulePage(modulePages),"")).append(",");
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString()+";"+menu.getName()+";menu", "close", menu.getName()+"(菜单)","")).append(",");
}
}else{
String pageTree=childModulePage(modulePageManager.getModulePagesByMenuId(menu.getId())).toString();
String childs=childMenu(children);
if(StringUtils.isNotEmpty(pageTree)){
childs=childs+","+pageTree;
}
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString()+";"+menu.getName()+";menu", "open", menu.getName()+"(菜单)",childs,"")).append(",");
}
JsTreeUtils.removeLastComma(tree);
tree.append(" ]");
return tree.toString();
}
/*
* 递归菜单父子关系,形成tree
*/
private String childMenu(List<Menu> menus){
java.util.Collections.sort(menus);
StringBuilder tree = new StringBuilder();
for(Menu menu :menus){
List<Menu> children=menuManager.getChildrenEnabledMenus(menu.getId());
if(children==null||children.size()<=0){
List<ModulePage> modulePages=modulePageManager.getEnableModulePagesByMenuId(menu.getId());
if(modulePages.size()>0){
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString()+";"+menu.getName()+";menu", "open", menu.getName()+"(菜单)",childModulePage(modulePages),"")).append(",");
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString()+";"+menu.getName()+";menu", "close", menu.getName()+"(菜单)","")).append(",");
}
}else{
String pageTree=childModulePage(modulePageManager.getModulePagesByMenuId(menu.getId())).toString();
String childs=childMenu(children);
if(StringUtils.isNotEmpty(pageTree)){
childs=childs+","+pageTree;
}
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString()+";"+menu.getName()+";menu", "open", menu.getName()+"(菜单)",childs,"")).append(",");
}
}
JsTreeUtils.removeLastComma(tree);
return tree.toString();
}
private String childModulePage(List<ModulePage> modulePages){
java.util.Collections.sort(modulePages);
StringBuilder tree = new StringBuilder();
for(ModulePage modulePage :modulePages){
tree.append(JsTreeUtils.generateJsTreeNodeNew(modulePage.getId().toString()+";"+modulePage.getName()+";view", "close", modulePage.getName()+"(页面)","")).append(",");
}
JsTreeUtils.removeLastComma(tree);
return tree.toString();
}
public String showEvent() throws Exception{
return "event";
}
public Button getModel() {
return button;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public void setCode(String code) {
this.code = code;
}
public List<Button> getButtons() {
return buttons;
}
public Integer getCurrentDisplayOrder() {
return currentDisplayOrder;
}
public void setCurrentDisplayOrder(Integer currentDisplayOrder) {
this.currentDisplayOrder = currentDisplayOrder;
}
public Long getMenuId() {
return menuId;
}
public void setMenuId(Long menuId) {
this.menuId = menuId;
}
public Long getPageId() {
return pageId;
}
public void setPageId(Long pageId) {
this.pageId = pageId;
}
public void setCurrentId(String currentId) {
this.currentId = currentId;
}
public ModulePage getModulePage() {
return modulePage;
}
public void setModulePage(ModulePage modulePage) {
this.modulePage = modulePage;
}
public String getRowid() {
return rowid;
}
public void setRowid(String rowid) {
this.rowid = rowid;
}
}