Package org.dspace.app.xmlui.aspect.submission.submit

Source Code of org.dspace.app.xmlui.aspect.submission.submit.InitialQuestionsStep

/**
* 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/
*/
package org.dspace.app.xmlui.aspect.submission.submit;

import java.io.IOException;
import java.sql.SQLException;

import org.dspace.app.xmlui.utils.UIException;
import org.dspace.app.xmlui.aspect.submission.AbstractSubmissionStep;
import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.Body;
import org.dspace.app.xmlui.wing.element.CheckBox;
import org.dspace.app.xmlui.wing.element.Division;
import org.dspace.app.xmlui.wing.element.List;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Collection;
import org.dspace.content.Metadatum;
import org.dspace.content.Item;
import org.xml.sax.SAXException;

/**
* This is the first official step of the item submission processes. This
* step will ask the user two questions which will direct whether future
* questions will be asked of the user. Since they user may move next or
* previous or even jump around between the stages some metadata values
* may already be filled for selected values. i.e. if the user selected
* that there may be multiple titles and then later comes back and unchecks
* then multiple titles box. In this case these metadata entries are removed
* from the item, a note is displayed informing the user of this discrepency.
*
* Questions:
*  - Multiple titles
*  - Published Before
*
* @author Scott Phillips
* @author Tim Donohue (updated for Configurable Submission)
*/
public class InitialQuestionsStep extends AbstractSubmissionStep
{
  /** Language Strings **/
    protected static final Message T_head=
        message("xmlui.Submission.submit.InitialQuestionsStep.head");
    protected static final Message T_important_note=
        message("xmlui.Submission.submit.InitialQuestionsStep.important_note");
    protected static final Message T_and=
        message("xmlui.Submission.submit.InitialQuestionsStep.and");
    protected static final Message T_separator =
        message("xmlui.Submission.submit.InitialQuestionsStep.separator");
    protected static final Message T_open=
        message("xmlui.Submission.submit.InitialQuestionsStep.open_set");
    protected static final Message T_close=
        message("xmlui.Submission.submit.InitialQuestionsStep.close_set");
    protected static final Message T_multiple_titles=
        message("xmlui.Submission.submit.InitialQuestionsStep.multiple_titles");
    protected static final Message T_multiple_titles_help=
        message("xmlui.Submission.submit.InitialQuestionsStep.multiple_titles_help");
    protected static final Message T_multiple_titles_note=
        message("xmlui.Submission.submit.InitialQuestionsStep.multiple_titles_note");
    protected static final Message T_published_before=
        message("xmlui.Submission.submit.InitialQuestionsStep.published_before");
    protected static final Message T_published_before_help=
        message("xmlui.Submission.submit.InitialQuestionsStep.published_before_help");
    protected static final Message T_published_before_note=
        message("xmlui.Submission.submit.InitialQuestionsStep.published_before_note");
    protected static final Message T_date_issued=
        message("xmlui.Submission.submit.InitialQuestionsStep.date_issued");
    protected static final Message T_citation=
        message("xmlui.Submission.submit.InitialQuestionsStep.citation");
    protected static final Message T_publisher=
        message("xmlui.Submission.submit.InitialQuestionsStep.publisher");

    /**
   * Establish our required parameters, abstractStep will enforce these.
   */
  public InitialQuestionsStep()
  {
    this.requireSubmission = true;
    this.requireStep = true;
  }
   
   
    public void addBody(Body body) throws SAXException, WingException,
            UIException, SQLException, IOException, AuthorizeException
    {
      // Get any metadata that may be removed by unselecting one of these options.
      Item item = submission.getItem();
    Collection collection = submission.getCollection();
    String actionURL = contextPath + "/handle/"+collection.getHandle() + "/submit/" + knot.getId() + ".continue";

    Metadatum[] titles = item.getDC("title", "alternative", Item.ANY);
   
    Metadatum[] dateIssued = item.getDC("date", "issued", Item.ANY);
        Metadatum[] citation = item.getDC("identifier", "citation", Item.ANY);
        Metadatum[] publisher = item.getDC("publisher", null, Item.ANY);
     
     
        // Generate a from asking the user two questions: multiple
        // titles & published before.
      Division div = body.addInteractiveDivision("submit-initial-questions", actionURL, Division.METHOD_POST, "primary submission");
      div.setHead(T_submission_head);
      addSubmissionProgressList(div);
     
      List form = div.addList("submit-initial-questions", List.TYPE_FORM);
        form.setHead(T_head);   
       
        CheckBox multipleTitles = form.addItem().addCheckBox("multiple_titles");
        multipleTitles.setLabel(T_multiple_titles);
        multipleTitles.setHelp(T_multiple_titles_help);
        multipleTitles.addOption("true");
        if (submission.hasMultipleTitles())
        {
          multipleTitles.setOptionSelected("true");
        }
       
        // If any titles would be removed if the user unselected this box then
        // warn the user!
        if (titles.length > 0)
        {
          org.dspace.app.xmlui.wing.element.Item note = form.addItem();
          note.addHighlight("bold").addContent(T_important_note);
          note.addContent(T_multiple_titles_note);
          for (int i=0; i< titles.length; i++)
          {
            if (i > 0)
                {
                    note.addContent(T_separator);
                }
            note.addContent("\"");
            note.addHighlight("bold").addContent(titles[i].value);
            note.addContent("\"");
          }
        }
       
        CheckBox publishedBefore = form.addItem().addCheckBox("published_before");
        publishedBefore.setLabel(T_published_before);
        publishedBefore.setHelp(T_published_before_help);
        publishedBefore.addOption("true");
        if (submission.isPublishedBefore())
        {
          publishedBefore.setOptionSelected("true");
        }
       
        // If any metadata would be removed if the user unselected the box then warn
        // the user about what will be removed.
        if (dateIssued.length > 0 || citation.length > 0 || publisher.length > 0)
        {
          org.dspace.app.xmlui.wing.element.Item note = form.addItem();
          note.addHighlight("bold").addContent(T_important_note);
          note.addContent(T_published_before_note);
         
          // Start a convoluted processes to build an english list of values.
          // Format: Date Issued (value, value, value), Citation (value, value, value), Publisher (value, value, value)
          if (dateIssued.length > 0)
          {
            note.addHighlight("bold").addContent(T_date_issued);
            note.addContent(T_open);
            for (int i=0; i< dateIssued.length; i++)
            {
              if (i > 0)
                    {
                        note.addContent(T_separator);
                    }
              note.addContent(dateIssued[i].value);
            }
            note.addContent(T_close);
          }
         
          // Conjunction
          if (dateIssued.length > 0 && (citation.length > 0 || publisher.length > 0))
            {
                note.addContent(T_separator);
            }
         
          if (dateIssued.length > 0 && citation.length > 0 && publisher.length == 0)
          {
            note.addContent(T_and);
          }
         
          // Citation
          if (citation.length > 0)
          {
            note.addHighlight("bold").addContent(T_citation);
            note.addContent(T_open);
            for (int i=0; i< citation.length; i++)
            {
              if (i > 0)
                    {
                        note.addContent(T_separator);
                    }
              note.addContent(citation[i].value);
            }
            note.addContent(T_close);
          }
         
         
          // Conjunction
          if (citation.length > 0 && publisher.length > 0)
          {
            note.addContent(T_separator);
          }
         
          if ((dateIssued.length > 0 || citation.length > 0) && publisher.length > 0)
          {
            note.addContent(T_and);
          }
         
         
          // Publisher
          if (publisher.length > 0)
          {
            note.addHighlight("bold").addContent(T_publisher);
            note.addContent(T_open);
            for (int i=0; i< publisher.length; i++)
            {
              if (i > 0)
                    {
                        note.addContent(T_separator);
                    }
              note.addContent(publisher[i].value);
            }
            note.addContent(T_close);
          }
        }
       
        //add standard control/paging buttons
        addControlButtons(form);
       
        //Since we already warn users about the metadata pruning to happen
        //if they uncheck an already checked box, then
        //we can let the prune process occur immediately!
        div.addHidden("prune").setValue("true");
       
    }
   
    /**
     * Each submission step must define its own information to be reviewed
     * during the final Review/Verify Step in the submission process.
     * <P>
     * The information to review should be tacked onto the passed in
     * List object.
     * <P>
     * NOTE: To remain consistent across all Steps, you should first
     * add a sub-List object (with this step's name as the heading),
     * by using a call to reviewList.addList().   This sublist is
     * the list you return from this method!
     *
     * @param reviewList
     *      The List to which all reviewable information should be added
     * @return
     *      The new sub-List object created by this step, which contains
     *      all the reviewable information.  If this step has nothing to
     *      review, then return null!  
     */
    public List addReviewSection(List reviewList) throws SAXException,
        WingException, UIException, SQLException, IOException,
        AuthorizeException
    {
        //Create a new section for this Initial Questions information
        List initSection = reviewList.addList("submit-review-" + this.stepAndPage, List.TYPE_FORM);
        initSection.setHead(T_head);
       
        //add information to review
        Message multipleTitles = ReviewStep.T_no;
        if (submission.hasMultipleTitles())
        {
            multipleTitles = ReviewStep.T_yes;
        }
   
        Message publishedBefore = ReviewStep.T_no;
        if (submission.isPublishedBefore())
        {
            publishedBefore = ReviewStep.T_yes;
        }
       
        initSection.addLabel(T_multiple_titles);
        initSection.addItem(multipleTitles);
        initSection.addLabel(T_published_before);
        initSection.addItem(publishedBefore);
       
        //return this new review section
        return initSection;
    }
}
TOP

Related Classes of org.dspace.app.xmlui.aspect.submission.submit.InitialQuestionsStep

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.