view src/nabble/model/TagImpl.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line source

package nabble.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import fschmidt.db.postgres.DbDatabaseImpl;


final class TagImpl {

	private TagImpl() {}  // never

	static void addTag(Site site,Node node,User user,String label) {
		try {
			Connection con = site.getDb().getConnection();
			PreparedStatement stmt = con.prepareStatement(
				"insert into tag (node_id,user_id,label) values (?,?,?)"
			);
			if( node == null ) {
				stmt.setNull( 1, Types.INTEGER );
			} else {
				stmt.setLong( 1, node.getId() );
			}
			if( user == null ) {
				stmt.setNull( 2, Types.INTEGER );
			} else {
				stmt.setLong( 2, user.getId() );
			}
			stmt.setString( 3, label );
			DbDatabaseImpl.executeUpdateIgnoringDuplicateKeys(stmt);
			stmt.close();
			con.close();
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}
	}

	static int countTags(SiteKey siteKey,String sqlCondition) {
		try {
			Connection con = siteKey.getDb().getConnection();
			try {
				Statement stmt = con.createStatement();
				ResultSet rs = stmt.executeQuery(
					"select count(*) as n from tag where " + sqlCondition
				);
				rs.next();
				int n = rs.getInt("n");
				rs.close();
				stmt.close();
				return n;
			} finally {
				con.close();
			}
		} catch(SQLException e) {
			throw new RuntimeException("sqlCondition = "+sqlCondition,e);
		}
	}

	static List<String> findTagLabels(Site site,String sqlCondition) {
		try {
			List<String> list = new ArrayList<String>();
			Connection con = site.getDb().getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(
				"select distinct label from tag where " + sqlCondition
			);
			while( rs.next() ) {
				list.add( rs.getString("label") );
			}
			rs.close();
			stmt.close();
			con.close();
			return list;
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}
	}

	static List<Long> findTagUserIds(Site site,String sqlCondition) {
		try {
			List<Long> list = new ArrayList<Long>();
			Connection con = site.getDb().getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(
				"select distinct user_id from tag where " + sqlCondition
			);
			while( rs.next() ) {
				list.add( rs.getLong("user_id") );
			}
			rs.close();
			stmt.close();
			con.close();
			return list;
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}
	}

	static List<Long> findTagNodeIds(Site site,String sqlCondition) {
		try {
			List<Long> list = new ArrayList<Long>();
			Connection con = site.getDb().getConnection();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(
				"select distinct node_id from tag where " + sqlCondition
			);
			while( rs.next() ) {
				list.add( rs.getLong("node_id") );
			}
			rs.close();
			stmt.close();
			con.close();
			return list;
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}
	}

	static void deleteTags(SiteKey siteKey,String sqlCondition) {
		try {
			Connection con = siteKey.getDb().getConnection();
			Statement stmt = con.createStatement();
			stmt.executeUpdate(
				"delete from tag where " + sqlCondition
			);
			stmt.close();
			con.close();
		} catch(SQLException e) {
			throw new RuntimeException(e);
		}
	}

}