/* * Juick * Copyright (C) 2008-2013, Ugnich Anton * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package com.juick.server; import com.juick.Group; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; /** * * @author Ugnich Anton */ public class GroupsQueries { public static ArrayList getGroups(Connection sql, int uid) { ArrayList groups = new ArrayList(); PreparedStatement stmt = null; ResultSet rs = null; try { stmt = sql.prepareStatement("SELECT groups.group_id,groups.name,COUNT(groups_users.user_id) FROM groups LEFT JOIN groups_users USING(group_id) WHERE groups.user_id=? GROUP BY group_id"); stmt.setInt(1, uid); rs = stmt.executeQuery(); rs.beforeFirst(); while (rs.next()) { com.juick.Group g = new com.juick.Group(); g.GID = rs.getInt(1); g.Name = rs.getString(2); g.UsersCnt = rs.getInt(3); groups.add(g); } } catch (SQLException e) { System.err.println(e); } finally { Utils.finishSQL(rs, stmt); } return groups; } public static int getGroupID(Connection sql, int uid, String name) { int gid = 0; PreparedStatement stmt = null; ResultSet rs = null; try { stmt = sql.prepareStatement("SELECT group_id FROM groups WHERE user_id=? AND name=?"); stmt.setInt(1, uid); stmt.setString(2, name); rs = stmt.executeQuery(); if (rs.first()) { gid = rs.getInt(1); } } catch (SQLException e) { System.err.println(e); } finally { Utils.finishSQL(rs, stmt); } if (gid == 0) { try { stmt = sql.prepareStatement("INSERT INTO groups(user_id,name) VALUES (?)", Statement.RETURN_GENERATED_KEYS); stmt.setString(1, name); stmt.executeUpdate(); rs = stmt.getGeneratedKeys(); if (rs.first()) { gid = rs.getInt(1); } } catch (SQLException e) { System.err.println(e); } finally { Utils.finishSQL(rs, stmt); } } return gid; } public static boolean removeGroupUser(Connection sql, int gid, int uid) { boolean ret = false; PreparedStatement stmt = null; try { stmt = sql.prepareStatement("DELETE FROM groups_users WHERE group_id=? AND user_id=?"); stmt.setInt(1, gid); stmt.setInt(2, uid); if (stmt.executeUpdate() > 0) { ret = true; } } catch (SQLException e) { System.err.println(e); } finally { Utils.finishSQL(null, stmt); } if (ret) { int cnt = SQLHelpers.getInt(sql, "SELECT COUNT(*) FROM groups_users WHERE group_id=?", gid, -1); if (cnt == 0) { try { stmt = sql.prepareStatement("DELETE FROM groups WHERE group_id=?"); stmt.setInt(1, gid); stmt.executeUpdate(); } catch (SQLException e) { System.err.println(e); } finally { Utils.finishSQL(null, stmt); } } } return ret; } public static boolean addGroupUser(Connection sql, int gid, int uid) { boolean ret = false; PreparedStatement stmt = null; try { stmt = sql.prepareStatement("INSERT INTO groups_users(group_id,user_id) VALUES (?,?)"); stmt.setInt(1, gid); stmt.setInt(2, uid); if (stmt.executeUpdate() > 0) { ret = true; } } catch (SQLException e) { System.err.println(e); } finally { Utils.finishSQL(null, stmt); } return ret; } }