Fri, 23 Oct 2020 18:40:50 +0200
migrate WebColor
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2018 Mike Becker. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ package de.uapcore.lightpit.dao; import java.sql.SQLException; import java.util.List; public interface ChildEntityDao<T, P> { /** * Lists all entities being a child of the specified parent. * @param parent the parent * @return the list of child instances * @throws SQLException on any kind of SQL errors */ List<T> list(P parent) throws SQLException; /** * Finds an entity by its integer ID. * It is not guaranteed that referenced entities are automatically joined. * * @param id the id * @return the enity or null if there is no such entity * @throws SQLException on any kind of SQL errors */ T find(int id) throws SQLException; /** * Inserts an instance into database. * It is not guaranteed that generated fields will be updated in the instance. * * @param instance the instance to insert * @param parent a reference to the parent * @throws SQLException on any kind of SQL errors */ void save(T instance, P parent) throws SQLException; /** * Updates an instance in the database. * * @param instance the instance to insert * @return true if an instance has been updated, false if no instance with the specified ID was found * @throws SQLException on any kind of SQL errors */ boolean update(T instance) throws SQLException; /** * Updates an instance in the database changing the parent. * This operation is not supported by default. * * @param instance the instance to insert * @param newParent a reference to the new parent * @return true if an instance has been updated, false if no instance with the specified ID was found * @throws SQLException on any kind of SQL errors * @see #isChangingParentSupported() */ default boolean update(T instance, P newParent) throws SQLException { throw new UnsupportedOperationException(); } /** * Returns true if changing the parent is supported by this DAO. * This method must return true, if {@link #update(Object, Object)} is implemented. * @return true, if changing the parent is supported */ default boolean isChangingParentSupported() { return false; } /** * Inserts or updates an instance in the database. * Tries an update first and if that fails, performs a save. * If changing a parent is not supported by this DAO, * specifying an alternate parent for an existing instance has no effect. * * @param instance the instance to insert or update * @param parent a reference to the parent * @throws SQLException on any kind of SQL errors * @see #update(Object) * @see #update(Object, Object) * @see #save(Object, Object) */ default void saveOrUpdate(T instance, P parent) throws SQLException { if (isChangingParentSupported()) { if (!update(instance, parent)) save(instance, parent); } else { if (!update(instance)) save(instance, parent); } } }