package com.norteksoft.mms.module.web;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
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.form.entity.FormView;
import com.norteksoft.mms.form.entity.ListColumn;
import com.norteksoft.mms.form.entity.ListView;
import com.norteksoft.mms.form.service.FormViewManager;
import com.norteksoft.mms.form.service.ListViewManager;
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.MenuManager;
import com.norteksoft.mms.module.service.ModulePageManager;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.JsTreeUtils;
import com.norteksoft.product.util.PageUtils;
import com.norteksoft.product.web.struts2.CrudActionSupport;
@Namespace("/module")
@ParentPackage("default")
@Results( { @Result(name = CrudActionSupport.RELOAD, location = "module-page", type = "redirectAction")})
public class ModulePageAction extends CrudActionSupport<ModulePage> {
private static final long serialVersionUID = 1L;
private static final String SUCCESS_MESSAGE_LEFT = "<font class=\"onSuccess\"><nobr>";
private static final String ERROR_MESSAGE_LEFT = "<font class=\"onError\"><nobr>";
private static final String MESSAGE_RIGHT = "</nobr></font>";
private static final String FROM_BOTTON_VIEW = "fromBottonView";
private Page<ModulePage> page=new Page<ModulePage>(0,true);
private ModulePage modulePage;
private Long pageId;
private Long menuId;
private String pageIds;
private Long viewId;
private List<Button> listBtns=new ArrayList<Button>();
private String myCode;
private String viewCode;//视图的编号
private String type;
private String html;
private MenuManager menuManager;
private ModulePageManager modulePageManager;
private FormViewManager formViewManager;
private ListViewManager listViewManager;
private List<FormView> formViews;
private List<ListView> listViews;
private List<ListColumn> listViewColumns;
private String fromBottonView;//判断是否是button的预览
@Autowired
public void setMenuManager(MenuManager menuManager) {
this.menuManager = menuManager;
}
@Autowired
public void setModulePageManager(ModulePageManager modulePageManager) {
this.modulePageManager = modulePageManager;
}
@Autowired
public void setFormViewManager(FormViewManager formViewManager) {
this.formViewManager = formViewManager;
}
@Autowired
public void setListViewManager(ListViewManager listViewManager) {
this.listViewManager = listViewManager;
}
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
@Action("module-page-delete")
public String delete() throws Exception {
String msg=modulePageManager.deleteModulePages(pageIds);
if(msg!=null){
addSuccessMessage(msg);
}
ApiFactory.getBussinessLogService().log("页面管理",
"删除页面",
ContextUtils.getSystemId("mms"));
return list();
}
@Override
public String input() throws Exception {
if(pageId==null)pageId=modulePage.getId();
if(modulePage.getView()!=null){
viewId=modulePage.getView().getId();
}
ApiFactory.getBussinessLogService().log("页面管理",
"页面表单",
ContextUtils.getSystemId("mms"));
return INPUT;
}
@Override
@Action("module-page-list")
public String list() throws Exception {
List<Menu> menus = menuManager.getEnabledRootMenuByCompany();
if(menuId==null&&menus.size()>0){
menuId = menus.get(0).getId();
}
if(menuId!=null){
if(page.getPageSize()>1){
modulePageManager.getModulePagesByMenuId(page,menuId);
ApiFactory.getBussinessLogService().log("页面管理",
"页面列表",
ContextUtils.getSystemId("mms"));
this.renderText(PageUtils.pageToJson(page));
return null;
}
}
return "module-page-list";
}
@Override
public String save() throws Exception {
if(viewId!=null){
if(ViewType.LIST_VIEW.toString().equals(modulePage.getViewType().toString())){
modulePage.setView(listViewManager.getView(viewId));
}else if(ViewType.FORM_VIEW.toString().equals(modulePage.getViewType().toString())){
modulePage.setView(formViewManager.getFormView(viewId));
}
}
modulePageManager.saveModulePage(modulePage);
ApiFactory.getBussinessLogService().log("页面管理",
"保存页面",
ContextUtils.getSystemId("mms"));
addSuccessMessage("保存成功");
return input();
}
/**
* 菜单树
*
*/
public String tree() throws Exception {
List<Menu> menus = menuManager.getEnabledRootMenuByCompany();
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){
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString(), "close", menu.getName(),"")).append(",");
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString(), "close", menu.getName(),childMenu(children),"")).append(",");
}
}
JsTreeUtils.removeLastComma(tree);
tree.append(" ]");
renderText(tree.toString());
return null;
}
/*
* 递归菜单父子关系,形成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){
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString(), "", menu.getName(),"")).append(",");
}else{
tree.append(JsTreeUtils.generateJsTreeNodeNew(menu.getId().toString(), "close", menu.getName(),childMenu(children),"")).append(",");
}
}
JsTreeUtils.removeLastComma(tree);
return tree.toString();
}
@Action("module-page-defaultDisplaySet")
public String defaultDisplaySet() throws Exception {
ModulePage modulePage=modulePageManager.getModulePage(pageId);
String before=modulePage.getDefaultDisplay()?"是":"否";
if(modulePageManager.defaultDisplaySet(pageId,menuId)){
modulePage=modulePageManager.getModulePage(pageId);
String end=modulePage.getDefaultDisplay()?"是":"否";
addSuccessMessage("设置默认:"+before+"-->"+end);
}else{
addErrorMessage("当前菜单中已有默认显示的页面");
}
ApiFactory.getBussinessLogService().log("页面管理",
"设置默认页面",
ContextUtils.getSystemId("mms"));
return list();
}
@Action("module-page-enableSet")
public String enableSet() throws Exception {
addSuccessMessage(modulePageManager.enableSet(pageIds));
ApiFactory.getBussinessLogService().log("页面管理",
"启用页面",
ContextUtils.getSystemId("mms"));
return list();
}
public String validateCode() throws Exception{
this.renderText(modulePageManager.isCodeExist(myCode,pageId).toString());
return null;
}
public String preview() throws Exception{
if(pageId!=null){
ModulePage modulePage = modulePageManager.getModulePage(pageId);
if(modulePage!=null){
myCode=modulePage.getCode();
viewCode = modulePage.getView().getCode();
type=modulePage.getViewType().toString();
ApiFactory.getBussinessLogService().log("页面管理",
"预览页面",
ContextUtils.getSystemId("mms"));
return "list-view-preview";
}
}
return null;
}
/**
* 选择表单列表
* @return
* @throws Exception
*/
@Action("module-page-showViews")
public String showViews() throws Exception{
StringBuilder tree = new StringBuilder("[ ");
if(ViewType.LIST_VIEW.toString().equals(type)){
listViews=listViewManager.getListViewsBySystem(menuId);
for(ListView view:listViews){
tree.append(JsTreeUtils.generateJsTreeNodeNew(view.getId()+"-"+view.getName(), "", view.getName(),"")).append(",");
}
}else if(ViewType.FORM_VIEW.toString().equals(type)){
formViews=formViewManager.getFormViewsBySystem(menuId);
for(FormView view:formViews){
tree.append(JsTreeUtils.generateJsTreeNodeNew(view.getId()+"-"+view.getName(), "", view.getName()+"("+view.getVersion()+")","")).append(",");
}
}
JsTreeUtils.removeLastComma(tree);
tree.append(" ]");
renderText(tree.toString());
return null;
}
@Override
protected void prepareModel() throws Exception {
if(pageId==null || pageId.intValue()==0){
modulePage = new ModulePage();
}else{
modulePage = modulePageManager.getModulePage(pageId);
}
if(menuId!=null && menuId.intValue()!=0){
modulePage.setMenuId(menuId);
}
}
public ModulePage getModel() {
return modulePage;
}
public Long getPageId() {
return pageId;
}
public void setPageId(Long pageId) {
this.pageId = pageId;
}
public Page<ModulePage> getPage() {
return page;
}
public void setMenuId(Long menuId) {
this.menuId = menuId;
}
public Long getMenuId() {
return menuId;
}
public void setPageIds(String pageIds) {
this.pageIds = pageIds;
}
public List<Button> getListBtns() {
return listBtns;
}
public void setListBtns(List<Button> listBtns) {
this.listBtns = listBtns;
}
public void setType(String type) {
this.type = type;
}
public List<FormView> getFormViews() {
return formViews;
}
public List<ListView> getListViews() {
return listViews;
}
public void setViewId(Long viewId) {
this.viewId = viewId;
}
public Long getViewId() {
return viewId;
}
public void setMyCode(String myCode) {
this.myCode = myCode;
}
public List<ListColumn> getListViewColumns() {
return listViewColumns;
}
public String getHtml() {
return html;
}
public String getFromBottonView() {
return fromBottonView;
}
public void setFromBottonView(String fromBottonView) {
this.fromBottonView = fromBottonView;
}
public String getMyCode() {
return myCode;
}
public String getViewCode() {
return viewCode;
}
public void setViewCode(String viewCode) {
this.viewCode = viewCode;
}
public String getType() {
return type;
}
}