/* ==================================================================
* 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.dao.impl;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.jinhe.tss.component.support.persistence.TreeSupportDao;
import com.jinhe.tss.core.util.FileHelper;
import com.jinhe.tss.core.util.URLUtil;
import com.jinhe.tss.portal.dao.IElementDao;
import com.jinhe.tss.portal.entity.ElementGroup;
import com.jinhe.tss.portal.helper.IElement;
public class ElementDao extends TreeSupportDao<ElementGroup> implements IElementDao {
public ElementDao() {
super(ElementGroup.class);
}
public IElement saveElement(IElement obj) {
if(obj.getId() == null) {
return (IElement) createObject(obj);
}
update(obj);
return obj;
}
public IElement deleteElement(IElement element){
delete(element);
// 删除资源文件
URL url = URLUtil.getWebFileUrl(element.getResourceBaseDir());
File path = new File(url.getPath());
File fileDir = FileHelper.findPathByName(path, element.getCode() + element.getId());
if (fileDir != null) {
FileHelper.deleteFile(fileDir);
}
return element;
}
public IElement moveTo(IElement element) {
return saveElement(element);
}
/*****************************************************************************************************************
************************************ 以下是对元素(修饰器/布局器/Portlet)组的操作 *************************************
*****************************************************************************************************************/
public ElementGroup saveGroup(ElementGroup group){
if(group.getId() == null) {
return create(group);
}
update(group);
return group;
}
public void deleteGroup(ElementGroup group){
List<ElementGroup> groups = getChildrenById(group.getId());
List<Long> groupIds = new ArrayList<Long>();
for ( ElementGroup temp : groups ){
groupIds.add(temp.getId());
delete(temp); //删除组
}
if(groupIds.isEmpty()) return;
//删除元素
String hql = "from " + group.getClassNameByType() + " t where t.groupId in (:groupIds) order by t.decode";
List<?> elements = getEntities(hql, new Object[]{"groupIds"}, new Object[]{groupIds});
for ( Object temp : elements ) {
deleteElement((IElement) temp);
}
}
public List<ElementGroup> getChildrenById(Long groupId) {
ElementGroup group = getEntity(groupId);
List<ElementGroup> children = super.getChildrenById(groupId);
for( Iterator<ElementGroup> it = children.iterator(); it.hasNext(); ) {
if( !it.next().getType().equals(group.getType())) {
it.remove();
}
}
return children;
}
//注:子组的decode值可能和父组下的某个组件decode值相同,所以这里条件过滤要加上t.decode <> 子组decode
public List<?> getAllElementsByGroup(Long groupId) {
ElementGroup group = getEntity(groupId);
String hql = "from " + group.getClassNameByType() + " t where t.decode like ? and t.decode <> ? order by t.decode";
return getEntities(hql, group.getDecode() + "%", group.getDecode());
}
public List<?> getElementsByGroup( Long groupId ) {
ElementGroup group = getEntity(groupId);
String hql = "from " + group.getClassNameByType() + " t where t.groupId = ? order by t.decode";
return getEntities(hql, groupId);
}
}