Uploaded image for project: 'DSpace'
  1. DSpace
  2. DS-749

allow for bitstream display order to be changed

    Details

    • Type: New Feature
    • Status: Closed (View Workflow)
    • Priority: Minor
    • Resolution: Fixed
    • Fix Version/s: 1.8.0
    • Component/s: JSPUI, XMLUI
    • Labels:
      None
    • Attachments:
      12
    • Comments:
      22
    • Documentation Status:
      Needed

      Description

      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(); }
      1. ----------------------------------------------------------------------
      2. start of MAIN
      3. ----------------------------------------------------------------------

      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;

      1. 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_;

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

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                kevin van de velde Kevin Van de Velde (Atmire)
                Reporter:
                blancojose Jose Blanco
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: