/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ package com.l2jserver.communityserver.model; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Collection; import java.util.Map; import java.util.logging.Logger; import javolution.util.FastMap; import com.l2jserver.communityserver.L2DatabaseFactory; import com.l2jserver.communityserver.model.Topic.ConstructorType; public class Post { private static Logger _log = Logger.getLogger(Post.class.getName()); // type public static final int ADVERTISE = 0; public static final int MISCELLANEOUS = 1; public static final int INFORMATION = 2; private final int _sqlDPId; private int _postId; private int _postOwnerId; private String _postRecipientList; private int _postParentId; private long _postDate; private int _postTopicId; private int _postForumId; private String _postTitle; private String _postTxt; private int _postType; private int _lastCommentId; private Map _comments; private int _readCount; /** * @param restore * @param t */ //public enum ConstructorType {REPLY, CREATE }; public Post(ConstructorType ct, final int sqlDPId, int postId, int postOwnerID,String recipentList,long date,int tid,int postForumID, String title, String txt, int type, int readCount) { _sqlDPId = sqlDPId; _postId = postId; _postOwnerId = postOwnerID; _postRecipientList = recipentList; _postDate = date; _postTopicId = tid; _postForumId = postForumID; _postTitle = title; _postTxt = txt; _postType = type; _postParentId = -1; _comments = new FastMap(); _readCount = readCount; if (ct == ConstructorType.CREATE) { insertindb(); } else { loadComments(); } } public Post(ConstructorType ct, final int sqlDPId, int postId, int postOwnerID, String recipentList,int postParentId, long date, int tid, int postForumID, String title, String txt, int type, int readCount) { _sqlDPId = sqlDPId; _postId = postId; _postOwnerId = postOwnerID; _postRecipientList = recipentList; _postDate = date; _postTopicId = tid; _postForumId = postForumID; _postTitle = title; _postTxt = txt; _postType = type; _postParentId = postParentId; _comments = new FastMap(); _readCount = readCount; if (ct == ConstructorType.CREATE) { insertindb(); } else { loadComments(); } } private void loadComments() { java.sql.Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("SELECT * FROM comments WHERE serverId=? AND comment_forum_id=? AND comment_topic_id=? AND comment_post_id=?"); statement.setInt(1, _sqlDPId); statement.setInt(2, _postForumId); statement.setInt(3, _postTopicId); statement.setInt(4, _postId); ResultSet result = statement.executeQuery(); while (result.next()) { int commentId = Integer.parseInt(result.getString("comment_id")); int commentOwner = Integer.parseInt(result.getString("comment_ownerid")); long date = Long.parseLong(result.getString("comment_date")); String text = result.getString("comment_txt"); Comment c = new Comment(ConstructorType.RESTORE, _sqlDPId, commentId, commentOwner, date, _postId, _postTopicId, _postForumId, text); _comments.put(commentId, c); if (commentId > _lastCommentId) _lastCommentId = commentId; } result.close(); statement.close(); } catch (Exception e) { _log.warning("data error on Forum " + _postForumId + " : " + e); e.printStackTrace(); } finally { try { con.close(); } catch (Exception e) { } } } public int getNewCommentId() { return ++_lastCommentId; } public void insertindb() { java.sql.Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("INSERT INTO posts (serverId, post_id,post_ownerid,post_recipient_list,post_date,post_topic_id,post_forum_id,post_txt,post_title,post_type,post_parent_id,post_read_count) values (?,?,?,?,?,?,?,?,?,?,?,?)"); statement.setInt(1, _sqlDPId); statement.setInt(2, _postId); statement.setInt(3, _postOwnerId); statement.setString(4, _postRecipientList); statement.setLong(5, _postDate); statement.setInt(6, _postTopicId); statement.setInt(7, _postForumId); statement.setString(8, _postTxt); statement.setString(9, _postTitle); statement.setInt(10, _postType); statement.setInt(11, _postParentId); statement.setInt(12, _readCount); statement.execute(); statement.close(); } catch (Exception e) { _log.warning("error while saving new Post to db " + e); } finally { try { con.close(); } catch (Exception e) { } } } public void deleteme() { for (Comment c: _comments.values()) c.deleteme(); _comments.clear(); java.sql.Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("DELETE FROM posts WHERE serverId=? AND post_forum_id=? AND post_topic_id=? AND post_id=?"); statement.setInt(1, _sqlDPId); statement.setInt(2, _postForumId); statement.setInt(3, _postTopicId); statement.setInt(4, _postId); statement.execute(); statement.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { con.close(); } catch (Exception e) { } } } /** * @param i */ private void updatePost() { java.sql.Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("UPDATE posts SET post_txt=?,post_title=?,post_recipient_list=?,post_read_count=? WHERE serverId=? AND post_id=? AND post_topic_id=? AND post_forum_id=?"); statement.setString(1, _postTxt); statement.setString(2, _postTitle); statement.setString(3, _postRecipientList); statement.setInt(4, _readCount); statement.setInt(5, _sqlDPId); statement.setInt(6, _postId); statement.setInt(7, _postTopicId); statement.setInt(8, _postForumId); statement.execute(); statement.close(); } catch (Exception e) { _log.warning("error while saving new Post to db " + e); } finally { try { con.close(); } catch (Exception e) { } } } public void clearComments() { _comments.clear(); } public int getCommentsSize() { return _comments.size(); } public Comment getComment(int j) { return _comments.get(j); } public void addComment(Comment c) { _comments.put(c.getID(), c); } public void rmCommentByID(int id) { _comments.get(id).deleteme(); _comments.remove(id); } public Collection getAllComments() { return _comments.values(); } /** * */ /** * @return */ public int getID() { return _postId; } public String getText() { return _postTxt; } public int getOwnerId() { return _postOwnerId; } public int getParentId() { return _postParentId; } public void updatePost(String newTitle, String newTxt) { _postTitle = newTitle; _postTxt = newTxt; updatePost(); } public void updatePost(String newTitle, String newTxt, int type) { _postTitle = newTitle; _postTxt = newTxt; _postType = type; updatePost(); } public void setTopic(int newTopicId, int newPostId) { _postTopicId = newTopicId; _postId = newPostId; insertindb(); } public String getRecipientList() { return _postRecipientList; } public String getTitle() { return _postTitle; } public Long getDate() { return _postDate; } public int getType() { return _postType; } public String getTypeName() { switch(_postType) { case ADVERTISE: return "[Advertise]"; case MISCELLANEOUS: return "[Miscellaneous]"; case INFORMATION: return "[Information]"; } return ""; } public int getReadCount() { return _readCount; } public void increaseReadCount() { _readCount++; updatePost(); } }