1 package org.example.customerdao;
2
3 /*
4 * This is free and unencumbered software released into the public domain.
5 * Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software,
6 * either in source code form or as a compiled binary, for any purpose, commercial or
7 * non-commercial, and by any means.
8 *
9 * In jurisdictions that recognize copyright laws, the author or authors of this
10 * software dedicate any and all copyright interest in the software to the public domain.
11 * We make this dedication for the benefit of the public at large and to the detriment of
12 * our heirs and successors. We intend this dedication to be an overt act of relinquishment in
13 * perpetuity of all present and future rights to this software under copyright law.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
17 * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES
18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 *
21 * For more information, please refer to: https://unlicense.org/
22 */
23
24 import java.util.List;
25
26 import javax.sql.DataSource;
27
28 import org.example.customer.Product;
29 import org.example.customer.Supplier;
30 import org.example.customerdao.utility.Deleteable;
31 import org.example.websecurity.UserCredentials;
32
33
34 /**
35 * This is the ProductDAO Interface for the Customer DAO component of the Customer Web Application.
36 * This will be the primary Product database exposure for the Customer Web Layer.
37 *
38 * @author Jonathan Earl
39 * @since 1.0
40 *
41 */
42 public interface ProductDAO extends Deleteable
43 {
44 /**
45 * Sets the Read Only DataSource for this DAO Implication.
46 *
47 * @param readOnlyDS the readOnlyDS to set
48 */
49 void setReadOnlyDS(DataSource readOnlyDS);
50
51 /**
52 * Sets the Read/Write DataSource for this DAO Implication.
53 *
54 * @param readWriteDS the readWriteDS to set
55 */
56 void setReadWriteDS(DataSource readWriteDS);
57
58 /**
59 * Finds all Products.
60 *
61 * @param credentials the UserCredentials for this Database operation
62 * @return a list of Products, this list may be empty
63 * @throws IllegalArgumentException
64 * if there is a connection or permission problem
65 */
66 List<Product> findAllProducts(UserCredentials credentials);
67
68 /**
69 * Finds all non discontinued Products.
70 *
71 * @param credentials the UserCredentials for this Database operation
72 * @return a list of active Products, this list may be empty
73 * @throws IllegalArgumentException
74 * if there is a connection or permission problem
75 */
76 List<Product> findAllActiveProducts(UserCredentials credentials);
77
78 /**
79 * Find Product by Id.
80 * <p>
81 * This will return null if the Product cannot be found.
82 *
83 * @param credentials the UserCredentials for this Database operation
84 * @param id the Product ID to search for
85 * @return a Product or null if the Product is not found
86 * @throws IllegalArgumentException
87 * if there is a connection or permission problem
88 */
89 Product findProductById(UserCredentials credentials, int id);
90
91 /**
92 * Find Products by Supplier.
93 *
94 * @param credentials the UserCredentials for this Database operation
95 * @param supplier the Supplier to search for
96 * @return a list of Products, this list may be empty
97 * @throws IllegalArgumentException
98 * if there is a connection or permission problem
99 */
100 List<Product> findProductsBySupplier(UserCredentials credentials, Supplier supplier);
101
102 /**
103 * Adds a Product.
104 * <p >
105 * Only a Manager is permitted to add a Product.
106 *
107 *
108 * @param credentials the UserCredentials for this Database operation
109 * @param product the Product object to add
110 * @return the id of the new Product record
111 * @throws IllegalArgumentException
112 * if there is a connection or permission problem
113 */
114 int addProduct(UserCredentials credentials, Product product);
115
116 /**
117 * Updates a Product.
118 * <p >
119 * Only a Manager is permitted to update a Product.
120 *
121 *
122 * @param credentials the UserCredentials for this Database operation
123 * @param product the Product object to update
124 * @throws IllegalArgumentException
125 * if there is a connection or permission problem
126 */
127 void updateProduct(UserCredentials credentials, Product product);
128
129 }