allow for bitstream display order to be changed
-----------------------------------------------

                 Key: DS-749
                 URL: https://jira.duraspace.org/browse/DS-749
             Project: DSpace
          Issue Type: New Feature
          Components: JSPUI
            Reporter: Jose Blanco


This patch allows user with access priviledges to edit an item to change the 
order in which a bitstream is displayed 
in the item display.  This patch is for the JSPUI. 

The first thing that needs to be done is that a new field needs to be added to 
the bitstream table with the following SQL:

alter table bitstream add display_order integer;

Then that field needs to be populated with the values in the sequence_id table. 
 I have provided a perl script 
that I used to do this: fix-display-order.

Once this is done, make the following code changes.


File =>tools/edit-item-form.jsp

+               <th id="t11" class="oddRowOddCol"><strong><fmt:message 
key="jsp.tools.edit-item-form.elem10"/></strong></th>
                <th id="t11" class="oddRowEvenCol"><strong><fmt:message 
key="jsp.tools.edit-item-form.elem5"/></strong></th>


AND


+                <td headers="t11" class="<%= row %>RowOddCol">
+                    <input type="text" name="bitstream_order_<%= key %>" 
value="<%= (Integer.toString(bitstreams[j].getDisplayOrder()) == null ? "" : 
Integer.toString(bitstreams[j].getDisplayOrder())) %>" size="4"/>
+                </td>
                <% if (bundles[i].getName().equals("ORIGINAL"))
                   { %>

File => Messages.properties

jsp.tools.edit-item-form.elem9                                  = Description
+jsp.tools.edit-item-form.elem10                                = 
Display<BR>Order


file Biststream.java

+     public int getDisplayOrder()
+     {
+         return bRow.getIntColumn("display_order");
+     }
+ 
+     public void setDisplayOrder(int order)
+     {
+         bRow.setColumn("display_order", order);
+         modifiedMetadata = true;
+         addDetails("DisplayOrder");
+     }
 
File => Item.java

                if (streams[k].getSequenceID() < 0)
                {
                    streams[k].setSequenceID(sequence);
+                    streams[k].setDisplayOrder(sequence);
                    sequence++;
                    streams[k].update();
                }


File => Bundle.java

-                        + "bundle2bitstream.bundle_id= ? ",
+                         + "bundle2bitstream.bundle_id= ? "
+                       + "ORDER BY bitstream.display_order",

File =>  EditItemServlet.java
                    int formatID = UIUtil.getIntParameter(request,
                            "bitstream_format_id_" + key);
+                    int display_order = UIUtil.getIntParameter(request,
+                            "bitstream_order_" + key);

AND

                    bitstream.setName(name);
                    bitstream.setSource(source);
                    bitstream.setDescription(desc);
+                    bitstream.setDisplayOrder(display_order);


==============================================
This is the fix-display-order perl script used to iniailize display_order:


#!/usr/bin/perl
RE.

BEGIN
{
        require "strict.pm";
        strict::import();

}

# ----------------------------------------------------------------------
#               start of MAIN
# ----------------------------------------------------------------------

use Encode;
use utf8;
use DBI;
use File::Path;


my $dbhP = DBI->connect("dbi:Pg:dbname=dspace-name", "dspace-user", "password");

&UpdateDisplayOrder ();

$dbhP->disconnect;

exit;

sub UpdateDisplayOrder
{
    
  my $statement = qq{select bitstream_id, sequence_id from bitstream};


    my $sth = $dbhP->prepare($statement)
      or die "Couldn't prepare statement: " . $dbhP->errstr;
    
    # Read the matching records and print them out
    $sth->execute()             # Execute the query
      or die "Couldn't execute statement: " . $sth->errstr;

    my $count = 0;
    my ( $url, $msg );
    my ( $bitstream_id, $sequence_id, @data );
    while (@data = $sth->fetchrow_array()) {
      $bitstream_id       = $data[0];
      $sequence_id        = $data[1];
     
      if ( $sequence_id )
      {
        my $sql = qq{update bitstream set display_order = $sequence_id where 
bitstream_id= $bitstream_id};
        &ProcessSQL ( $sql );
      }

    }
    $sth->finish;

}


sub ProcessSQL 
  {
    my ( $statement ) = @_;

    my $sth = $dbhP->prepare($statement)
      or die "Couldn't prepare statement: " . $dbhP->errstr;
  
    # Read the matching records and print them out
    $sth->execute()             # Execute the query
      or die "Couldn't execute statement: " . $sth->errstr;
    $sth->finish;
  }

__END__;


==============================================



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://jira.duraspace.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework. Read more!
http://p.sf.net/sfu/dell-eql-dev2dev
_______________________________________________
Dspace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dspace-devel

Reply via email to