1.1 --- a/src/java/de/uapcore/lightpit/entities/ModuleDao.java Sun Apr 08 16:51:15 2018 +0200 1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 1.3 @@ -1,141 +0,0 @@ 1.4 -/* 1.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 1.6 - * 1.7 - * Copyright 2018 Mike Becker. All rights reserved. 1.8 - * 1.9 - * Redistribution and use in source and binary forms, with or without 1.10 - * modification, are permitted provided that the following conditions are met: 1.11 - * 1.12 - * 1. Redistributions of source code must retain the above copyright 1.13 - * notice, this list of conditions and the following disclaimer. 1.14 - * 1.15 - * 2. Redistributions in binary form must reproduce the above copyright 1.16 - * notice, this list of conditions and the following disclaimer in the 1.17 - * documentation and/or other materials provided with the distribution. 1.18 - * 1.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 1.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 1.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 1.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 1.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 1.29 - * POSSIBILITY OF SUCH DAMAGE. 1.30 - * 1.31 - */ 1.32 -package de.uapcore.lightpit.entities; 1.33 - 1.34 -import de.uapcore.lightpit.LightPITModule; 1.35 -import java.sql.Connection; 1.36 -import java.sql.PreparedStatement; 1.37 -import java.sql.ResultSet; 1.38 -import java.sql.SQLException; 1.39 -import java.sql.Statement; 1.40 -import java.util.ArrayList; 1.41 -import java.util.List; 1.42 -import java.util.Map; 1.43 -import java.util.Set; 1.44 - 1.45 -public abstract class ModuleDao { 1.46 - 1.47 - /** 1.48 - * Maps database columns to POJO fields. 1.49 - * @param result the database result set 1.50 - * @param mod the POJO 1.51 - * @throws SQLException 1.52 - */ 1.53 - protected void mapColumns(ResultSet result, Module mod) throws SQLException { 1.54 - mod.setModID(result.getInt("modid")); 1.55 - mod.setClassname(result.getString("classname")); 1.56 - mod.setVisible(result.getBoolean("visible")); 1.57 - } 1.58 - 1.59 - 1.60 - /** 1.61 - * Must return a prepared statement for a single object query with the specified properties. 1.62 - * 1.63 - * <ul> 1.64 - * <li>Parameter 1: classname</li> 1.65 - * <li>Result field 1: visible</li> 1.66 - * </ul> 1.67 - * 1.68 - * @param conn the connection to use 1.69 - * @return the prepared statement 1.70 - * @throws SQLException 1.71 - */ 1.72 - protected PreparedStatement moduleCheckStatement(Connection conn) throws SQLException { 1.73 - return conn.prepareStatement("SELECT visible FROM lpitcore_module WHERE classname = ?"); 1.74 - } 1.75 - 1.76 - /** 1.77 - * Must return a prepared statement for insertion with the specified properties. 1.78 - * 1.79 - * <ul> 1.80 - * <li>Parameter 1: classname</li> 1.81 - * <li>Parameter 2: visible</li> 1.82 - * </ul> 1.83 - * 1.84 - * @param conn the connection to use 1.85 - * @return the prepared statement 1.86 - * @throws SQLException 1.87 - */ 1.88 - protected PreparedStatement moduleInsertStatement(Connection conn) throws SQLException { 1.89 - return conn.prepareStatement("INSERT INTO lpitcore_module (classname, visible) VALUES (?, ?)"); 1.90 - } 1.91 - 1.92 - /** 1.93 - * Synchronizes a set of registered module classes with the database. 1.94 - * 1.95 - * Inserts module classes which are not known to the database and sets them to be visible by default. 1.96 - * Module classes known to the database, which are not in the given set, are ignored. 1.97 - * 1.98 - * @param conn the connection to use 1.99 - * @param moduleSet the module set to synchronize 1.100 - * @throws SQLException 1.101 - */ 1.102 - public final void syncRegisteredModuleClasses(Connection conn, Set<Map.Entry<String, LightPITModule>> moduleSet) throws SQLException { 1.103 - 1.104 - PreparedStatement 1.105 - check = moduleCheckStatement(conn), 1.106 - insert = moduleInsertStatement(conn); 1.107 - insert.setBoolean(2, true); 1.108 - // update/delete not required, we do this in the module management UI 1.109 - 1.110 - for (Map.Entry<String, LightPITModule> modEntry : moduleSet) { 1.111 - if (modEntry.getValue().systemModule()) continue; 1.112 - 1.113 - check.setString(1, modEntry.getKey()); 1.114 - try (ResultSet r = check.executeQuery()) { 1.115 - if (!r.next()) { 1.116 - insert.setString(1, modEntry.getKey()); 1.117 - insert.executeUpdate(); 1.118 - } 1.119 - } 1.120 - } 1.121 - } 1.122 - 1.123 - /** 1.124 - * Returns a list of all modules known by the database. 1.125 - * 1.126 - * Keep in mind, that system modules are never known to the database. 1.127 - * 1.128 - * @param conn the connection to use 1.129 - * @return a list of all modules known by the database 1.130 - * @throws SQLException 1.131 - */ 1.132 - public List<Module> listAll(Connection conn) throws SQLException { 1.133 - List<Module> list = new ArrayList<>(); 1.134 - try (Statement stmt = conn.createStatement(); 1.135 - ResultSet result = stmt.executeQuery("SELECT * FROM lpitcore_module")) { 1.136 - while (result.next()) { 1.137 - final Module mod = new Module(); 1.138 - mapColumns(result, mod); 1.139 - list.add(mod); 1.140 - } 1.141 - } 1.142 - return list; 1.143 - } 1.144 -}