Undo overzealous reindentation.

I went overboard while trying to make things more readable.  That can
wait for another time.  Some minor rewrapping, punctuation, etc. of
comments stands.
This commit is contained in:
Mark H. Wood
2012-11-05 15:26:24 -05:00
parent 96b39c81af
commit 96a577dbfd
14 changed files with 5222 additions and 1391 deletions

View File

@@ -375,12 +375,10 @@ public class MetadataUtilities {
} }
/** /**
* rewrite of ItemImport's functionality * Rewrite of ItemImport's functionality
* but just the parsing of the file, not the processing of its elements. * but just the parsing of the file, not the processing of its elements.
* *
* @param f file of item metadata. * @validate flag to verify matching files in tree
* @validate flag to verify matching files in tree.
* @return parsed content of {@code f}.
*/ */
public static List<ContentsEntry> readContentsFile(File f) public static List<ContentsEntry> readContentsFile(File f)
throws FileNotFoundException, IOException, ParseException throws FileNotFoundException, IOException, ParseException
@@ -391,30 +389,30 @@ public class MetadataUtilities {
try try
{ {
in = new BufferedReader(new FileReader(f)); in = new BufferedReader(new FileReader(f));
String line = null; String line = null;
while ((line = in.readLine()) != null) while ((line = in.readLine()) != null)
{ {
line = line.trim(); line = line.trim();
if ("".equals(line)) if ("".equals(line))
{ {
continue; continue;
} }
ItemUpdate.pr("Contents entry: " + line); ItemUpdate.pr("Contents entry: " + line);
list.add(ContentsEntry.parse(line)); list.add(ContentsEntry.parse(line));
} }
} }
finally finally
{ {
try try
{ {
in.close(); in.close();
} }
catch(IOException e) catch(IOException e)
{ {
//skip //skip
} }
} }
return list; return list;
@@ -440,7 +438,7 @@ public class MetadataUtilities {
while ((line = in.readLine()) != null) while ((line = in.readLine()) != null)
{ {
line = line.trim(); line = line.trim();
if ("".equals(line)) if ("".equals(line))
{ {
continue; continue;
@@ -450,7 +448,7 @@ public class MetadataUtilities {
try try
{ {
n = Integer.parseInt(line); n = Integer.parseInt(line);
list.add(n); list.add(n);
} }
catch(NumberFormatException e) catch(NumberFormatException e)
{ {
@@ -460,13 +458,13 @@ public class MetadataUtilities {
} }
finally finally
{ {
try try
{ {
in.close(); in.close();
} }
catch(IOException e) catch(IOException e)
{ {
//skip //skip
} }
} }
@@ -475,7 +473,7 @@ public class MetadataUtilities {
/** /**
* Get display of DCValue * Get display of DCValue
* *
* @param dcv * @param dcv
* @return string displaying elements of the DCValue * @return string displaying elements of the DCValue
*/ */
@@ -485,47 +483,47 @@ public class MetadataUtilities {
"; language: " + dcv.language + "; value: " + dcv.value; "; language: " + dcv.language + "; value: " + dcv.value;
} }
/** /**
* *
* @return a String representation of the two- or three-part form of a metadata element * @return a String representation of the two- or three-part form of a metadata element
* e.g. dc.identifier.uri * e.g. dc.identifier.uri
*/ */
public static String getCompoundForm(String schema, String element, String qualifier) public static String getCompoundForm(String schema, String element, String qualifier)
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(schema).append(".").append(element); sb.append(schema).append(".").append(element);
if (qualifier != null) if (qualifier != null)
{ {
sb.append(".").append(qualifier); sb.append(".").append(qualifier);
} }
return sb.toString(); return sb.toString();
} }
/** /**
* Parses metadata field given in the form "<schema>.<element>[.<qualifier>|.*]". * Parses metadata field given in the form <schema>.<element>[.<qualifier>|.*]
* Checks for correct number of elements (2 or 3) and for empty strings. * checks for correct number of elements (2 or 3) and for empty strings
* *
* @return String Array * @return String Array
* @throws ParseException if validity checks fail * @throws ParseException if validity checks fail
* *
*/ */
public static String[] parseCompoundForm(String compoundForm) public static String[] parseCompoundForm(String compoundForm)
throws ParseException throws ParseException
{ {
String[] ar = compoundForm.split("\\s*\\.\\s*"); //trim ends String[] ar = compoundForm.split("\\s*\\.\\s*"); //trim ends
if ("".equals(ar[0])) if ("".equals(ar[0]))
{ {
throw new ParseException("schema is empty string: " + compoundForm, 0); throw new ParseException("schema is empty string: " + compoundForm, 0);
} }
if ((ar.length < 2) || (ar.length > 3) || "".equals(ar[1])) if ((ar.length < 2) || (ar.length > 3) || "".equals(ar[1]))
{ {
throw new ParseException("element is malformed or empty string: " + compoundForm, 0); throw new ParseException("element is malformed or empty string: " + compoundForm, 0);
} }
return ar; return ar;
} }
} }

View File

@@ -27,7 +27,7 @@ import org.dspace.sort.SortException;
*/ */
public final class BrowseIndex public final class BrowseIndex
{ {
/** the configuration number, as specified in the config */ /** the configuration number, as specified in the config */
/** used for single metadata browse tables for generating the table name */ /** used for single metadata browse tables for generating the table name */
private int number; private int number;
@@ -75,7 +75,7 @@ public final class BrowseIndex
} }
/** /**
* Constructor for creating generic / internal index objects. * Constructor for creating generic / internal index objects
* @param baseName The base of the table name * @param baseName The base of the table name
*/ */
private BrowseIndex(String baseName) private BrowseIndex(String baseName)
@@ -223,25 +223,25 @@ public final class BrowseIndex
} }
/** /**
* @return Returns the datatype. * @return Returns the datatype.
*/ */
public String getDataType() public String getDataType()
{ {
if (sortOption != null) if (sortOption != null)
{ {
return sortOption.getType(); return sortOption.getType();
} }
return datatype; return datatype;
} }
/** /**
* @return Returns the displayType. * @return Returns the displayType.
*/ */
public String getDisplayType() public String getDisplayType()
{ {
return displayType; return displayType;
} }
/** /**
* @return Returns the number of metadata fields for this index * @return Returns the number of metadata fields for this index
@@ -257,67 +257,67 @@ public final class BrowseIndex
} }
/** /**
* @return Returns the mdBits. * @return Returns the mdBits.
*/ */
public String[] getMdBits(int idx) public String[] getMdBits(int idx)
{ {
if (isMetadataIndex()) if (isMetadataIndex())
{ {
return mdBits[idx]; return mdBits[idx];
} }
return null; return null;
} }
/** /**
* @return Returns the metadata. * @return Returns the metadata.
*/ */
public String getMetadata() public String getMetadata()
{ {
return metadataAll; return metadataAll;
} }
public String getMetadata(int idx) public String getMetadata(int idx)
{ {
return metadata[idx]; return metadata[idx];
} }
/** /**
* @return Returns the name. * @return Returns the name.
*/ */
public String getName() public String getName()
{ {
return name; return name;
} }
/** /**
* @param name The name to set. * @param name The name to set.
*/ */
// public void setName(String name) // public void setName(String name)
// { // {
// this.name = name; // this.name = name;
// } // }
/** /**
* Get the SortOption associated with this index. * Get the SortOption associated with this index.
*/ */
public SortOption getSortOption() public SortOption getSortOption()
{ {
return sortOption; return sortOption;
} }
public boolean isDisplayFrequencies() { public boolean isDisplayFrequencies() {
return displayFrequencies; return displayFrequencies;
} }
/** /**
* Populate the internal array containing the bits of metadata, for * Populate the internal array containing the bits of metadata, for
* ease of use later * ease of use later
*/ */
public void generateMdBits() public void generateMdBits()
{ {
try try
{ {
if (isMetadataIndex()) if (isMetadataIndex())
{ {
mdBits = new String[metadata.length][]; mdBits = new String[metadata.length][];
@@ -334,13 +334,13 @@ public final class BrowseIndex
} }
} }
/** /**
* Get the name of the sequence that will be used in the given circumstances * Get the name of the sequence that will be used in the given circumstances
* *
* @param isDistinct is a distinct table * @param isDistinct is a distinct table
* @param isMap is a map table * @param isMap is a map table
* @return the name of the sequence * @return the name of the sequence
*/ */
public String getSequenceName(boolean isDistinct, boolean isMap) public String getSequenceName(boolean isDistinct, boolean isMap)
{ {
if (isDistinct || isMap) if (isDistinct || isMap)
@@ -369,6 +369,7 @@ public final class BrowseIndex
* @param baseName * @param baseName
* @param isDistinct * @param isDistinct
* @param isMap * @param isMap
* @return
*/ */
private static String getSequenceName(String baseName, boolean isDistinct, boolean isMap) private static String getSequenceName(String baseName, boolean isDistinct, boolean isMap)
{ {
@@ -411,7 +412,7 @@ public final class BrowseIndex
* @param isCollection * @param isCollection
* @param isDistinct * @param isDistinct
* @param isMap * @param isMap
* @return the name of the table. * @return
*/ */
private static String getTableName(String baseName, boolean isCommunity, boolean isCollection, boolean isDistinct, boolean isMap) private static String getTableName(String baseName, boolean isCommunity, boolean isCollection, boolean isDistinct, boolean isMap)
{ {
@@ -442,7 +443,7 @@ public final class BrowseIndex
} }
/** /**
* Get the name of the table in the given circumstances. * Get the name of the table in the given circumstances
* *
* @param isCommunity whether this is a community constrained index (view) * @param isCommunity whether this is a community constrained index (view)
* @param isCollection whether this is a collection constrained index (view) * @param isCollection whether this is a collection constrained index (view)
@@ -484,8 +485,6 @@ public final class BrowseIndex
* <code> * <code>
* getTableName(false, false, false, false); * getTableName(false, false, false, false);
* </code> * </code>
*
* @return the name of the table.
*/ */
public String getTableName() public String getTableName()
{ {
@@ -493,7 +492,7 @@ public final class BrowseIndex
} }
/** /**
* Get the table name for the given set of circumstances * Get the table name for the given set of circumstances.
* *
* This is the same as calling: * This is the same as calling:
* *
@@ -504,7 +503,6 @@ public final class BrowseIndex
* @param isDistinct is this a distinct table * @param isDistinct is this a distinct table
* @param isCommunity * @param isCommunity
* @param isCollection * @param isCollection
* @return the name of the table.
* @deprecated 1.5 * @deprecated 1.5
*/ */
public String getTableName(boolean isDistinct, boolean isCommunity, boolean isCollection) public String getTableName(boolean isDistinct, boolean isCommunity, boolean isCollection)
@@ -518,8 +516,6 @@ public final class BrowseIndex
* <code> * <code>
* getTableName(false, false, false, true); * getTableName(false, false, false, true);
* </code> * </code>
*
* @return the name of the table.
*/ */
public String getMapTableName() public String getMapTableName()
{ {
@@ -532,8 +528,6 @@ public final class BrowseIndex
* <code> * <code>
* getTableName(false, false, true, false); * getTableName(false, false, true, false);
* </code> * </code>
*
* @return the name of the table.
*/ */
public String getDistinctTableName() public String getDistinctTableName()
{ {
@@ -629,7 +623,6 @@ public final class BrowseIndex
/** /**
* Get the field for sorting associated with this index. * Get the field for sorting associated with this index.
* @return the name of the field.
* @throws BrowseException * @throws BrowseException
*/ */
public String getSortField(boolean isSecondLevel) throws BrowseException public String getSortField(boolean isSecondLevel) throws BrowseException
@@ -655,11 +648,7 @@ public final class BrowseIndex
} }
/** /**
* Get an array of the names of all the browse index tables in the current
* configuration.
*
* @deprecated * @deprecated
* @return names of all the current browse index tables.
* @throws BrowseException * @throws BrowseException
*/ */
public static String[] tables() public static String[] tables()
@@ -730,10 +719,9 @@ public final class BrowseIndex
} }
/** /**
* Get the configured browse index that is defined to use this sort option * Get the configured browse index that is defined to use this sort option.
* *
* @param so * @param so
* @return the associated BrowseIndex.
* @throws BrowseException * @throws BrowseException
*/ */
public static BrowseIndex getBrowseIndex(SortOption so) throws BrowseException public static BrowseIndex getBrowseIndex(SortOption so) throws BrowseException

View File

@@ -37,17 +37,17 @@ import java.util.List;
*/ */
public class BrowseItem extends DSpaceObject public class BrowseItem extends DSpaceObject
{ {
/** Logger */ /** Logger */
private static Logger log = Logger.getLogger(BrowseItem.class); private static Logger log = Logger.getLogger(BrowseItem.class);
/** DSpace context */ /** DSpace context */
private Context context; private Context context;
/** a List of all the metadata */ /** a List of all the metadata */
private List<DCValue> metadata = new ArrayList<DCValue>(); private List<DCValue> metadata = new ArrayList<DCValue>();
/** database id of the item */ /** database id of the item */
private int id = -1; private int id = -1;
/** is the item in the archive */ /** is the item in the archive */
private boolean in_archive = true; private boolean in_archive = true;
@@ -56,37 +56,37 @@ public class BrowseItem extends DSpaceObject
private boolean withdrawn = false; private boolean withdrawn = false;
/** item handle */ /** item handle */
private String handle = null; private String handle = null;
/** /**
* Construct a new browse item with the given context and the database id * Construct a new browse item with the given context and the database id
* *
* @param context the DSpace context * @param context the DSpace context
* @param id the database id of the item * @param id the database id of the item
* @param in_archive * @param in_archive
* @param withdrawn * @param withdrawn
*/ */
public BrowseItem(Context context, int id, boolean in_archive, boolean withdrawn) public BrowseItem(Context context, int id, boolean in_archive, boolean withdrawn)
{ {
this.context = context; this.context = context;
this.id = id; this.id = id;
this.in_archive = in_archive; this.in_archive = in_archive;
this.withdrawn = withdrawn; this.withdrawn = withdrawn;
} }
/** /**
* Get String array of metadata values matching the given parameters * Get String array of metadata values matching the given parameters
* *
* @param schema metadata schema * @param schema metadata schema
* @param element metadata element * @param element metadata element
* @param qualifier metadata qualifier * @param qualifier metadata qualifier
* @param lang metadata language * @param lang metadata language
* @return array of matching values * @return array of matching values
* @throws SQLException * @throws SQLException
*/ */
public DCValue[] getMetadata(String schema, String element, String qualifier, String lang) public DCValue[] getMetadata(String schema, String element, String qualifier, String lang)
throws SQLException throws SQLException
{ {
try try
{ {
BrowseItemDAO dao = BrowseDAOFactory.getItemInstance(context); BrowseItemDAO dao = BrowseDAOFactory.getItemInstance(context);
@@ -146,55 +146,54 @@ public class BrowseItem extends DSpaceObject
} }
} }
/** /**
* Get the type of object. This object masquerades as an Item, so this * Get the type of object. This object masquerades as an Item, so this
* returns the value of Constants.ITEM * returns the value of Constants.ITEM
* *
*@return Constants.ITEM *@return Constants.ITEM
*/ */
public int getType() public int getType()
{ {
return Constants.ITEM;
}
/**
* @deprecated
* @param real
* @return real type, or Constants.ITEM.
*/
public int getType(boolean real)
{
if (!real)
{
return Constants.ITEM; return Constants.ITEM;
} }
else
{
return getType();
}
}
/** /**
* get the database id of the item * @deprecated
* * @param real
* @return database id of item */
*/ public int getType(boolean real)
public int getID() {
{ if (!real)
return id; {
} return Constants.ITEM;
}
else
{
return getType();
}
}
/** /**
* Set the database id of the item * get the database id of the item
* *
* @param id the database id of the item * @return database id of item
*/ */
public void setID(int id) public int getID()
{ {
this.id = id; return id;
} }
/** /**
* Set the database id of the item
*
* @param id the database id of the item
*/
public void setID(int id)
{
this.id = id;
}
/**
* Utility method for pattern-matching metadata elements. This * Utility method for pattern-matching metadata elements. This
* method will return <code>true</code> if the given schema, * method will return <code>true</code> if the given schema,
* element, qualifier and language match the schema, element, * element, qualifier and language match the schema, element,
@@ -273,36 +272,36 @@ public class BrowseItem extends DSpaceObject
return true; return true;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.dspace.content.DSpaceObject#getHandle() * @see org.dspace.content.DSpaceObject#getHandle()
*/ */
public String getHandle() public String getHandle()
{ {
// Get our Handle if any // Get our Handle if any
if (this.handle == null) if (this.handle == null)
{ {
try try
{ {
this.handle = HandleManager.findHandle(context, this); this.handle = HandleManager.findHandle(context, this);
} }
catch (SQLException e) catch (SQLException e)
{ {
log.error("caught exception: ", e); log.error("caught exception: ", e);
} }
} }
return this.handle; return this.handle;
} }
/** /**
* Get a thumbnail object out of the item. * Get a thumbnail object out of the item.
* *
* Warning: using this method actually instantiates an Item, which has a * Warning: using this method actually instantiates an Item, which has a
* corresponding performance hit on the database during browse listing * corresponding performance hit on the database during browse listing
* rendering. That's your own fault for wanting to put images on your * rendering. That's your own fault for wanting to put images on your
* browse page! * browse page!
* *
* @throws SQLException * @throws SQLException
*/ */
public Thumbnail getThumbnail() public Thumbnail getThumbnail()
throws SQLException throws SQLException
{ {
@@ -369,19 +368,19 @@ public class BrowseItem extends DSpaceObject
return null; return null;
} }
public String getName() public String getName()
{ {
// FIXME: there is an exception handling problem here // FIXME: there is an exception handling problem here
try try
{ {
DCValue t[] = getMetadata("dc", "title", null, Item.ANY); DCValue t[] = getMetadata("dc", "title", null, Item.ANY);
return (t.length >= 1) ? t[0].value : null; return (t.length >= 1) ? t[0].value : null;
} }
catch (SQLException sqle) catch (SQLException sqle)
{ {
log.error("caught exception: ", sqle); log.error("caught exception: ", sqle);
return null; return null;
} }
} }
@Override @Override

View File

@@ -22,55 +22,54 @@ import org.dspace.core.ConfigurationManager;
*/ */
public class CrossLinks public class CrossLinks
{ {
/** a map of the desired links */ /** a map of the desired links */
private Map<String, String> links = new HashMap<String, String>(); private Map<String, String> links = new HashMap<String, String>();
/** /**
* Construct a new object which will obtain the configuration for itself * Construct a new object which will obtain the configuration for itself.
* *
* @throws BrowseException * @throws BrowseException
*/ */
public CrossLinks() public CrossLinks()
throws BrowseException throws BrowseException
{ {
int i = 1; int i = 1;
while (true) while (true)
{ {
String field = "webui.browse.link." + i; String field = "webui.browse.link." + i;
String config = ConfigurationManager.getProperty(field); String config = ConfigurationManager.getProperty(field);
if (config == null) if (config == null)
{ {
break; break;
} }
String[] parts = config.split(":"); String[] parts = config.split(":");
if (parts.length != 2) if (parts.length != 2)
{ {
throw new BrowseException("Invalid configuration for " + field + ": " + config); throw new BrowseException("Invalid configuration for " + field + ": " + config);
} }
links.put(parts[1], parts[0]); links.put(parts[1], parts[0]);
i++; i++;
} }
} }
/** /**
* Is there a link for the given canonical form of metadata (i.e. * Is there a link for the given canonical form of metadata (i.e. schema.element.qualifier)?
* schema.element.qualifier)? *
* * @param metadata the metadata to check for a link on
* @param metadata the metadata to check for a link on */
*/ public boolean hasLink(String metadata)
public boolean hasLink(String metadata) {
{ return links.containsKey(metadata);
return links.containsKey(metadata); }
}
/** /**
* get the type of link that the bit of metadata has. * Get the type of link that the bit of metadata has.
* *
* @param metadata the metadata to get the link type for * @param metadata the metadata to get the link type for
*/ */
public String getLinkType(String metadata) public String getLinkType(String metadata)
{ {
return links.get(metadata); return links.get(metadata);
} }
} }

View File

@@ -595,26 +595,25 @@ public class IndexBrowse
} }
} }
/** /**
* remove all the indices for the given item * remove all the indices for the given item
* *
* @param item the item to be removed * @param item the item to be removed
* @return true if removed. * @throws BrowseException
* @throws BrowseException */
*/ public boolean itemRemoved(Item item)
public boolean itemRemoved(Item item) throws BrowseException
throws BrowseException
{ {
return itemRemoved(item.getID()); return itemRemoved(item.getID());
} }
public boolean itemRemoved(int itemID) public boolean itemRemoved(int itemID)
throws BrowseException throws BrowseException
{ {
// go over the indices and index the item // go over the indices and index the item
for (int i = 0; i < bis.length; i++) for (int i = 0; i < bis.length; i++)
{ {
if (bis[i].isMetadataIndex()) if (bis[i].isMetadataIndex())
{ {
log.debug("Removing indexing for removed item " + itemID + ", for index: " + bis[i].getTableName()); log.debug("Removing indexing for removed item " + itemID + ", for index: " + bis[i].getTableName());
dao.deleteByItemID(bis[i].getMapTableName(), itemID); dao.deleteByItemID(bis[i].getMapTableName(), itemID);
@@ -628,127 +627,127 @@ public class IndexBrowse
dao.deleteCommunityMappings(itemID); dao.deleteCommunityMappings(itemID);
return true; return true;
} }
/** /**
* Creates Browse indexes, destroying the old ones. * Creates Browse indexes, destroying the old ones.
* *
* @param argv * @param argv
* Command-line arguments * Command-line arguments
*/ */
public static void main(String[] argv) public static void main(String[] argv)
throws SQLException, BrowseException, ParseException throws SQLException, BrowseException, ParseException
{ {
Date startTime = new Date(); Date startTime = new Date();
try try
{ {
Context context = new Context(); Context context = new Context();
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
IndexBrowse indexer = new IndexBrowse(context); IndexBrowse indexer = new IndexBrowse(context);
// create an options object and populate it // create an options object and populate it
CommandLineParser parser = new PosixParser(); CommandLineParser parser = new PosixParser();
Options options = new Options(); Options options = new Options();
// these are mutually exclusive, and represent the primary actions // these are mutually exclusive, and represent the primary actions
options.addOption("t", "tables", false, "create the tables only, do not attempt to index. Mutually exclusive with -f and -i"); options.addOption("t", "tables", false, "create the tables only, do not attempt to index. Mutually exclusive with -f and -i");
options.addOption("i", "index", false, "actually do the indexing. Mutually exclusive with -t and -f"); options.addOption("i", "index", false, "actually do the indexing. Mutually exclusive with -t and -f");
options.addOption("f", "full", false, "make the tables, and do the indexing. This forces -x. Mutually exclusive with -t and -i"); options.addOption("f", "full", false, "make the tables, and do the indexing. This forces -x. Mutually exclusive with -t and -i");
// these options can be specified only with the -f option // these options can be specified only with the -f option
options.addOption("r", "rebuild", false, "should we rebuild all the indices, which removes old index tables and creates new ones. For use with -f. Mutually exclusive with -d"); options.addOption("r", "rebuild", false, "should we rebuild all the indices, which removes old index tables and creates new ones. For use with -f. Mutually exclusive with -d");
options.addOption("d", "delete", false, "delete all the indices, but don't create new ones. For use with -f. This is mutually exclusive with -r"); options.addOption("d", "delete", false, "delete all the indices, but don't create new ones. For use with -f. This is mutually exclusive with -r");
// these options can be specified only with the -t and -f options // these options can be specified only with the -t and -f options
options.addOption("o", "out", true, "[-o <filename>] write the remove and create SQL to the given file. For use with -t and -f"); // FIXME: not currently working options.addOption("o", "out", true, "[-o <filename>] write the remove and create SQL to the given file. For use with -t and -f"); // FIXME: not currently working
options.addOption("p", "print", false, "write the remove and create SQL to the stdout. For use with -t and -f"); options.addOption("p", "print", false, "write the remove and create SQL to the stdout. For use with -t and -f");
options.addOption("x", "execute", false, "execute all the remove and create SQL against the database. For use with -t and -f"); options.addOption("x", "execute", false, "execute all the remove and create SQL against the database. For use with -t and -f");
options.addOption("s", "start", true, "[-s <int>] start from this index number and work upward (mostly only useful for debugging). For use with -t and -f"); options.addOption("s", "start", true, "[-s <int>] start from this index number and work upward (mostly only useful for debugging). For use with -t and -f");
// this option can be used with any argument // this option can be used with any argument
options.addOption("v", "verbose", false, "print extra information to the stdout. If used in conjunction with -p, you cannot use the stdout to generate your database structure"); options.addOption("v", "verbose", false, "print extra information to the stdout. If used in conjunction with -p, you cannot use the stdout to generate your database structure");
// display the help. If this is spefified, it trumps all other arguments // display the help. If this is spefified, it trumps all other arguments
options.addOption("h", "help", false, "show this help documentation. Overrides all other arguments"); options.addOption("h", "help", false, "show this help documentation. Overrides all other arguments");
CommandLine line = parser.parse(options, argv); CommandLine line = parser.parse(options, argv);
// display the help // display the help
if (line.hasOption("h")) if (line.hasOption("h"))
{ {
indexer.usage(options); indexer.usage(options);
return; return;
} }
if (line.hasOption("v")) if (line.hasOption("v"))
{ {
indexer.setVerbose(true); indexer.setVerbose(true);
} }
if (line.hasOption("i")) if (line.hasOption("i"))
{ {
indexer.createIndex(); indexer.createIndex();
return; return;
} }
if (line.hasOption("f")) if (line.hasOption("f"))
{ {
if (line.hasOption('r')) if (line.hasOption('r'))
{ {
indexer.setRebuild(true); indexer.setRebuild(true);
} }
else if (line.hasOption("d")) else if (line.hasOption("d"))
{ {
indexer.setDelete(true); indexer.setDelete(true);
} }
} }
if (line.hasOption("f") || line.hasOption("t")) if (line.hasOption("f") || line.hasOption("t"))
{ {
if (line.hasOption("s")) if (line.hasOption("s"))
{ {
indexer.setStart(Integer.parseInt(line.getOptionValue("s"))); indexer.setStart(Integer.parseInt(line.getOptionValue("s")));
} }
if (line.hasOption("x")) if (line.hasOption("x"))
{ {
indexer.setExecute(true); indexer.setExecute(true);
} }
if (line.hasOption("p")) if (line.hasOption("p"))
{ {
indexer.setStdOut(true); indexer.setStdOut(true);
} }
if (line.hasOption("o")) if (line.hasOption("o"))
{ {
indexer.setFileOut(true); indexer.setFileOut(true);
indexer.setOutFile(line.getOptionValue("o")); indexer.setOutFile(line.getOptionValue("o"));
} }
} }
if (line.hasOption("t")) if (line.hasOption("t"))
{ {
indexer.prepTables(); indexer.prepTables();
return; return;
} }
if (line.hasOption("f")) if (line.hasOption("f"))
{ {
indexer.setExecute(true); indexer.setExecute(true);
indexer.initBrowse(); indexer.initBrowse();
return; return;
} }
indexer.usage(options); indexer.usage(options);
context.complete(); context.complete();
} }
finally finally
{ {
Date endTime = new Date(); Date endTime = new Date();
System.out.println("Started: " + startTime.getTime()); System.out.println("Started: " + startTime.getTime());
System.out.println("Ended: " + endTime.getTime()); System.out.println("Ended: " + endTime.getTime());
System.out.println("Elapsed time: " + ((endTime.getTime() - startTime.getTime()) / 1000) + " secs (" + (endTime.getTime() - startTime.getTime()) + " msecs)"); System.out.println("Elapsed time: " + ((endTime.getTime() - startTime.getTime()) / 1000) + " secs (" + (endTime.getTime() - startTime.getTime()) + " msecs)");
} }
} }
/** /**
* output the usage information * output the usage information

View File

@@ -21,50 +21,49 @@ import org.dspace.content.DSpaceObject;
*/ */
public interface ItemCountDAO public interface ItemCountDAO
{ {
/** /**
* Set the DSpace Context to use during data access * Set the DSpace Context to use during data access
* *
* @param context * @param context
* @throws ItemCountException * @throws ItemCountException
*/ */
public void setContext(Context context) throws ItemCountException; public void setContext(Context context) throws ItemCountException;
/** /**
* Set the given count as the number of items in the given community * Set the given count as the number of items in the given community
* *
* @param community * @param community
* @param count * @param count
* @throws ItemCountException * @throws ItemCountException
*/ */
public void communityCount(Community community, int count) throws ItemCountException; public void communityCount(Community community, int count) throws ItemCountException;
/** /**
* Set the given count as the number of items in the given collection * Set the given count as the number of items in the given collection
* *
* @param collection * @param collection
* @param count * @param count
* @throws ItemCountException * @throws ItemCountException
*/ */
public void collectionCount(Collection collection, int count) throws ItemCountException; public void collectionCount(Collection collection, int count) throws ItemCountException;
/** /**
* Get the number of items in the given DSpaceObject container. * Get the number of items in the given DSpaceObject container. This method will
* This method will only succeed if the DSpaceObject is an instance of * only succeed if the DSpaceObject is an instance of either a Community or a
* either a Community or a Collection. Otherwise it will throw an * Collection. Otherwise it will throw an exception.
* exception. *
* * @param dso
* @param dso * @throws ItemCountException
* @throws ItemCountException */
*/ public int getCount(DSpaceObject dso) throws ItemCountException;
public int getCount(DSpaceObject dso) throws ItemCountException;
/** /**
* Remove any cached data regarding the given DSpaceObject container. This method will * Remove any cached data regarding the given DSpaceObject container. This method will
* only succeed if the DSpaceObject is an instance of either a Community or a * only succeed if the DSpaceObject is an instance of either a Community or a
* Collection. Otherwise it will throw an exception * Collection. Otherwise it will throw an exception
* *
* @param dso * @param dso
* @throws ItemCountException * @throws ItemCountException
*/ */
public void remove(DSpaceObject dso) throws ItemCountException; public void remove(DSpaceObject dso) throws ItemCountException;
} }

View File

@@ -19,32 +19,32 @@ import org.dspace.core.ConfigurationManager;
*/ */
public class ItemCountDAOFactory public class ItemCountDAOFactory
{ {
/** /**
* Get an instance of ItemCountDAO which supports the correct database * Get an instance of ItemCountDAO which supports the correct database
* for the specific DSpace instance. * for the specific DSpace instance.
* *
* @param context * @param context
* @throws ItemCountException * @throws ItemCountException
*/ */
public static ItemCountDAO getInstance(Context context) public static ItemCountDAO getInstance(Context context)
throws ItemCountException throws ItemCountException
{ {
String db = ConfigurationManager.getProperty("db.name"); String db = ConfigurationManager.getProperty("db.name");
ItemCountDAO dao; ItemCountDAO dao;
if ("postgres".equals(db)) if ("postgres".equals(db))
{ {
dao = new ItemCountDAOPostgres(); dao = new ItemCountDAOPostgres();
} }
else if ("oracle".equals(db)) else if ("oracle".equals(db))
{ {
dao = new ItemCountDAOOracle(); dao = new ItemCountDAOOracle();
} }
else else
{ {
throw new ItemCountException("Database type: " + db + " is not currently supported"); throw new ItemCountException("Database type: " + db + " is not currently supported");
} }
dao.setContext(context); dao.setContext(context);
return dao; return dao;
} }
} }

View File

@@ -28,303 +28,304 @@ import java.sql.SQLException;
*/ */
public class ItemCountDAOOracle implements ItemCountDAO public class ItemCountDAOOracle implements ItemCountDAO
{ {
/** Log4j logger */ /** Log4j logger */
private static Logger log = Logger.getLogger(ItemCountDAOOracle.class); private static Logger log = Logger.getLogger(ItemCountDAOOracle.class);
/** DSpace context */ /** DSpace context */
private Context context; private Context context;
/** SQL to select on a collection id */ /** SQL to select on a collection id */
private String collectionSelect = "SELECT * FROM collection_item_count WHERE collection_id = ?"; private String collectionSelect = "SELECT * FROM collection_item_count WHERE collection_id = ?";
/** SQL to insert a new collection record */ /** SQL to insert a new collection record */
private String collectionInsert = "INSERT INTO collection_item_count (collection_id, count) VALUES (?, ?)"; private String collectionInsert = "INSERT INTO collection_item_count (collection_id, count) VALUES (?, ?)";
/** SQL to update an existing collection record */ /** SQL to update an existing collection record */
private String collectionUpdate = "UPDATE collection_item_count SET count = ? WHERE collection_id = ?"; private String collectionUpdate = "UPDATE collection_item_count SET count = ? WHERE collection_id = ?";
/** SQL to remove a collection record */ /** SQL to remove a collection record */
private String collectionRemove = "DELETE FROM collection_item_count WHERE collection_id = ?"; private String collectionRemove = "DELETE FROM collection_item_count WHERE collection_id = ?";
/** SQL to select on a community id */ /** SQL to select on a community id */
private String communitySelect = "SELECT * FROM community_item_count WHERE community_id = ?"; private String communitySelect = "SELECT * FROM community_item_count WHERE community_id = ?";
/** SQL to insert a new community record */ /** SQL to insert a new community record */
private String communityInsert = "INSERT INTO community_item_count (community_id, count) VALUES (?, ?)"; private String communityInsert = "INSERT INTO community_item_count (community_id, count) VALUES (?, ?)";
/** SQL to update an existing community record */ /** SQL to update an existing community record */
private String communityUpdate = "UPDATE community_item_count SET count = ? WHERE community_id = ?"; private String communityUpdate = "UPDATE community_item_count SET count = ? WHERE community_id = ?";
/** SQL to remove a community record */ /** SQL to remove a community record */
private String communityRemove = "DELETE FROM community_item_count WHERE community_id = ?"; private String communityRemove = "DELETE FROM community_item_count WHERE community_id = ?";
/** /**
* Store the count of the given collection * Store the count of the given collection
* *
* @param collection * @param collection
* @param count * @param count
* @throws ItemCountException * @throws ItemCountException
*/ */
public void collectionCount(Collection collection, int count) public void collectionCount(Collection collection, int count)
throws ItemCountException throws ItemCountException
{ {
TableRowIterator tri = null; TableRowIterator tri = null;
try try
{ {
// first find out if we have a record // first find out if we have a record
Object[] sparams = { Integer.valueOf(collection.getID()) }; Object[] sparams = { Integer.valueOf(collection.getID()) };
tri = DatabaseManager.query(context, collectionSelect, sparams); tri = DatabaseManager.query(context, collectionSelect, sparams);
if (tri.hasNext()) if (tri.hasNext())
{ {
Object[] params = { Integer.valueOf(count), Integer.valueOf(collection.getID()) }; Object[] params = { Integer.valueOf(count), Integer.valueOf(collection.getID()) };
DatabaseManager.updateQuery(context, collectionUpdate, params); DatabaseManager.updateQuery(context, collectionUpdate, params);
} }
else
{
Object[] params = { Integer.valueOf(collection.getID()), Integer.valueOf(count) };
DatabaseManager.updateQuery(context, collectionInsert, params);
}
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/**
* Store the count of the given community
*
* @param community
* @param count
* @throws ItemCountException
*/
public void communityCount(Community community, int count)
throws ItemCountException
{
TableRowIterator tri = null;
try
{
// first find out if we have a record
Object[] sparams = { Integer.valueOf(community.getID()) };
tri = DatabaseManager.query(context, communitySelect, sparams);
if (tri.hasNext())
{
Object[] params = { Integer.valueOf(count), Integer.valueOf(community.getID()) };
DatabaseManager.updateQuery(context, communityUpdate, params);
}
else
{
Object[] params = { Integer.valueOf(community.getID()), Integer.valueOf(count) };
DatabaseManager.updateQuery(context, communityInsert, params);
}
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/**
* Set the dspace context to use
*
* @param context
* @throws ItemCountException
*/
public void setContext(Context context)
throws ItemCountException
{
this.context = context;
}
/**
* Get the count of the items in the given container.
*
* @param dso
* @throws ItemCountException
*/
public int getCount(DSpaceObject dso)
throws ItemCountException
{
if (dso instanceof Collection)
{
return getCollectionCount((Collection) dso);
}
else if (dso instanceof Community)
{
return getCommunityCount((Community) dso);
}
else else
{ {
Object[] params = { Integer.valueOf(collection.getID()), Integer.valueOf(count) }; throw new ItemCountException("We can only count items in Communities or Collections");
DatabaseManager.updateQuery(context, collectionInsert, params); }
} }
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/** /**
* Store the count of the given community * remove the cache for the given container
* *
* @param community * @param dso
* @param count * @throws ItemCountException
* @throws ItemCountException */
*/ public void remove(DSpaceObject dso) throws ItemCountException
public void communityCount(Community community, int count) {
throws ItemCountException if (dso instanceof Collection)
{ {
TableRowIterator tri = null; removeCollection((Collection) dso);
try }
{ else if (dso instanceof Community)
// first find out if we have a record {
Object[] sparams = { Integer.valueOf(community.getID()) }; removeCommunity((Community) dso);
tri = DatabaseManager.query(context, communitySelect, sparams); }
if (tri.hasNext())
{
Object[] params = { Integer.valueOf(count), Integer.valueOf(community.getID()) };
DatabaseManager.updateQuery(context, communityUpdate, params);
}
else else
{ {
Object[] params = { Integer.valueOf(community.getID()), Integer.valueOf(count) }; throw new ItemCountException("We can only delete count of items from Communities or Collections");
DatabaseManager.updateQuery(context, communityInsert, params); }
} }
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/** /**
* Set the dspace context to use * remove the cache for the given collection
* *
* @param context * @param collection
* @throws ItemCountException * @throws ItemCountException
*/ */
public void setContext(Context context) private void removeCollection(Collection collection)
throws ItemCountException throws ItemCountException
{ {
this.context = context; try
} {
Object[] params = { Integer.valueOf(collection.getID()) };
DatabaseManager.updateQuery(context, collectionRemove, params);
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/** /**
* get the count of the items in the given container. * Remove the cache for the given community
* *
* @param dso * @param community
* @throws ItemCountException * @throws ItemCountException
*/ */
public int getCount(DSpaceObject dso) private void removeCommunity(Community community)
throws ItemCountException throws ItemCountException
{ {
if (dso instanceof Collection) try
{ {
return getCollectionCount((Collection) dso); Object[] params = { Integer.valueOf(community.getID()) };
} DatabaseManager.updateQuery(context, communityRemove, params);
else if (dso instanceof Community) }
{ catch (SQLException e)
return getCommunityCount((Community) dso); {
} log.error("caught exception: ", e);
else throw new ItemCountException(e);
{ }
throw new ItemCountException("We can only count items in Communities or Collections"); }
}
}
/** /**
* remove the cache for the given container * Get the count for the given collection
* *
* @param dso * @param collection
* @throws ItemCountException * @return
*/ * @throws ItemCountException
public void remove(DSpaceObject dso) throws ItemCountException */
{ private int getCollectionCount(Collection collection)
if (dso instanceof Collection) throws ItemCountException
{ {
removeCollection((Collection) dso);
}
else if (dso instanceof Community)
{
removeCommunity((Community) dso);
}
else
{
throw new ItemCountException("We can only delete count of items from Communities or Collections");
}
}
/**
* remove the cache for the given collection
*
* @param collection
* @throws ItemCountException
*/
private void removeCollection(Collection collection)
throws ItemCountException
{
try
{
Object[] params = { Integer.valueOf(collection.getID()) };
DatabaseManager.updateQuery(context, collectionRemove, params);
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/**
* Remove the cache for the given community
*
* @param community
* @throws ItemCountException
*/
private void removeCommunity(Community community)
throws ItemCountException
{
try
{
Object[] params = { Integer.valueOf(community.getID()) };
DatabaseManager.updateQuery(context, communityRemove, params);
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/**
* Get the count for the given collection
*
* @param collection
* @return
* @throws ItemCountException
*/
private int getCollectionCount(Collection collection)
throws ItemCountException
{
TableRowIterator tri = null; TableRowIterator tri = null;
try try
{ {
Object[] params = { Integer.valueOf(collection.getID()) }; Object[] params = { Integer.valueOf(collection.getID()) };
tri = DatabaseManager.query(context, collectionSelect, params); tri = DatabaseManager.query(context, collectionSelect, params);
if (!tri.hasNext()) if (!tri.hasNext())
{ {
return 0; return 0;
} }
TableRow tr = tri.next(); TableRow tr = tri.next();
if (tri.hasNext()) if (tri.hasNext())
{ {
throw new ItemCountException("More than one count row in the database"); throw new ItemCountException("More than one count row in the database");
} }
return tr.getIntColumn("count"); return tr.getIntColumn("count");
} }
catch (SQLException e) catch (SQLException e)
{ {
log.error("caught exception: ", e); log.error("caught exception: ", e);
throw new ItemCountException(e); throw new ItemCountException(e);
} }
finally finally
{ {
if (tri != null) if (tri != null)
{ {
tri.close(); tri.close();
} }
} }
} }
/** /**
* get the count for the given community * get the count for the given community
* *
* @param community * @param community
* @throws ItemCountException * @return
*/ * @throws ItemCountException
private int getCommunityCount(Community community) */
throws ItemCountException private int getCommunityCount(Community community)
{ throws ItemCountException
{
TableRowIterator tri = null; TableRowIterator tri = null;
try try
{ {
Object[] params = { Integer.valueOf(community.getID()) }; Object[] params = { Integer.valueOf(community.getID()) };
tri = DatabaseManager.query(context, communitySelect, params); tri = DatabaseManager.query(context, communitySelect, params);
if (!tri.hasNext()) if (!tri.hasNext())
{ {
return 0; return 0;
} }
TableRow tr = tri.next(); TableRow tr = tri.next();
if (tri.hasNext()) if (tri.hasNext())
{ {
throw new ItemCountException("More than one count row in the database"); throw new ItemCountException("More than one count row in the database");
} }
return tr.getIntColumn("count"); return tr.getIntColumn("count");
} }
catch (SQLException e) catch (SQLException e)
{ {
log.error("caught exception: ", e); log.error("caught exception: ", e);
throw new ItemCountException(e); throw new ItemCountException(e);
} }
finally finally
{ {
if (tri != null) if (tri != null)
{ {
tri.close(); tri.close();
} }
} }
} }
} }

View File

@@ -28,302 +28,304 @@ import java.sql.SQLException;
*/ */
public class ItemCountDAOPostgres implements ItemCountDAO public class ItemCountDAOPostgres implements ItemCountDAO
{ {
/** Log4j logger */ /** Log4j logger */
private static Logger log = Logger.getLogger(ItemCountDAOPostgres.class); private static Logger log = Logger.getLogger(ItemCountDAOPostgres.class);
/** DSpace context */ /** DSpace context */
private Context context; private Context context;
/** SQL to select on a collection id */ /** SQL to select on a collection id */
private String collectionSelect = "SELECT * FROM collection_item_count WHERE collection_id = ?"; private String collectionSelect = "SELECT * FROM collection_item_count WHERE collection_id = ?";
/** SQL to insert a new collection record */ /** SQL to insert a new collection record */
private String collectionInsert = "INSERT INTO collection_item_count (collection_id, count) VALUES (?, ?)"; private String collectionInsert = "INSERT INTO collection_item_count (collection_id, count) VALUES (?, ?)";
/** SQL to update an existing collection record */ /** SQL to update an existing collection record */
private String collectionUpdate = "UPDATE collection_item_count SET count = ? WHERE collection_id = ?"; private String collectionUpdate = "UPDATE collection_item_count SET count = ? WHERE collection_id = ?";
/** SQL to remove a collection record */ /** SQL to remove a collection record */
private String collectionRemove = "DELETE FROM collection_item_count WHERE collection_id = ?"; private String collectionRemove = "DELETE FROM collection_item_count WHERE collection_id = ?";
/** SQL to select on a community id */ /** SQL to select on a community id */
private String communitySelect = "SELECT * FROM community_item_count WHERE community_id = ?"; private String communitySelect = "SELECT * FROM community_item_count WHERE community_id = ?";
/** SQL to insert a new community record */ /** SQL to insert a new community record */
private String communityInsert = "INSERT INTO community_item_count (community_id, count) VALUES (?, ?)"; private String communityInsert = "INSERT INTO community_item_count (community_id, count) VALUES (?, ?)";
/** SQL to update an existing community record */ /** SQL to update an existing community record */
private String communityUpdate = "UPDATE community_item_count SET count = ? WHERE community_id = ?"; private String communityUpdate = "UPDATE community_item_count SET count = ? WHERE community_id = ?";
/** SQL to remove a community record */ /** SQL to remove a community record */
private String communityRemove = "DELETE FROM community_item_count WHERE community_id = ?"; private String communityRemove = "DELETE FROM community_item_count WHERE community_id = ?";
/** /**
* Store the count of the given collection * Store the count of the given collection
* *
* @param collection * @param collection
* @param count * @param count
* @throws ItemCountException * @throws ItemCountException
*/ */
public void collectionCount(Collection collection, int count) public void collectionCount(Collection collection, int count)
throws ItemCountException throws ItemCountException
{ {
TableRowIterator tri = null; TableRowIterator tri = null;
try try
{ {
// first find out if we have a record // first find out if we have a record
Object[] sparams = { Integer.valueOf(collection.getID()) }; Object[] sparams = { Integer.valueOf(collection.getID()) };
tri = DatabaseManager.query(context, collectionSelect, sparams); tri = DatabaseManager.query(context, collectionSelect, sparams);
if (tri.hasNext()) if (tri.hasNext())
{ {
Object[] params = { Integer.valueOf(count), Integer.valueOf(collection.getID()) }; Object[] params = { Integer.valueOf(count), Integer.valueOf(collection.getID()) };
DatabaseManager.updateQuery(context, collectionUpdate, params); DatabaseManager.updateQuery(context, collectionUpdate, params);
} }
else
{
Object[] params = { Integer.valueOf(collection.getID()), Integer.valueOf(count) };
DatabaseManager.updateQuery(context, collectionInsert, params);
}
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/**
* Store the count of the given community
*
* @param community
* @param count
* @throws ItemCountException
*/
public void communityCount(Community community, int count)
throws ItemCountException
{
TableRowIterator tri = null;
try
{
// first find out if we have a record
Object[] sparams = { Integer.valueOf(community.getID()) };
tri = DatabaseManager.query(context, communitySelect, sparams);
if (tri.hasNext())
{
Object[] params = { Integer.valueOf(count), Integer.valueOf(community.getID()) };
DatabaseManager.updateQuery(context, communityUpdate, params);
}
else
{
Object[] params = { Integer.valueOf(community.getID()), Integer.valueOf(count) };
DatabaseManager.updateQuery(context, communityInsert, params);
}
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/**
* Set the dspace context to use
*
* @param context
* @throws ItemCountException
*/
public void setContext(Context context)
throws ItemCountException
{
this.context = context;
}
/**
* Get the count of the items in the given container.
*
* @param dso
* @throws ItemCountException
*/
public int getCount(DSpaceObject dso)
throws ItemCountException
{
if (dso instanceof Collection)
{
return getCollectionCount((Collection) dso);
}
else if (dso instanceof Community)
{
return getCommunityCount((Community) dso);
}
else else
{ {
Object[] params = { Integer.valueOf(collection.getID()), Integer.valueOf(count) }; throw new ItemCountException("We can only count items in Communities or Collections");
DatabaseManager.updateQuery(context, collectionInsert, params); }
} }
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/** /**
* Store the count of the given community * remove the cache for the given container
* *
* @param community * @param dso
* @param count * @throws ItemCountException
* @throws ItemCountException */
*/ public void remove(DSpaceObject dso) throws ItemCountException
public void communityCount(Community community, int count) {
throws ItemCountException if (dso instanceof Collection)
{ {
TableRowIterator tri = null; removeCollection((Collection) dso);
try }
{ else if (dso instanceof Community)
// first find out if we have a record {
Object[] sparams = { Integer.valueOf(community.getID()) }; removeCommunity((Community) dso);
tri = DatabaseManager.query(context, communitySelect, sparams); }
if (tri.hasNext())
{
Object[] params = { Integer.valueOf(count), Integer.valueOf(community.getID()) };
DatabaseManager.updateQuery(context, communityUpdate, params);
}
else else
{ {
Object[] params = { Integer.valueOf(community.getID()), Integer.valueOf(count) }; throw new ItemCountException("We can only delete count of items from Communities or Collections");
DatabaseManager.updateQuery(context, communityInsert, params); }
} }
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
finally
{
if (tri != null)
{
tri.close();
}
}
}
/** /**
* Set the dspace context to use * remove the cache for the given collection
* *
* @param context * @param collection
* @throws ItemCountException * @throws ItemCountException
*/ */
public void setContext(Context context) private void removeCollection(Collection collection)
throws ItemCountException throws ItemCountException
{ {
this.context = context; try
} {
Object[] params = { Integer.valueOf(collection.getID()) };
DatabaseManager.updateQuery(context, collectionRemove, params);
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/** /**
* get the count of the items in the given container * Remove the cache for the given community
* *
* @param dso * @param community
* @throws ItemCountException * @throws ItemCountException
*/ */
public int getCount(DSpaceObject dso) private void removeCommunity(Community community)
throws ItemCountException throws ItemCountException
{ {
if (dso instanceof Collection) try
{ {
return getCollectionCount((Collection) dso); Object[] params = { Integer.valueOf(community.getID()) };
} DatabaseManager.updateQuery(context, communityRemove, params);
else if (dso instanceof Community) }
{ catch (SQLException e)
return getCommunityCount((Community) dso); {
} log.error("caught exception: ", e);
else throw new ItemCountException(e);
{ }
throw new ItemCountException("We can only count items in Communities or Collections"); }
}
}
/** /**
* remove the cache for the given container * Get the count for the given collection
* *
* @param dso * @param collection
* @throws ItemCountException * @return
*/ * @throws ItemCountException
public void remove(DSpaceObject dso) throws ItemCountException */
{ private int getCollectionCount(Collection collection)
if (dso instanceof Collection) throws ItemCountException
{ {
removeCollection((Collection) dso);
}
else if (dso instanceof Community)
{
removeCommunity((Community) dso);
}
else
{
throw new ItemCountException("We can only delete count of items from Communities or Collections");
}
}
/**
* remove the cache for the given collection
*
* @param collection
* @throws ItemCountException
*/
private void removeCollection(Collection collection)
throws ItemCountException
{
try
{
Object[] params = { Integer.valueOf(collection.getID()) };
DatabaseManager.updateQuery(context, collectionRemove, params);
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/**
* Remove the cache for the given community
*
* @param community
* @throws ItemCountException
*/
private void removeCommunity(Community community)
throws ItemCountException
{
try
{
Object[] params = { Integer.valueOf(community.getID()) };
DatabaseManager.updateQuery(context, communityRemove, params);
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/**
* Get the count for the given collection
*
* @param collection
* @throws ItemCountException
*/
private int getCollectionCount(Collection collection)
throws ItemCountException
{
TableRowIterator tri = null; TableRowIterator tri = null;
try try
{ {
Object[] params = { Integer.valueOf(collection.getID()) }; Object[] params = { Integer.valueOf(collection.getID()) };
tri = DatabaseManager.query(context, collectionSelect, params); tri = DatabaseManager.query(context, collectionSelect, params);
if (!tri.hasNext()) if (!tri.hasNext())
{ {
return 0; return 0;
} }
TableRow tr = tri.next(); TableRow tr = tri.next();
if (tri.hasNext()) if (tri.hasNext())
{ {
throw new ItemCountException("More than one count row in the database"); throw new ItemCountException("More than one count row in the database");
} }
return tr.getIntColumn("count"); return tr.getIntColumn("count");
} }
catch (SQLException e) catch (SQLException e)
{ {
log.error("caught exception: ", e); log.error("caught exception: ", e);
throw new ItemCountException(e); throw new ItemCountException(e);
} }
finally finally
{ {
if (tri != null) if (tri != null)
{ {
tri.close(); tri.close();
} }
} }
} }
/** /**
* get the count for the given community * get the count for the given community
* *
* @param community * @param community
* @throws ItemCountException * @return
*/ * @throws ItemCountException
private int getCommunityCount(Community community) */
throws ItemCountException private int getCommunityCount(Community community)
{ throws ItemCountException
{
TableRowIterator tri = null; TableRowIterator tri = null;
try try
{ {
Object[] params = { Integer.valueOf(community.getID()) }; Object[] params = { Integer.valueOf(community.getID()) };
tri = DatabaseManager.query(context, communitySelect, params); tri = DatabaseManager.query(context, communitySelect, params);
if (!tri.hasNext()) if (!tri.hasNext())
{ {
return 0; return 0;
} }
TableRow tr = tri.next(); TableRow tr = tri.next();
if (tri.hasNext()) if (tri.hasNext())
{ {
throw new ItemCountException("More than one count row in the database"); throw new ItemCountException("More than one count row in the database");
} }
return tr.getIntColumn("count"); return tr.getIntColumn("count");
} }
catch (SQLException e) catch (SQLException e)
{ {
log.error("caught exception: ", e); log.error("caught exception: ", e);
throw new ItemCountException(e); throw new ItemCountException(e);
} }
finally finally
{ {
if (tri != null) if (tri != null)
{ {
tri.close(); tri.close();
} }
} }
} }
} }

View File

@@ -33,185 +33,186 @@ import java.sql.SQLException;
*/ */
public class ItemCounter public class ItemCounter
{ {
/** Log4j logger */ /** Log4j logger */
private static Logger log = Logger.getLogger(ItemCounter.class); private static Logger log = Logger.getLogger(ItemCounter.class);
/** DAO to use to store and retrieve data */ /** DAO to use to store and retrieve data */
private ItemCountDAO dao; private ItemCountDAO dao;
/** DSpace Context */ /** DSpace Context */
private Context context; private Context context;
/** /**
* method invoked by CLI which will result in the number of items * method invoked by CLI which will result in the number of items
* in each community and collection being cached. These counts will * in each community and collection being cached. These counts will
* not update themselves until this is run again. * not update themselves until this is run again.
* *
* @param args * @param args
*/ */
public static void main(String[] args) public static void main(String[] args)
throws ItemCountException, SQLException throws ItemCountException, SQLException
{ {
Context context = new Context(); Context context = new Context();
ItemCounter ic = new ItemCounter(context); ItemCounter ic = new ItemCounter(context);
ic.buildItemCounts(); ic.buildItemCounts();
context.complete(); context.complete();
} }
/** /**
* Construct a new item counter which will use the give DSpace Context * Construct a new item counter which will use the give DSpace Context
* *
* @param context * @param context
* @throws ItemCountException * @throws ItemCountException
*/ */
public ItemCounter(Context context) public ItemCounter(Context context)
throws ItemCountException throws ItemCountException
{
this.context = context;
this.dao = ItemCountDAOFactory.getInstance(this.context);
}
/** {
* This method does the grunt work of drilling through and iterating this.context = context;
* over all of the communities and collections in the system and this.dao = ItemCountDAOFactory.getInstance(this.context);
* obtaining and caching the item counts for each one. }
*
* @throws ItemCountException
*/
public void buildItemCounts()
throws ItemCountException
{
try
{
Community[] tlc = Community.findAllTop(context);
for (int i = 0; i < tlc.length; i++)
{
count(tlc[i]);
}
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/** /**
* Get the count of the items in the given container. If the configuration * This method does the grunt work of drilling through and iterating
* value webui.strengths.cache is equal to 'true' this will return the * over all of the communities and collections in the system and
* cached value if it exists. If it is equal to 'false' it will count * obtaining and caching the item counts for each one.
* the number of items in the container in real time *
* * @throws ItemCountException
* @param dso */
* @throws ItemCountException public void buildItemCounts()
* @throws SQLException throws ItemCountException
*/ {
public int getCount(DSpaceObject dso) try
throws ItemCountException {
{ Community[] tlc = Community.findAllTop(context);
boolean useCache = ConfigurationManager.getBooleanProperty("webui.strengths.cache"); for (int i = 0; i < tlc.length; i++)
{
if (useCache) count(tlc[i]);
{ }
return dao.getCount(dso);
}
// if we make it this far, we need to manually count
if (dso instanceof Collection)
{
try {
return ((Collection) dso).countItems();
} catch (SQLException e) {
log.error("caught exception: ", e);
throw new ItemCountException(e);
} }
} catch (SQLException e)
{
if (dso instanceof Community) log.error("caught exception: ", e);
{ throw new ItemCountException(e);
try {
return ((Community) dso).countItems();
} catch (SQLException e) {
log.error("caught exception: ", e);
throw new ItemCountException(e);
} }
} }
return 0; /**
} * Get the count of the items in the given container. If the configuration
* value webui.strengths.cache is equal to 'true' this will return the
* cached value if it exists. If it is equal to 'false' it will count
* the number of items in the container in real time.
*
* @param dso
* @throws ItemCountException
* @throws SQLException
*/
public int getCount(DSpaceObject dso)
throws ItemCountException
{
boolean useCache = ConfigurationManager.getBooleanProperty("webui.strengths.cache");
/** if (useCache)
* Remove any cached data for the given container {
* return dao.getCount(dso);
* @param dso }
* @throws ItemCountException
*/
public void remove(DSpaceObject dso)
throws ItemCountException
{
dao.remove(dso);
}
/** // if we make it this far, we need to manually count
* count and cache the number of items in the community. This if (dso instanceof Collection)
* will include all sub-communities and collections in the {
* community. It will also recurse into sub-communities and try {
* collections and call count() on them also. return ((Collection) dso).countItems();
* } catch (SQLException e) {
* Therefore, the count the contents of the entire system, it is log.error("caught exception: ", e);
* necessary just to call this method on each top level community throw new ItemCountException(e);
* }
* @param community }
* @throws ItemCountException
*/
private void count(Community community)
throws ItemCountException
{
try
{
// first count the community we are in
int count = community.countItems();
dao.communityCount(community, count);
// now get the sub-communities if (dso instanceof Community)
Community[] scs = community.getSubcommunities(); {
for (int i = 0; i < scs.length; i++) try {
{ return ((Community) dso).countItems();
count(scs[i]); } catch (SQLException e) {
} log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
// now get the collections return 0;
Collection[] cols = community.getCollections(); }
for (int i = 0; i < cols.length; i++)
{
count(cols[i]);
}
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/** /**
* count and cache the number of items in the given collection * Remove any cached data for the given container
* *
* @param collection * @param dso
* @throws ItemCountException * @throws ItemCountException
*/ */
private void count(Collection collection) public void remove(DSpaceObject dso)
throws ItemCountException throws ItemCountException
{ {
try dao.remove(dso);
{ }
int ccount = collection.countItems();
dao.collectionCount(collection, ccount); /**
} * count and cache the number of items in the community. This
catch (SQLException e) * will include all sub-communities and collections in the
{ * community. It will also recurse into sub-communities and
log.error("caught exception: ", e); * collections and call count() on them also.
throw new ItemCountException(e); *
} * Therefore, the count the contents of the entire system, it is
} * necessary just to call this method on each top level community
*
* @param community
* @throws ItemCountException
*/
private void count(Community community)
throws ItemCountException
{
try
{
// first count the community we are in
int count = community.countItems();
dao.communityCount(community, count);
// now get the sub-communities
Community[] scs = community.getSubcommunities();
for (int i = 0; i < scs.length; i++)
{
count(scs[i]);
}
// now get the collections
Collection[] cols = community.getCollections();
for (int i = 0; i < cols.length; i++)
{
count(cols[i]);
}
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
/**
* count and cache the number of items in the given collection
*
* @param collection
* @throws ItemCountException
*/
private void count(Collection collection)
throws ItemCountException
{
try
{
int ccount = collection.countItems();
dao.collectionCount(collection, ccount);
}
catch (SQLException e)
{
log.error("caught exception: ", e);
throw new ItemCountException(e);
}
}
} }

View File

@@ -22,89 +22,89 @@ import org.dspace.core.ConfigurationManager;
*/ */
public class ItemListConfig public class ItemListConfig
{ {
/** a map of column number to metadata value */ /** a map of column number to metadata value */
private Map<Integer, String[]> metadata = new HashMap<Integer, String[]>(); private Map<Integer, String[]> metadata = new HashMap<Integer, String[]>();
/** a map of column number to data type */ /** a map of column number to data type */
private Map<Integer, Integer> types = new HashMap<Integer, Integer>(); private Map<Integer, Integer> types = new HashMap<Integer, Integer>();
/** constant for a DATE column */ /** constant for a DATE column */
private static final int DATE = 1; private static final int DATE = 1;
/** constant for a TEXT column */ /** constant for a TEXT column */
private static final int TEXT = 2; private static final int TEXT = 2;
/** /**
* Create a new instance of the Item list configuration. This loads * Create a new instance of the Item list configuration. This loads
* all the required information from configuration * all the required information from configuration
* *
* @throws BrowseException * @throws BrowseException
*/ */
public ItemListConfig() public ItemListConfig()
throws BrowseException throws BrowseException
{ {
try try
{ {
String configLine = ConfigurationManager.getProperty("webui.itemlist.columns"); String configLine = ConfigurationManager.getProperty("webui.itemlist.columns");
if (configLine == null || "".equals(configLine)) if (configLine == null || "".equals(configLine))
{ {
throw new BrowseException("There is no configuration for webui.itemlist.columns"); throw new BrowseException("There is no configuration for webui.itemlist.columns");
} }
// parse the config // parse the config
StringTokenizer st = new StringTokenizer(configLine, ","); StringTokenizer st = new StringTokenizer(configLine, ",");
int i = 1; int i = 1;
while (st.hasMoreTokens()) while (st.hasMoreTokens())
{ {
Integer key = Integer.valueOf(i); Integer key = Integer.valueOf(i);
String token = st.nextToken(); String token = st.nextToken();
// find out if the field is a date // find out if the field is a date
if (token.indexOf("(date)") > 0) if (token.indexOf("(date)") > 0)
{ {
token = token.replaceAll("\\(date\\)", ""); token = token.replaceAll("\\(date\\)", "");
types.put(key, Integer.valueOf(ItemListConfig.DATE)); types.put(key, Integer.valueOf(ItemListConfig.DATE));
} }
else else
{ {
types.put(key, Integer.valueOf(ItemListConfig.TEXT)); types.put(key, Integer.valueOf(ItemListConfig.TEXT));
} }
String[] mdBits = interpretField(token.trim(), null); String[] mdBits = interpretField(token.trim(), null);
metadata.put(key, mdBits); metadata.put(key, mdBits);
// don't forget to increment the key counter // don't forget to increment the key counter
i++; i++;
} }
} }
catch (IOException e) catch (IOException e)
{ {
throw new BrowseException(e); throw new BrowseException(e);
} }
} }
/** /**
* how many columns are there? * how many columns are there?
* *
* @return the number of columns * @return the number of columns
*/ */
public int numCols() public int numCols()
{ {
return metadata.size(); return metadata.size();
} }
/** /**
* what metadata is to go in the given column number * What metadata is to go in the given column number?
* *
* @param col * @param col
*/ */
public String[] getMetadata(int col) public String[] getMetadata(int col)
{ {
return metadata.get(Integer.valueOf(col)); return metadata.get(Integer.valueOf(col));
} }
/** /**
* Take a string representation of a metadata field, and return it as an array. * Take a string representation of a metadata field, and return it as an array.
* This is just a convenient utility method to basically break the metadata * This is just a convenient utility method to basically break the metadata
* representation up by its delimiter (.), and stick it in an array, inserting * representation up by its delimiter (.), and stick it in an array, inserting

View File

@@ -27,37 +27,37 @@ import java.util.List;
public class HarvestedCollection public class HarvestedCollection
{ {
private Context context; private Context context;
private TableRow harvestRow; private TableRow harvestRow;
public static final int TYPE_NONE = 0; public static final int TYPE_NONE = 0;
public static final int TYPE_DMD = 1; public static final int TYPE_DMD = 1;
public static final int TYPE_DMDREF = 2; public static final int TYPE_DMDREF = 2;
public static final int TYPE_FULL = 3; public static final int TYPE_FULL = 3;
public static final int STATUS_READY = 0; public static final int STATUS_READY = 0;
public static final int STATUS_BUSY = 1; public static final int STATUS_BUSY = 1;
public static final int STATUS_QUEUED = 2; public static final int STATUS_QUEUED = 2;
public static final int STATUS_OAI_ERROR = 3; public static final int STATUS_OAI_ERROR = 3;
public static final int STATUS_UNKNOWN_ERROR = -1; public static final int STATUS_UNKNOWN_ERROR = -1;
/* /*
* collection_id | integer | not null * collection_id | integer | not null
* harvest_type | integer | harvest_type | integer |
* oai_source | text | oai_source | text |
* oai_set_id | text | oai_set_id | text |
* harvest_message | text | harvest_message | text |
* metadata_config_id | text | metadata_config_id | text |
* harvest_status | integer | harvest_status | integer |
* harvest_start_time | timestamp with time zone | harvest_start_time | timestamp with time zone |
*/ */
// TODO: make sure this guy knows to lock people out if the status is not zero. // TODO: make sure this guy knows to lock people out if the status is not zero.
// i.e. someone editing a collection's setting from the admin menu should have // i.e. someone editing a collection's setting from the admin menu should have
// to stop an ongoing harvest before they can edit the settings. // to stop an ongoing harvest before they can edit the settings.
HarvestedCollection(Context c, TableRow row) HarvestedCollection(Context c, TableRow row)
{ {
context = c; context = c;
harvestRow = row; harvestRow = row;
@@ -78,7 +78,7 @@ public class HarvestedCollection
TableRow row = DatabaseManager.findByUnique(c, "harvested_collection", "collection_id", collectionId); TableRow row = DatabaseManager.findByUnique(c, "harvested_collection", "collection_id", collectionId);
if (row == null) { if (row == null) {
return null; return null;
} }
return new HarvestedCollection(c, row); return new HarvestedCollection(c, row);
@@ -105,8 +105,8 @@ public class HarvestedCollection
{ {
HarvestedCollection hc = HarvestedCollection.find(c, collectionId); HarvestedCollection hc = HarvestedCollection.find(c, collectionId);
if (hc != null && hc.getHarvestType() > 0 && hc.getOaiSource() != null && hc.getOaiSetId() != null && if (hc != null && hc.getHarvestType() > 0 && hc.getOaiSource() != null && hc.getOaiSetId() != null &&
hc.getHarvestStatus() != HarvestedCollection.STATUS_UNKNOWN_ERROR) { hc.getHarvestStatus() != HarvestedCollection.STATUS_UNKNOWN_ERROR) {
return true; return true;
} }
return false; return false;
} }
@@ -118,8 +118,8 @@ public class HarvestedCollection
public boolean isHarvestable() throws SQLException public boolean isHarvestable() throws SQLException
{ {
if (this.getHarvestType() > 0 && this.getOaiSource() != null && this.getOaiSetId() != null && if (this.getHarvestType() > 0 && this.getOaiSource() != null && this.getOaiSetId() != null &&
this.getHarvestStatus() != HarvestedCollection.STATUS_UNKNOWN_ERROR) { this.getHarvestStatus() != HarvestedCollection.STATUS_UNKNOWN_ERROR) {
return true; return true;
} }
return false; return false;
@@ -136,9 +136,9 @@ public class HarvestedCollection
public boolean isReady() throws SQLException public boolean isReady() throws SQLException
{ {
if (this.isHarvestable() && (this.getHarvestStatus() == HarvestedCollection.STATUS_READY || this.getHarvestStatus() == HarvestedCollection.STATUS_OAI_ERROR)) if (this.isHarvestable() && (this.getHarvestStatus() == HarvestedCollection.STATUS_READY || this.getHarvestStatus() == HarvestedCollection.STATUS_OAI_ERROR))
{ {
return true; return true;
} }
return false; return false;
} }
@@ -152,14 +152,14 @@ public class HarvestedCollection
public static List<Integer> findAll(Context c) throws SQLException public static List<Integer> findAll(Context c) throws SQLException
{ {
TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection", TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection",
"SELECT * FROM harvested_collection"); "SELECT * FROM harvested_collection");
List<Integer> collectionIds = new ArrayList<Integer>(); List<Integer> collectionIds = new ArrayList<Integer>();
while (tri.hasNext()) while (tri.hasNext())
{ {
TableRow row = tri.next(); TableRow row = tri.next();
collectionIds.add(row.getIntColumn("collection_id")); collectionIds.add(row.getIntColumn("collection_id"));
} }
return collectionIds; return collectionIds;
} }
@@ -173,9 +173,9 @@ public class HarvestedCollection
{ {
int harvestInterval = ConfigurationManager.getIntProperty("oai", "harvester.harvestFrequency"); int harvestInterval = ConfigurationManager.getIntProperty("oai", "harvester.harvestFrequency");
if (harvestInterval == 0) if (harvestInterval == 0)
{ {
harvestInterval = 720; harvestInterval = 720;
} }
int expirationInterval = ConfigurationManager.getIntProperty("oai", "harvester.threadTimeout"); int expirationInterval = ConfigurationManager.getIntProperty("oai", "harvester.threadTimeout");
if (expirationInterval == 0) if (expirationInterval == 0)
@@ -187,13 +187,13 @@ public class HarvestedCollection
Date expirationTime; Date expirationTime;
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date()); calendar.setTime(new Date());
calendar.add(Calendar.MINUTE, -1 * harvestInterval); calendar.add(Calendar.MINUTE, -1 * harvestInterval);
startTime = calendar.getTime(); startTime = calendar.getTime();
calendar.setTime(startTime); calendar.setTime(startTime);
calendar.add(Calendar.HOUR, -2 * expirationInterval); calendar.add(Calendar.HOUR, -2 * expirationInterval);
expirationTime = calendar.getTime(); expirationTime = calendar.getTime();
/* Select all collections whose last_harvest is before our start time, whose harvest_type *is not* 0 and whose status *is* 0 (available) or 3 (OAI Error). */ /* Select all collections whose last_harvest is before our start time, whose harvest_type *is not* 0 and whose status *is* 0 (available) or 3 (OAI Error). */
TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection", TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection",
@@ -204,32 +204,31 @@ public class HarvestedCollection
while (tri.hasNext()) while (tri.hasNext())
{ {
TableRow row = tri.next(); TableRow row = tri.next();
collectionIds.add(row.getIntColumn("collection_id")); collectionIds.add(row.getIntColumn("collection_id"));
} }
return collectionIds; return collectionIds;
} }
/** /**
* Find all collections with the specified status flag * Find all collections with the specified status flag.
* @param c * @param c
* @param status see HarvestInstance.STATUS_... * @param status see HarvestInstance.STATUS_...
* @return matching Collection IDs.
* @throws SQLException * @throws SQLException
*/ */
public static List<Integer> findByStatus(Context c, int status) throws SQLException { public static List<Integer> findByStatus(Context c, int status) throws SQLException {
TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection", TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection",
"SELECT * FROM harvested_collection WHERE harvest_status = ?", status); "SELECT * FROM harvested_collection WHERE harvest_status = ?", status);
List<Integer> collectionIds = new ArrayList<Integer>(); List<Integer> collectionIds = new ArrayList<Integer>();
while (tri.hasNext()) while (tri.hasNext())
{ {
TableRow row = tri.next(); TableRow row = tri.next();
collectionIds.add(row.getIntColumn("collection_id")); collectionIds.add(row.getIntColumn("collection_id"));
} }
return collectionIds; return collectionIds;
} }
@@ -240,12 +239,12 @@ public class HarvestedCollection
String query = "select collection_id from harvested_collection where harvest_type > ? and harvest_status = ? order by last_harvested asc limit 1"; String query = "select collection_id from harvested_collection where harvest_type > ? and harvest_status = ? order by last_harvested asc limit 1";
if ("oracle".equals(ConfigurationManager.getProperty("db.name"))) if ("oracle".equals(ConfigurationManager.getProperty("db.name")))
{ {
query = "select collection_id from harvested_collection where harvest_type > ? and harvest_status = ? and rownum <= 1 order by last_harvested asc"; query = "select collection_id from harvested_collection where harvest_type > ? and harvest_status = ? and rownum <= 1 order by last_harvested asc";
} }
TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection", TableRowIterator tri = DatabaseManager.queryTable(c, "harvested_collection",
query, 0, 0); query, 0, 0);
TableRow row = tri.next(); TableRow row = tri.next();
if (row != null) if (row != null)

View File

@@ -471,13 +471,13 @@ public class DiscoverySearchRequestProcessor implements SearchRequestProcessor
public void doAdvancedSearch(Context context, HttpServletRequest request, public void doAdvancedSearch(Context context, HttpServletRequest request,
HttpServletResponse response) throws SearchProcessorException, HttpServletResponse response) throws SearchProcessorException,
IOException, ServletException IOException, ServletException
{ {
// just redirect to the simple search servlet. // just redirect to the simple search servlet.
// The advanced form is always displayed with Discovery togheter with // The advanced form is always displayed with Discovery togheter with
// the search result // the search result
// the first access to the advanced form performs a search for // the first access to the advanced form performs a search for
// "anythings" (SOLR *:*) // "anythings" (SOLR *:*)
response.sendRedirect(request.getContextPath() + "/simple-search"); response.sendRedirect(request.getContextPath() + "/simple-search");
} }
} }

3846
mvn.out Normal file

File diff suppressed because it is too large Load Diff