package com.sun.j2ee.blueprints.supplier.tools.populate;
import javax.ejb.*;
import javax.naming.*;
import java.util.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import com.sun.j2ee.blueprints.supplier.inventory.ejb.InventoryLocalHome;
import com.sun.j2ee.blueprints.supplier.inventory.ejb.InventoryLocal;
public class InventoryPopulator {
public static final String JNDI_INVENTORY_HOME = "java:comp/env/ejb/Inventory";
private static final String XML_INVENTORYLIST = "InventoryList";
private static final String XML_INVENTORY = "Inventory";
private static final String XML_ID = "Inventory/@id";
private static final String XML_QUANTITY = "Inventory/@quantity";
private InventoryLocalHome inventoryHome = null;
private String rootTag;
public InventoryPopulator() {
this(XML_INVENTORYLIST);
return;
}
public InventoryPopulator(String rootTag) {
this.rootTag = rootTag;
return;
}
public XMLFilter setup(XMLReader reader) throws PopulateException {
return new XMLDBHandler(reader, rootTag, XML_INVENTORY) {
public void update() throws PopulateException {}
public void create() throws PopulateException {
createInventory(getValue(XML_ID), getValue(XML_QUANTITY, 0));
return;
}
};
}
public boolean check() throws PopulateException {
try {
InitialContext context = new InitialContext();
inventoryHome = (InventoryLocalHome) context.lookup(JNDI_INVENTORY_HOME);
Collection inventoryItems = inventoryHome.findAllInventoryItems();
if ((inventoryItems == null) || (inventoryItems.size() == 0)) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
}
private InventoryLocal createInventory(String id, int quantity) throws PopulateException {
try {
if (inventoryHome == null) {
InitialContext context = new InitialContext();
inventoryHome = (InventoryLocalHome) context.lookup(JNDI_INVENTORY_HOME);
}
InventoryLocal inventory;
try {
inventory = inventoryHome.findByPrimaryKey(id);
inventory.remove();
} catch (Exception exception) {}
inventory = inventoryHome.create(id, quantity);
return inventory;
} catch (Exception exception) {
throw new PopulateException ("Could not create: " + exception.getMessage(), exception);
}
}
}