/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package orderMngr.domain.order;
import java.math.*;
import java.sql.*;
import java.util.*;
import static orderMngr.service.Database.*;
public final class OrderRepository
{
public void create(Order order)
{
String sql = "insert into order (number, customer_id) values (?, ?)";
int orderNo = order.getNumber();
executeInsertUpdateOrDelete(sql, orderNo, order.getCustomerId());
for (OrderItem item : order.getItems()) {
executeInsertUpdateOrDelete(
"insert into order_item (order_no, product_id, product_desc, quantity, unit_price) values (?, ?, ?, ?, ?)",
orderNo, item.getProductId(), item.getProductDescription(), item.getQuantity(),
item.getUnitPrice());
}
}
public void update(Order order)
{
String sql = "update order set customer_id=? where number=?";
executeInsertUpdateOrDelete(sql, order.getCustomerId(), order.getNumber());
}
public void remove(Order order)
{
String sql = "delete from order where number=?";
executeInsertUpdateOrDelete(sql, order.getNumber());
}
public Order findByNumber(int orderNumber)
{
try {
return loadOrder(orderNumber);
}
catch (SQLException e) {
throw new RuntimeException(e);
}
}
private Order loadOrder(int orderNumber) throws SQLException
{
ResultSet result = executeQuery("select customer_id from order where number=?", orderNumber);
try {
if (result.next()) {
String customerId = result.getString(1);
Order order = new Order(orderNumber, customerId);
loadOrderItems(order);
return order;
}
return null;
}
finally {
closeStatement(result);
}
}
private void loadOrderItems(Order order) throws SQLException
{
ResultSet result =
executeQuery(
"select product_id, product_desc, quantity, unit_price from order_item where order_number=?",
order.getNumber());
try {
while (result.next()) {
String productId = result.getString(1);
String productDescription = result.getString(2);
int quantity = result.getInt(3);
BigDecimal unitPrice = result.getBigDecimal(4);
OrderItem item = new OrderItem(order, productId, productDescription, quantity, unitPrice);
order.getItems().add(item);
}
}
finally {
closeStatement(result);
}
}
public List<Order> findByCustomer(String customerId)
{
ResultSet result = executeQuery("select number from order where customer_id=?", customerId);
try {
List<Order> orders = new ArrayList<>();
while (result.next()) {
int orderNumber = result.getInt(1);
Order order = new Order(orderNumber, customerId);
loadOrderItems(order);
orders.add(order);
}
return orders;
}
catch (SQLException e) {
throw new RuntimeException(e);
}
finally {
closeStatement(result);
}
}
}