Map<Integer, Item> myItems = new HashMap<Integer, Item>(); // # for the browser
Map<Integer, Collection> myCollections = new HashMap<Integer, Collection>(); // collections for list
Map<Integer, Integer> myCounts = new HashMap<Integer, Integer>(); // counts for each collection
// get all items from that collection, add them to a hash
ItemIterator i = myCollection.getItems();
try
{
// iterate through the items in this collection, and count how many
// are native, and how many are imports, and which collections they
// came from
while (i.hasNext())
{
Item myItem = i.next();
// get key for hash
Integer myKey = Integer.valueOf(myItem.getID());
if (myItem.isOwningCollection(myCollection))
{
count_native++;
}
else
{
count_import++;
}
// is the collection in the hash?
Collection owningCollection = myItem.getOwningCollection();
Integer cKey = Integer.valueOf(owningCollection.getID());
if (myCollections.containsKey(cKey))
{
Integer x = myCounts.get(cKey);
int myCount = x.intValue() + 1;
// increment count for that collection
myCounts.put(cKey, Integer.valueOf(myCount));
}
else
{
// store and initialize count
myCollections.put(cKey, owningCollection);
myCounts.put(cKey, Integer.valueOf(1));
}
// store the item
myItems.put(myKey, myItem);
}
}
finally
{
if (i != null)
{
i.close();
}
}
// remove this collection's entry because we already have a native
// count
myCollections.remove(Integer.valueOf(myCollection.getID()));
// sort items - later
// show page
request.setAttribute("collection", myCollection);
request.setAttribute("count_native", Integer.valueOf(count_native));
request.setAttribute("count_import", Integer.valueOf(count_import));
request.setAttribute("items", myItems);
request.setAttribute("collections", myCollections);
request.setAttribute("collection_counts", myCounts);
request
.setAttribute("all_collections", Collection
.findAll(context));
request.setAttribute("searchIndices",
internalLogic.getSearchIndices());
request.setAttribute("prefixKey", internalLogic.getI18NKeyPrefix());
// show this page when we're done
jspPage = "itemmap-main.jsp";
// show the page
JSPManager.showJSP(request, response, jspPage);
}
else if (action.equals("Remove"))
{
// get item IDs to remove
String[] itemIDs = request.getParameterValues("item_ids");
String message = "remove";
LinkedList<String> removedItems = new LinkedList<String>();
if (itemIDs == null)
{
message = "none-removed";
}
else
{
for (int j = 0; j < itemIDs.length; j++)
{
int i = Integer.parseInt(itemIDs[j]);
removedItems.add(itemIDs[j]);
Item myItem = Item.find(context, i);
// make sure item doesn't belong to this collection
if (!myItem.isOwningCollection(myCollection))
{
myCollection.removeItem(myItem);
try
{
IndexBrowse ib = new IndexBrowse(context);
ib.indexItem(myItem);
}
catch (BrowseException e)
{
log.error("caught exception: ", e);
throw new ServletException(e);
}
}
}
}
request.setAttribute("message", message);
request.setAttribute("collection", myCollection);
request.setAttribute("processedItems", removedItems);
// show this page when we're done
jspPage = "itemmap-info.jsp";
// show the page
JSPManager.showJSP(request, response, jspPage);
}
else if (action.equals("Add"))
{
// get item IDs to add
String[] itemIDs = request.getParameterValues("item_ids");
String message = "added";
LinkedList<String> addedItems = new LinkedList<String>();
if (itemIDs == null)
{
message = "none-selected";
}
else
{
for (int j = 0; j < itemIDs.length; j++)
{
int i = Integer.parseInt(itemIDs[j]);
Item myItem = Item.find(context, i);
if (AuthorizeManager.authorizeActionBoolean(context, myItem, Constants.READ))
{
// make sure item doesn't belong to this collection
if (!myItem.isOwningCollection(myCollection))
{
myCollection.addItem(myItem);
try
{
IndexBrowse ib = new IndexBrowse(context);
ib.indexItem(myItem);
}
catch (BrowseException e)
{
log.error("caught exception: ", e);
throw new ServletException(e);
}
addedItems.add(itemIDs[j]);
}
}
}
}
request.setAttribute("message", message);
request.setAttribute("collection", myCollection);
request.setAttribute("processedItems", addedItems);
// show this page when we're done
jspPage = "itemmap-info.jsp";
// show the page
JSPManager.showJSP(request, response, jspPage);
}
else if (action.equals("search"))
{
request.setAttribute("collection", myCollection);
try
{
internalLogic.doItemMapSearch(context, request, response);
}
catch (SearchProcessorException e)
{
log.error(e.getMessage(), e);
throw new ServletException(e.getMessage(), e);
}
}
else if (action.equals("browse"))
{
// target collection to browse
int t = UIUtil.getIntParameter(request, "t");
Collection targetCollection = Collection.find(context, t);
// now find all imported items from that collection
// seemingly inefficient, but database should have this query cached
Map<Integer, Item> items = new HashMap<Integer, Item>();
ItemIterator i = myCollection.getItems();
try
{
while (i.hasNext())
{
Item myItem = i.next();
if (myItem.isOwningCollection(targetCollection))
{
Integer myKey = Integer.valueOf(myItem.getID());
items.put(myKey, myItem);
}
}
}
finally
{
if (i != null)
{
i.close();
}
}
request.setAttribute("collection", myCollection);
request.setAttribute("browsetext", targetCollection