package org.itat.message.dao;
import java.io.File;
import java.util.List;
import javax.annotation.Resource;
import org.itat.message.idao.IAttachmentDao;
import org.itat.message.iservice.IIndexService;
import org.itat.message.util.IndexUtil;
import org.itat.message.util.SystemContext;
import org.itat.message.vo.Attachment;
import org.springframework.stereotype.Repository;
@Repository("attachmentDao")
public class AttachmentDao extends BaseDao<Attachment> implements
		IAttachmentDao{
	
	private IIndexService indexService;
	
	public IIndexService getIndexService() {
		return indexService;
	}
	@Resource
	public void setIndexService(IIndexService indexService) {
		this.indexService = indexService;
	}
	public void deletbyMsg(int msgId) {
		deleteFile(msgId);
		super.updateByHql("delete a from Attachment a where a.message=?",msgId);
	}
	
	/**
	 * 删除附件的文件
	 */
	@SuppressWarnings("unchecked")
	private void deleteFile(int msgId) {
		List<Object[]> files = this.getSession()
			.createQuery("select id,newName,message.id from Attachment where message.id=?")
			.setParameter(0, msgId).list();
		String realPath = SystemContext.getRealPath()+"/upload/";
		for(Object[] fn:files) {
			File f = new File(realPath+fn[1]);
			String id = fn[2]+"_"+fn[0];
			indexService.deleteIndex(id,IndexUtil.ATTACHMENT_TYPE);
			f.delete();
		}
								
	}
	@Override
	public void deletebyId(int id) {
		Attachment attachment = load(id);
		delete(attachment);
	}
	@Override
	public boolean delByObj(Attachment t) {
		String realPath = SystemContext.getRealPath()+"/upload/";
		File f = new File(realPath+t.getNewName());
		boolean b = f.delete();
		if(b) delete(t);
		return b;
	}
	@Override
	public List<Attachment> listByMessage(int msgId) {
		return this.list("select a from Attachment a left join fetch a.message m where m.id=?",msgId);
	}
}