/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.portal.service.impl;
import java.util.List;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import com.jinhe.tss.core.cachepool.CacheManager;
import com.jinhe.tss.core.cachepool.Cacheable;
import com.jinhe.tss.core.cachepool.IPool;
import com.jinhe.tss.core.sso.context.Context;
import com.jinhe.tss.portal.PortalConstants;
import com.jinhe.tss.portal.dao.INavigatorDao;
import com.jinhe.tss.portal.entity.Navigator;
import com.jinhe.tss.portal.service.INavigatorService;
public class NavigatorService implements INavigatorService {
@Autowired private INavigatorDao dao;
public List<?> getAllNavigator(){
return dao.getEntities("from Navigator o order by o.decode");
}
public Navigator saveMenu(Navigator entity){
if( entity.getId() == null ) {
Long parentId = entity.getParentId();
Integer nextSeqNo = dao.getNextSeqNo(parentId);
entity.setSeqNo(nextSeqNo);
}
return dao.saveMenu(entity);
}
public void deleteMenu(Long id){
List<Navigator> children = dao.getChildrenById(id);
for( Navigator child : children ){
dao.deleteMenu(child);
}
}
public Navigator getNavigatorInfo(Long id){
return dao.getEntity(id);
}
public void disable(Long id, Integer disabled) {
List<Navigator> list;
if(PortalConstants.TRUE.equals(disabled)) {
list = dao.getChildrenById(id);
}
else {
list = dao.getParentsById(id);
}
for( Navigator temp : list ){
temp.setDisabled(disabled);
dao.updateWithoutFlush(temp);
}
}
public void sort(Long id, Long targetId, int direction) {
dao.sort(id, targetId, direction);
}
public List<?> getMenusByPortal(Long portalId) {
return dao.getMenusByPortal(portalId);
}
public void moveMenu(Long id, Long targetId, Long portalId) {
Navigator menu = dao.getEntity(id);
menu.setPortalId(portalId);
menu.setParentId(targetId);
menu.setSeqNo(dao.getNextSeqNo(targetId));
dao.saveMenu(menu);
}
public String getMenuXML(Long id) {
if( !Context.getIdentityCard().isAnonymous() ) {
return createMenuXML(id);
}
// 缓存只针对匿名用户访问进行缓存
IPool menuPool = CacheManager.getInstance().getCachePool(PortalConstants.MENU_CACHE);
Cacheable cachedMenu = menuPool.getObject(id);
if( cachedMenu == null ){
cachedMenu = menuPool.putObject(id, createMenuXML(id));
}
return (String) cachedMenu.getValue();
}
private String createMenuXML(Long id) {
Navigator menu = getNavigatorInfo(id);
List<Navigator> menuItems = dao.getMenuItemListByMenu(id);
Element node = menu.composeMenuNode(menuItems);
String menuStr = node == null ? "<MainMenu/>" : node.asXML();
return menuStr;
}
}