package cn.newgxu.bbs.service.impl;
import java.util.LinkedList;
import java.util.List;
import cn.newgxu.bbs.common.exception.BBSException;
import cn.newgxu.bbs.common.exception.BBSExceptionMessage;
import cn.newgxu.bbs.common.util.Util;
import cn.newgxu.bbs.domain.Topic;
import cn.newgxu.bbs.domain.message.Message;
import cn.newgxu.bbs.domain.message.MessageFolder;
import cn.newgxu.bbs.domain.user.User;
import cn.newgxu.bbs.service.MessageService;
import cn.newgxu.bbs.web.model.message.DelMessageModel;
import cn.newgxu.bbs.web.model.message.MessageModel;
import cn.newgxu.bbs.web.model.message.SendMessageModel;
import cn.newgxu.jpamodel.ObjectNotFoundException;
/**
*
* @author 红叶狐
* @since 4.0.0
* @version $Revision 1.1$
*/
public class MessageServiceImpl implements MessageService {
public MessageFolder getFolder(User user, int fid) throws BBSException {
try {
MessageFolder folder = MessageFolder.get(fid);
if (fid > 3 && !folder.getUser().equals(user)) {
throw new BBSException("您无权打开此信箱");
}
return folder;
} catch (ObjectNotFoundException e) {
throw new BBSException("您无权打开此信箱");
}
}
public void message(MessageModel model) throws BBSException {
Message message;
try {
message = Message.get(model.getId());
} catch (ObjectNotFoundException e) {
throw new BBSException(BBSExceptionMessage.PARAMETER_ERROR);
}
if (!message.getUser().equals(model.getUser())) {
throw new BBSException("您无权浏览此信息");
}
message.setReaded(true);
message.save();
model.setMessage(message);
}
public void messageList(MessageModel model) throws BBSException {
User user = model.getUser();
MessageFolder folder = getFolder(user, model.getFolderId());
int size = Message.getMessageSize(user, folder);
if (size > folder.getSize()) {
size = folder.getSize();
}
model.setFolder(folder);
model.getPagination().setRecordSize(size);
model.setMessages(Message.getMessages(user, folder, model
.getPagination()));
}
public void sendMessage(SendMessageModel model) throws BBSException {
if (model.getUserId() > 0) {
try {
model.setUsers(User.get(model.getUserId()).getNick());
// 在消息模型中增加Topic,为管理员操作(发送系统信息做准备)2010-6-10 12:39
model.setTopic(Topic.get(model.getTopicId()));
} catch (ObjectNotFoundException e) {
}
}
if (model.getSmid() > 0) {
Message message;
try {
message = Message.get(model.getSmid());
if (message.getFolder().getId() == 2
&& model.getUser().isOwnMessage(message)) {
model.setUsers(message.getReceivers());
model.setTitle(message.getTitle());
model.setContent(message.getContent());
}
} catch (ObjectNotFoundException e) {
}
}
String action = model.getAction();
if (action != null) {
String msg = null;
// 如果是删帖操作,则设置默认消息
if (action.equals("delete")) {
msg = "你好,你在论坛【" + model.getTopic().getForum().getName()
+ "】 版块发布(回复)的帖子 〖" + model.getTopic().getTitle()
+ "〗 因违反了论坛规定,现已删除,请仔细阅读论坛发帖规定";
} else if (action.equals("lock")) {
msg = "你好,你在论坛【" + model.getTopic().getForum().getName()
+ "】 版块发布(回复)的帖子 〖" + model.getTopic().getTitle()
+ "〗 因违反了论坛规定,现已锁定,请仔细阅读论坛发帖规定";
}
model.setContent(msg);
}
}
public void sendMessageDo(SendMessageModel model) throws BBSException {
User user = model.getUser();
if ("1".equals(model.getDraft())) {
// 保存到草稿箱
if (model.getSmid() > 0) {
try {
Message message = Message.get(model.getSmid());
if (user.isOwnMessage(message)) {
message.setReceivers(model.getUsers());
message.setTitle(model.getTitle());
message.setContent(model.getContent());
message.save();
return;
}
} catch (ObjectNotFoundException e) {
}
}
Message.saveDraftMessage(model.getTitle(), model.getContent(),
model.getFace(), user, model.getUsers());
return;
}
List<String> nicks = Util.splitNicks(model.getUsers());
// 接收者
List<User> receivers = new LinkedList<User>();
// 错误昵称,用户不存在
String notExistUsers = "";
for (int i = 0; i < nicks.size(); i++) {
String nick = (String) nicks.get(i);
try {
User receiver = User.getByNick(nick);
receivers.add(receiver);
} catch (ObjectNotFoundException e) {
notExistUsers += nick + ",";
}
}
if (notExistUsers.length() > 0) {
throw new BBSException("以下用户昵称不存在:" + notExistUsers + "请重新填写!");
}
// 发送
Message.sendMessage(model.getTitle(), model.getContent(), model
.getFace(), receivers, user, model.getUsers());
// 保存到已发送
if ("1".equals(model.getTrack())) {
Message.saveTrackMessage(model.getTitle(), model.getContent(),
model.getFace(), user, model.getUsers());
return;
}
}
public void delMessage(DelMessageModel model) throws BBSException {
User user = model.getUser();
int[] smids = model.getSmid();
for (int i = 0; i < smids.length; i++) {
Message message;
try {
message = Message.get(smids[i]);
if (user.isOwnMessage(message)) {
message.setReaded(true);
message.setDel(true);
message.save();
}
} catch (ObjectNotFoundException e) {
e.printStackTrace();
}
}
}
}