DS-402 changed item mapper search to case insesitive

This commit is contained in:
Keiji Suzuki
2013-07-10 12:13:50 +09:00
committed by Andrea Bollini
parent 7613292b25
commit 4d15b1c584

View File

@@ -15,11 +15,16 @@ import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.AuthorizeManager; import org.dspace.authorize.AuthorizeManager;
import org.dspace.browse.*; import org.dspace.browse.*;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.content.ItemIterator; import org.dspace.content.ItemIterator;
import org.dspace.core.ConfigurationManager; import org.dspace.core.ConfigurationManager;
import org.dspace.core.Constants; import org.dspace.core.Constants;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.handle.HandleManager;
import org.dspace.search.DSQuery;
import org.dspace.search.QueryArgs;
import org.dspace.search.QueryResults;
import org.dspace.sort.SortOption; import org.dspace.sort.SortOption;
import javax.servlet.ServletException; import javax.servlet.ServletException;
@@ -28,6 +33,7 @@ import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@@ -270,68 +276,31 @@ public class ItemMapServlet extends DSpaceServlet
} }
else if (action.equals("Search Authors")) else if (action.equals("Search Authors"))
{ {
String name = (String) request.getParameter("namepart"); String name = (String) request.getParameter("namepart");
String bidx = ConfigurationManager.getProperty("itemmap.author.index"); QueryArgs queryArgs = new QueryArgs();
if (bidx == null) queryArgs.setQuery("author:"+name);
{ queryArgs.setPageSize(Integer.MAX_VALUE);
throw new ServletException("There is no configuration for itemmap.author.index"); QueryResults results = DSQuery.doQuery(context, queryArgs);
}
Map<Integer, Item> items = new HashMap<Integer, Item>();
try
{
BrowserScope bs = new BrowserScope(context);
BrowseIndex bi = BrowseIndex.getBrowseIndex(bidx);
// set up the browse scope Map<Integer, Item> items = new HashMap<Integer, Item>();
bs.setBrowseIndex(bi); List<String> handles = results.getHitHandles();
bs.setOrder(SortOption.ASCENDING); for (String handle : handles)
bs.setFilterValue(name); {
bs.setFilterValuePartial(true); DSpaceObject resultDSO = HandleManager.resolveToObject(context, handle);
bs.setJumpToValue(null);
bs.setResultsPerPage(10000); // an arbitrary number (large) for the time being
bs.setBrowseLevel(1);
BrowseEngine be = new BrowseEngine(context); if (resultDSO.getType() == Constants.ITEM)
BrowseInfo results = be.browse(bs);
Item[] browseItems = results.getItemResults(context);
// FIXME: oh god this is so annoying - what an API /Richard
// we need to deduplicate against existing items in this collection
ItemIterator itr = myCollection.getItems();
try
{ {
ArrayList<Integer> idslist = new ArrayList<Integer>(); Item item = (Item) resultDSO;
while (itr.hasNext()) if (item.isOwningCollection(myCollection))
{ {
idslist.add(Integer.valueOf(itr.nextID())); continue;
} }
if (AuthorizeManager.authorizeActionBoolean(context, item, Constants.READ))
for (int i = 0; i < browseItems.length; i++)
{ {
// only if it isn't already in this collection items.put(Integer.valueOf(item.getID()),item);
if (!idslist.contains(Integer.valueOf(browseItems[i].getID())))
{
// only put on list if you can read item
if (AuthorizeManager.authorizeActionBoolean(context, browseItems[i], Constants.READ))
{
items.put(Integer.valueOf(browseItems[i].getID()), browseItems[i]);
}
}
}
}
finally
{
if (itr != null)
{
itr.close();
} }
} }
} }
catch (BrowseException e)
{
log.error("caught exception: ", e);
throw new ServletException(e);
}
request.setAttribute("collection", myCollection); request.setAttribute("collection", myCollection);
request.setAttribute("browsetext", name); request.setAttribute("browsetext", name);