/*
* Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.switchyard.quickstarts.rest.binding;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import javax.inject.Inject;
import org.apache.log4j.Logger;
import org.switchyard.component.bean.Reference;
import org.switchyard.component.bean.Service;
/**
* An OrderService implementation.
*
* @author Magesh Kumar B <mageshbk@jboss.com> (C) 2012 Red Hat Inc.
*/
@Service(OrderService.class)
public class OrderServiceImpl implements OrderService {
private static final Logger LOGGER = Logger.getLogger(OrderService.class);
private static final String SUCCESS = "SUCCESS";
private static Integer orderNo = 0;
private ConcurrentMap<Integer, Order> _orders = new ConcurrentHashMap<Integer, Order>();
@Inject @Reference
private Warehouse _warehouse;
public OrderServiceImpl() {
}
public Order newOrder() {
orderNo++;
LOGGER.info("Creating new Order with no: " + orderNo);
Order order = new Order(orderNo);
_orders.put(orderNo, order);
return order;
}
public Order getOrder(Integer orderId) throws Exception {
LOGGER.info("Getting Order with no: " + orderId);
Order corder = _orders.get(orderId);
if (corder == null) {
throw new RuntimeException("Order " + orderId + " not found!");
}
LOGGER.info("Updating descriptions: " + corder.getItems());
// Get the updated descriptions of items
for (OrderItem orderItem : corder.getItems()) {
Item item = _warehouse.getItem(orderItem.getItem().getItemId());
orderItem.setItem(item);
}
return corder;
}
public String addItems(Order order) throws Exception {
LOGGER.info("Adding items to order: " + order.getOrderId());
Order corder = getOrder(order.getOrderId());
for (OrderItem orderItem : order.getItems()) {
LOGGER.info("Adding item: " + orderItem.getItem().getItemId());
Item item = _warehouse.getItem(orderItem.getItem().getItemId());
if (item == null) {
throw new RuntimeException("Item " + orderItem.getItem().getItemId() + " not found!");
} else {
orderItem.setItem(item);
corder.getItems().add(orderItem);
}
}
LOGGER.info("Order after adding items: " + corder);
return SUCCESS;
}
public String removeItem(String orderItemId) throws Exception {
// Not so elegant, but what to do?
String[] ids = orderItemId.split(":");
if (ids.length != 2) {
throw new RuntimeException("Missing either order id or item id!");
}
Integer orderId = Integer.parseInt(ids[0]);
Integer itemId = Integer.parseInt(ids[1]);
Order corder = getOrder(orderId);
for (OrderItem orderItem : corder.getItems()) {
if (orderItem.getItem().getItemId() == itemId) {
corder.getItems().remove(orderItem);
break;
}
}
LOGGER.info("Order after deleting item: " + corder);
return SUCCESS;
}
public Boolean isInventorySetup() {
int size = _warehouse.getItemCount();
System.out.println(".... Inventory: " + size);
return (size > 0);
}
public String createInventory() throws Exception {
System.out.println(".......................... createInventory" );
_warehouse.addItem(new Item(1, "Hydrogen Atom - No, we are not kidding!"));
_warehouse.addItem(new Item(2, "Handcrafted Copper Plate"));
_warehouse.addItem(new Item(3, "Einstein's Bust - Talks about your future :)"));
_warehouse.addItem(new Item(4, "Time Machine"));
return SUCCESS;
}
public String updateInventory() throws Exception {
_warehouse.updateItem(new Item(1, "Water"));
_warehouse.updateItem(new Item(2, "Cuttlery"));
_warehouse.updateItem(new Item(3, "Theory of relativity"));
_warehouse.updateItem(new Item(4, "Coffee Maker"));
return SUCCESS;
}
public String removeInventory() throws Exception {
_warehouse.removeItem(1);
_warehouse.removeItem(2);
_warehouse.removeItem(3);
_warehouse.removeItem(4);
return SUCCESS;
}
}