📄 mucpersistencemanager.java
字号:
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
/**
* Updates the room's lock status in the database.
*
* @param room the room to update its lock status in the database.
*/
public static void updateRoomEmptyDate(MUCRoom room) {
if (!room.isPersistent() || !room.wasSavedToDB()) {
return;
}
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(UPDATE_EMPTYDATE);
Date emptyDate = room.getEmptyDate();
if (emptyDate == null) {
pstmt.setString(1, null);
}
else {
pstmt.setString(1, StringUtils.dateToMillis(emptyDate));
}
pstmt.setLong(2, room.getID());
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
/**
* Update the DB with the new affiliation of the user in the room. The new information will be
* saved only if the room is_persistent and has already been saved to the database previously.
*
* @param room The room where the affiliation of the user was updated.
* @param bareJID The bareJID of the user to update this affiliation.
* @param nickname The reserved nickname of the user in the room or null if none.
* @param newAffiliation the new affiliation of the user in the room.
* @param oldAffiliation the previous affiliation of the user in the room.
*/
public static void saveAffiliationToDB(MUCRoom room, String bareJID, String nickname,
MUCRole.Affiliation newAffiliation, MUCRole.Affiliation oldAffiliation)
{
if (!room.isPersistent() || !room.wasSavedToDB()) {
return;
}
if (MUCRole.Affiliation.none == oldAffiliation) {
if (MUCRole.Affiliation.member == newAffiliation) {
// Add the user to the members table
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(ADD_MEMBER);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.setString(3, nickname);
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
else {
// Add the user to the generic affiliations table
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(ADD_AFFILIATION);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.setInt(3, newAffiliation.getValue());
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
}
else {
if (MUCRole.Affiliation.member == newAffiliation &&
MUCRole.Affiliation.member == oldAffiliation)
{
// Update the member's data in the member table.
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(UPDATE_MEMBER);
pstmt.setString(1, nickname);
pstmt.setLong(2, room.getID());
pstmt.setString(3, bareJID);
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
else if (MUCRole.Affiliation.member == newAffiliation) {
Connection con = null;
PreparedStatement pstmt = null;
boolean abortTransaction = false;
try {
// Remove the user from the generic affiliations table
con = DbConnectionManager.getTransactionConnection();
pstmt = con.prepareStatement(DELETE_AFFILIATION);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.executeUpdate();
pstmt.close();
// Add them as a member.
pstmt = con.prepareStatement(ADD_MEMBER);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.setString(3, nickname);
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
abortTransaction = true;
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
DbConnectionManager.closeTransactionConnection(con, abortTransaction);
}
}
else if (MUCRole.Affiliation.member == oldAffiliation) {
Connection con = null;
PreparedStatement pstmt = null;
boolean abortTransaction = false;
try {
con = DbConnectionManager.getTransactionConnection();
pstmt = con.prepareStatement(DELETE_MEMBER);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.executeUpdate();
pstmt.close();
pstmt = con.prepareStatement(ADD_AFFILIATION);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.setInt(3, newAffiliation.getValue());
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
abortTransaction = true;
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
DbConnectionManager.closeTransactionConnection(con, abortTransaction);
}
}
else {
// Update the user in the generic affiliations table.
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(UPDATE_AFFILIATION);
pstmt.setInt(1, newAffiliation.getValue());
pstmt.setLong(2, room.getID());
pstmt.setString(3, bareJID);
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
}
}
/**
* Removes the affiliation of the user from the DB if the room is persistent.
*
* @param room The room where the affiliation of the user was removed.
* @param bareJID The bareJID of the user to remove his affiliation.
* @param oldAffiliation the previous affiliation of the user in the room.
*/
public static void removeAffiliationFromDB(MUCRoom room, String bareJID,
MUCRole.Affiliation oldAffiliation)
{
if (room.isPersistent() && room.wasSavedToDB()) {
if (MUCRole.Affiliation.member == oldAffiliation) {
// Remove the user from the members table
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(DELETE_MEMBER);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
else {
// Remove the user from the generic affiliations table
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(DELETE_AFFILIATION);
pstmt.setLong(1, room.getID());
pstmt.setString(2, bareJID);
pstmt.executeUpdate();
}
catch (SQLException sqle) {
Log.error(sqle);
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
}
}
/**
* Saves the conversation log entry to the database.
*
* @param entry the ConversationLogEntry to save to the database.
* @return true if the ConversationLogEntry was saved successfully to the database.
*/
public static boolean saveConversationLogEntry(ConversationLogEntry entry) {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(ADD_CONVERSATION_LOG);
pstmt.setLong(1, entry.getRoomID());
pstmt.setString(2, entry.getSender().toString());
pstmt.setString(3, entry.getNickname());
pstmt.setString(4, StringUtils.dateToMillis(entry.getDate()));
pstmt.setString(5, entry.getSubject());
pstmt.setString(6, entry.getBody());
pstmt.executeUpdate();
return true;
}
catch (SQLException sqle) {
Log.error("Error saving conversation log entry", sqle);
return false;
}
finally {
try { if (pstmt != null) pstmt.close(); }
catch (Exception e) { Log.error(e); }
try { if (con != null) con.close(); }
catch (Exception e) { Log.error(e); }
}
}
/**
* Returns an integer based on the binary representation of the roles to broadcast.
*
* @param room the room to marshall its roles to broadcast.
* @return an integer based on the binary representation of the roles to broadcast.
*/
private static int marshallRolesToBroadcast(MUCRoom room) {
StringBuilder buffer = new StringBuilder();
buffer.append((room.canBroadcastPresence("moderator") ? "1" : "0"));
buffer.append((room.canBroadcastPresence("participant") ? "1" : "0"));
buffer.append((room.canBroadcastPresence("visitor") ? "1" : "0"));
return Integer.parseInt(buffer.toString(), 2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -