[DS-749] Backend support allowing for bitstream display order to be changed

git-svn-id: http://scm.dspace.org/svn/repo/dspace/trunk@6574 9c30dcfa-912a-0410-8fc2-9e0234be79fd
This commit is contained in:
Ben Bosman
2011-08-19 08:10:34 +00:00
parent cea41b3e82
commit ad6eb9b045
7 changed files with 103 additions and 17 deletions

View File

@@ -85,19 +85,19 @@ public class Bundle extends DSpaceObject
{ {
bitstreamOrderingDirection = "ASC"; bitstreamOrderingDirection = "ASC";
} }
StringBuilder query = new StringBuilder(); StringBuilder query = new StringBuilder();
query.append("SELECT bitstream.* FROM bitstream, bundle2bitstream WHERE"); query.append("SELECT bitstream.*,bundle2bitstream.bitstream_order FROM bitstream, bundle2bitstream WHERE");
query.append(" bundle2bitstream.bitstream_id=bitstream.bitstream_id AND"); query.append(" bundle2bitstream.bitstream_id=bitstream.bitstream_id AND");
query.append(" bundle2bitstream.bundle_id= ?"); query.append(" bundle2bitstream.bundle_id= ?");
query.append(" ORDER BY bitstream."); query.append(" ORDER BY ");
query.append(bitstreamOrderingField); query.append(bitstreamOrderingField);
query.append(" "); query.append(" ");
query.append(bitstreamOrderingDirection); query.append(bitstreamOrderingDirection);
// Get bitstreams // Get bitstreams
TableRowIterator tri = DatabaseManager.queryTable( TableRowIterator tri = DatabaseManager.query(
ourContext, "bitstream", ourContext,
query.toString(), query.toString(),
bundleRow.getIntColumn("bundle_id")); bundleRow.getIntColumn("bundle_id"));
@@ -105,7 +105,7 @@ public class Bundle extends DSpaceObject
{ {
while (tri.hasNext()) while (tri.hasNext())
{ {
TableRow r = (TableRow) tri.next(); TableRow r = tri.next();
// First check the cache // First check the cache
Bitstream fromCache = (Bitstream) context.fromCache( Bitstream fromCache = (Bitstream) context.fromCache(
@@ -453,9 +453,34 @@ public class Bundle extends DSpaceObject
TableRow mappingRow = DatabaseManager.row("bundle2bitstream"); TableRow mappingRow = DatabaseManager.row("bundle2bitstream");
mappingRow.setColumn("bundle_id", getID()); mappingRow.setColumn("bundle_id", getID());
mappingRow.setColumn("bitstream_id", b.getID()); mappingRow.setColumn("bitstream_id", b.getID());
mappingRow.setColumn("bitstream_order", b.getSequenceID());
DatabaseManager.insert(ourContext, mappingRow); DatabaseManager.insert(ourContext, mappingRow);
} }
/**
* Changes bitstream order according to the array
* @param bitstreamIds the identifiers in the order they are to be set
* @throws SQLException when an SQL error has occurred (querying DSpace)
* @throws AuthorizeException If the user can't make the changes
*/
public void setOrder(int bitstreamIds[]) throws AuthorizeException, SQLException {
AuthorizeManager.authorizeAction(ourContext, this, Constants.WRITE);
for (int i = 0; i < bitstreamIds.length; i++) {
int bitstreamId = bitstreamIds[i];
TableRow row = DatabaseManager.querySingleTable(ourContext, "bundle2bitstream",
"SELECT * FROM bundle2bitstream WHERE bitstream_id= ? ", bitstreamId);
if(row == null){
log.warn(LogManager.getHeader(ourContext, "Invalid bitstream id while changing bitstream order", "Bundle: " + getID() + ", bitstream id: " + bitstreamId));
}else{
row.setColumn("bitstream_order", i);
DatabaseManager.update(ourContext, row);
}
}
}
/** /**
* Remove a bitstream from this bundle - the bitstream is only deleted if * Remove a bitstream from this bundle - the bitstream is only deleted if
* this was the last reference to it * this was the last reference to it

View File

@@ -279,9 +279,10 @@ CREATE INDEX item2bundle_bundle_fk_idx ON Item2Bundle(bundle_id);
------------------------------------------------------- -------------------------------------------------------
CREATE TABLE Bundle2Bitstream CREATE TABLE Bundle2Bitstream
( (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
bundle_id INTEGER REFERENCES Bundle(bundle_id), bundle_id INTEGER REFERENCES Bundle(bundle_id),
bitstream_id INTEGER REFERENCES Bitstream(bitstream_id) bitstream_id INTEGER REFERENCES Bitstream(bitstream_id),
bitstream_order INTEGER
); );
-- index by bundle_id -- index by bundle_id

View File

@@ -1291,7 +1291,7 @@ authority.minconfidence = ambiguous
## Specify the ordering that bitstreams are listed. ## Specify the ordering that bitstreams are listed.
## ##
## Bitstream field to sort on. Values: sequence_id or name. Default: sequence_id ## Bitstream field to sort on. Values: sequence_id or name. Default: sequence_id
#webui.bitstream.order.field = "sequence_id" webui.bitstream.order.field = bitstream_order
## Direction of sorting order. Values: DESC or ASC. Default: ASC ## Direction of sorting order. Values: DESC or ASC. Default: ASC
#webui.bitstream.order.direction = ASC #webui.bitstream.order.direction = ASC

View File

@@ -233,9 +233,10 @@ CREATE INDEX item2bundle_bundle_fk_idx ON Item2Bundle(bundle_id);
------------------------------------------------------- -------------------------------------------------------
CREATE TABLE Bundle2Bitstream CREATE TABLE Bundle2Bitstream
( (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
bundle_id INTEGER REFERENCES Bundle(bundle_id), bundle_id INTEGER REFERENCES Bundle(bundle_id),
bitstream_id INTEGER REFERENCES Bitstream(bitstream_id) bitstream_id INTEGER REFERENCES Bitstream(bitstream_id),
bitstream_order INTEGER
); );
-- index by bundle_id -- index by bundle_id
@@ -731,4 +732,4 @@ CREATE TABLE harvested_item
id INTEGER PRIMARY KEY id INTEGER PRIMARY KEY
); );
CREATE INDEX harvested_item_fk_idx ON harvested_item(item_id); CREATE INDEX harvested_item_fk_idx ON harvested_item(item_id);

View File

@@ -0,0 +1,29 @@
--
-- database_schema_17-18.sql
--
-- Version: $Revision$
--
-- Date: $Date: 2009-04-23 22:26:59 -0500 (Thu, 23 Apr 2009) $
--
-- The contents of this file are subject to the license and copyright
-- detailed in the LICENSE and NOTICE files at the root of the source
-- tree and available online at
--
-- http://www.dspace.org/license/
--
--
-- SQL commands to upgrade the database schema of a live DSpace 1.7 or 1.7.x
-- to the DSpace 1.8 database schema
--
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
--
-------------------------------------------
-- New column for bitstream order DS-749 --
-------------------------------------------
ALTER TABLE bundle2bitstream ADD bitstream_order INTEGER;
--Place the sequence id's in the order
UPDATE bundle2bitstream SET bitstream_order=(SELECT sequence_id FROM bitstream WHERE bitstream.bitstream_id=bundle2bitstream.bitstream_id);

View File

@@ -270,9 +270,10 @@ CREATE INDEX item2bundle_bundle_fk_idx ON Item2Bundle(bundle_id);
------------------------------------------------------- -------------------------------------------------------
CREATE TABLE Bundle2Bitstream CREATE TABLE Bundle2Bitstream
( (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
bundle_id INTEGER REFERENCES Bundle(bundle_id), bundle_id INTEGER REFERENCES Bundle(bundle_id),
bitstream_id INTEGER REFERENCES Bitstream(bitstream_id) bitstream_id INTEGER REFERENCES Bitstream(bitstream_id),
bitstream_order INTEGER
); );
-- index by bundle_id -- index by bundle_id

View File

@@ -0,0 +1,29 @@
--
-- database_schema_17-18.sql
--
-- Version: $Revision$
--
-- Date: $Date: 2009-04-23 22:26:59 -0500 (Thu, 23 Apr 2009) $
--
-- The contents of this file are subject to the license and copyright
-- detailed in the LICENSE and NOTICE files at the root of the source
-- tree and available online at
--
-- http://www.dspace.org/license/
--
--
-- SQL commands to upgrade the database schema of a live DSpace 1.7 or 1.7.x
-- to the DSpace 1.8 database schema
--
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
-- DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST. DUMP YOUR DATABASE FIRST.
--
-------------------------------------------
-- New column for bitstream order DS-749 --
-------------------------------------------
ALTER TABLE bundle2bitstream ADD bitstream_order INTEGER;
--Place the sequence id's in the order
UPDATE bundle2bitstream SET bitstream_order=(SELECT sequence_id FROM bitstream WHERE bitstream.bitstream_id=bundle2bitstream.bitstream_id);