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.Customer;
29 import org.example.customer.Order;
30 import org.example.customer.OrderItem;
31 import org.example.customerdao.utility.Deleteable;
32 import org.example.websecurity.UserCredentials;
33
34
35
36 /**
37 * This is the OrderDAO Interface for the Customer DAO component of the Customer Web Application.
38 * This will be the primary Order database exposure for the Customer Web Layer.
39 *
40 * @author Jonathan Earl
41 * @since 1.0
42 *
43 */
44 public interface OrderDAO extends Deleteable
45 {
46 /**
47 * Sets the Read Only DataSource for this DAO Implication.
48 *
49 * @param readOnlyDS the readOnlyDS to set
50 */
51 void setReadOnlyDS(DataSource readOnlyDS);
52
53 /**
54 * Sets the Read/Write DataSource for this DAO Implication.
55 *
56 * @param readWriteDS the readWriteDS to set
57 */
58 void setReadWriteDS(DataSource readWriteDS);
59
60 /**
61 * Finds all Orders.
62 *
63 * @param credentials the UserCredentials for this Database operation
64 * @return a list of Orders, this list may be empty
65 * @throws IllegalArgumentException
66 * if there is a connection or permission problem
67 */
68 List<Order> findAllOrders(UserCredentials credentials);
69
70 /**
71 * Finds all Order_Items by Order.
72 *
73 * @param credentials the UserCredentials for this Database operation
74 * @param order the order to search for
75 * @return a list of OrderItems, this list may be empty
76 * @throws IllegalArgumentException
77 * if there is a connection or permission problem
78 */
79 List<OrderItem> findAllOrderItems(UserCredentials credentials, Order order);
80
81 /**
82 * Find Order by Id.
83 * <p>
84 * This will return null if the Order cannot be found.
85 *
86 * @param credentials the UserCredentials for this Database operation
87 * @param id the Order ID to search for
88 * @return a Order or null if the Order is not found
89 * @throws IllegalArgumentException
90 * if there is a connection or permission problem
91 */
92 Order findOrderById(UserCredentials credentials, int id);
93
94 /**
95 * Find Orders by Customer.
96 *
97 * @param credentials the UserCredentials for this Database operation
98 * @param customer the Customer to search for
99 * @return a list of Orders, this list may be empty
100 * @throws IllegalArgumentException
101 * if there is a connection or permission problem
102 */
103 List<Order> findOrdersByCustomer(UserCredentials credentials, Customer customer);
104
105 /**
106 * Adds a Order.
107 *
108 * @param credentials the UserCredentials for this Database operation
109 * @param order the Order object to add
110 * @return the id of the new Order record
111 * @throws IllegalArgumentException
112 * if there is a connection or permission problem
113 */
114 int addOrder(UserCredentials credentials, Order order);
115
116 /**
117 * Updates a Order.
118 *
119 * @param credentials the UserCredentials for this Database operation
120 * @param order the Order object to update
121 * @throws IllegalArgumentException
122 * if there is a connection or permission problem
123 */
124 void updateOrder(UserCredentials credentials, Order order);
125 }