//
//"This sample program is provided AS IS and may be used, executed, copied and modified without royalty payment by customer (a) for its own
//instruction and study, (b) in order to develop applications designed to run with an IBM WebSphere product, either for customer's own internal use
//or for redistribution by customer, as part of such an application, in customer's own products. "
//
//Product 5630-A36, (C) COPYRIGHT International Business Machines Corp., 2001,2004
//All Rights Reserved * Licensed Materials - Property of IBM
//
package com.emc.plants.service.impl;
import java.util.Vector;
import javax.persistence.EntityManager;
import javax.persistence.LockModeType;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.emc.plants.persistence.Inventory;
import com.emc.plants.pojo.beans.StoreItem;
import com.emc.plants.service.interfaces.Catalog;
import com.emc.plants.utils.Util;
/**
* CatalogBean is the implementation class for the {@link Catalog} stateless session
* EJB. CatalogBean implements each of the business methods in the <code>Catalog</code>
* EJB remote interface and each of the EJB lifecycle methods in the javax.ejb.SessionBean
* interface.
*
* @see Catalog
*/
@SuppressWarnings("unchecked")
@Repository("catalog")
@Transactional
public class CatalogBean implements Catalog
{
@PersistenceContext(unitName="PBW")
EntityManager em;
/**
* Get all inventory items.
*
* @return Vector of Inventorys.
*/
public Vector getItems()
{
Vector items = new Vector();
int count = Util.getCategoryStrings().length;
for (int i = 0; i < count; i++)
{
items.addAll(getItemsByCategory(i));
}
//The return type must be Vector because the PBW client ActiveX sample requires Vector
return items;
}
/**
* Get all inventory items for the given category.
*
* @param category of items desired.
* @return Vector of Inventory.
*/
public Vector getItemsByCategory(int category)
{
/*
Vector items = new Vector();
InventoryHome invHome = (InventoryHome) Util.getEJBLocalHome("java:comp/env/ejb/Inventory",
com.ibm.websphere.samples.pbwjpa.InventoryHome.class);
Collection invCollection = invHome.findByCategory(category);
Iterator invs = invCollection.iterator();
Inventory inv;
while (invs.hasNext())
{
inv = (Inventory) invs.next();
items.addElement( new ShoppingCartItem(inv) );
}
*/
Query q = em.createNamedQuery("getItemsByCategory");
q.setParameter("category", category);
//The return type must be Vector because the PBW client ActiveX sample requires Vector
return new Vector(q.getResultList());
}
/**
* Get inventory items that contain a given String within their names.
*
* @param name String to search names for.
* @return A Vector of Inventorys that match.
*/
public Vector getItemsLikeName(String name)
{
/*
Vector items = new Vector();
InventoryHome invHome = (InventoryHome) Util.getEJBLocalHome("java:comp/env/ejb/Inventory",
com.ibm.websphere.samples.pbwjpa.InventoryHome.class);
Collection invCollection = invHome.findByNameLikeness('%' + name + '%');
Iterator invs = invCollection.iterator();
Inventory inv;
while (invs.hasNext())
{
inv = (Inventory) invs.next();
items.addElement( new ShoppingCartItem(inv) );
}
*/
Query q = em.createNamedQuery("getItemsLikeName");
q.setParameter("name", '%' + name + '%');
//The return type must be Vector because the PBW client ActiveX sample requires Vector
return new Vector(q.getResultList());
}
/**
* Get the StoreItem for the given ID.
*
* @param inventoryID - ID of the Inventory item desired.
* @return StoreItem
*/
public StoreItem getItem(String inventoryID)
{
return new StoreItem(getItemInventory(inventoryID));
}
/**
* Get the Inventory item for the given ID.
*
* @param inventoryID - ID of the Inventory item desired.
* @return Inventory
*/
public Inventory getItemInventory(String inventoryID)
{
Inventory si = null;
/*
InventoryHome invHome = (InventoryHome) Util.getEJBLocalHome("java:comp/env/ejb/Inventory",
com.ibm.websphere.samples.pbwjpa.InventoryHome.class);
Inventory inv = invHome.findByPrimaryKey(new InventoryKey(inventoryID));
si = new ShoppingCartItem(inv);
*/
si = em.find(Inventory.class, inventoryID);
return si;
}
/**
* Add an inventory item.
*
* @param item The Inventory to add.
* @return True, if item added.
*/
public boolean addItem(Inventory item)
{
boolean retval = true;
/*
InventoryHome invHome = (InventoryHome) Util.getEJBLocalHome("java:comp/env/ejb/Inventory",
com.ibm.websphere.samples.pbwjpa.InventoryHome.class);
Inventory inv = invHome.create(item);
// If inventory is not null, then return TRUE to indicate add succeeded.
if (inv != null)
retval = true;
*/
em.persist(item);
return retval;
}
/**
* Add an StoreItem item (same as Inventory item).
*
* @param item The StoreItem to add.
* @return True, if item added.
*/
public boolean addItem(StoreItem item)
{
return addItem(new Inventory(item));
}
/**
* Delete an inventory item.
*
* @param inventoryID The ID of the inventory item to delete.
* @return True, if item deleted.
*/
public boolean deleteItem(String inventoryID)
{
boolean retval = true;
/*
InventoryHome invHome = (InventoryHome) Util.getEJBLocalHome("java:comp/env/ejb/Inventory",
com.ibm.websphere.samples.pbwjpa.InventoryHome.class);
Inventory inv = invHome.findByPrimaryKeyUpdate(inventoryID);
inv.remove();
retval = true;
*/
em.remove(em.find(Inventory.class, inventoryID));
return retval;
}
/**
* Set the inventory item's name.
*
* @param inventoryID The inventory item's ID.
* @param name The inventory item's new name.
*/
public void setItemName(String inventoryID, String name)
{
// TODO: lowp: convert all this stupid fine grained update to coarse grained
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setName(name);
}
}
/**
* Set the inventory item's heading.
*
* @param inventoryID The inventory item's ID.
* @param heading The inventory item's new heading.
*/
public void setItemHeading(String inventoryID, String heading)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setHeading(heading);
}
}
/**
* Set the inventory item's description.
*
* @param inventoryID The inventory item's ID.
* @param desc The inventory item's new description.
*/
public void setItemDescription(String inventoryID, String desc)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setDescription(desc);
}
}
/**
* Set the inventory item's package information.
*
* @param inventoryID The inventory item's ID.
* @param pkginfo The inventory item's new package information.
*/
public void setItemPkginfo(String inventoryID, String pkginfo)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setPkginfo(pkginfo);
}
}
/**
* Set the inventory item's category.
*
* @param inventoryID The inventory item's ID.
* @param category The inventory item's new category.
*/
public void setItemCategory(String inventoryID, int category)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setCategory(category);
}
}
/**
* Set the inventory item's image file name.
*
* @param inventoryID The inventory item's ID.
* @param imageName The inventory item's new image file name.
*/
public void setItemImageFileName(String inventoryID, String imageName)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setImage(imageName);
}
}
/**
* Get the image for the inventory item.
* @param inventoryID The id of the inventory item wanted.
* @return Buffer containing the image.
*/
public byte[] getItemImageBytes(String inventoryID)
{
byte[] retval = null;
Inventory inv = getInv(inventoryID);
if (inv != null)
{
retval = inv.getImgbytes();
}
return retval;
}
/**
* Set the image for the inventory item.
* @param inventoryID The id of the inventory item wanted.
* @param imgbytes Buffer containing the image.
*/
@Transactional
public void setItemImageBytes(String inventoryID, byte[] imgbytes)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setImgbytes(imgbytes);
}
}
/**
* Set the inventory item's price.
*
* @param inventoryID The inventory item's ID.
* @param price The inventory item's new price.
*/
@Transactional
public void setItemPrice(String inventoryID, float price)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setPrice(price);
}
}
/**
* Set the inventory item's cost.
*
* @param inventoryID The inventory item's ID.
* @param cost The inventory item's new cost.
*/
@Transactional
public void setItemCost(String inventoryID, float cost)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setCost(cost);
}
}
/**
* Set the inventory item's quantity.
*
* @param inventoryID The inventory item's ID.
* @param quantity The inventory item's new quantity.
*/
@Transactional
public void setItemQuantity(String inventoryID, int quantity)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setQuantity(quantity);
}
}
/**
* Set the inventory item's notes.
*
* @param inventoryID The inventory item's ID.
* @param notes The inventory item's new notes.
*/
@Transactional
public void setItemNotes(String inventoryID, String notes)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setNotes(notes);
}
}
/**
* Set the inventory item's access availability.
*
* @param inventoryID The inventory item's ID.
* @param isPublic True, if this item can be viewed by the public.
*/
@Transactional
public void setItemPrivacy(String inventoryID, boolean isPublic)
{
Inventory inv = getInvUpdate(inventoryID);
if (inv != null)
{
inv.setPrivacy(isPublic);
}
}
/**
* Get a remote Inventory object.
*
* @param inventoryID The id of the inventory item wanted.
* @return Reference to the remote Inventory object.
*/
private Inventory getInv(String inventoryID)
{
return em.find(Inventory.class, inventoryID);
}
/**
* Get a remote Inventory object to Update.
*
* @param inventoryID The id of the inventory item wanted.
* @return Reference to the remote Inventory object.
*/
private Inventory getInvUpdate(String inventoryID)
{
Inventory inv = null;
/*
InventoryHome invHome = (InventoryHome) Util.getEJBLocalHome("java:comp/env/ejb/Inventory",
com.ibm.websphere.samples.pbwjpa.InventoryHome.class);
inv = invHome.findByPrimaryKeyUpdate(inventoryID);
*/
// TODO: lowp: eventually replace with find for update hint
inv = em.find(Inventory.class, inventoryID);
em.lock(inv, LockModeType.WRITE);
em.refresh(inv);
return inv;
}
}