/* * DCInputSet.java * * Version: $Revision: 3734 $ * * Date: $Date: 2009-04-24 04:00:19 +0000 (Fri, 24 Apr 2009) $ * * Copyright (c) 2002-2009, The DSpace Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the DSpace Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.dspace.app.util; import java.util.ArrayList; import java.util.List; import java.util.Vector; import java.util.Map; /** * Class representing all DC inputs required for a submission, organized into pages * * @author Brian S. Hughes, based on work by Jenny Toves, OCLC * @version $Revision: 3734 $ */ public class DCInputSet { /** name of the input set */ private String formName = null; /** the inputs ordered by page and row position */ private DCInput[][] inputPages = null; /** constructor */ public DCInputSet(String formName, Vector pages, Map listMap) { this.formName = formName; inputPages = new DCInput[pages.size()][]; for ( int i = 0; i < inputPages.length; i++ ) { Vector page = (Vector)pages.get(i); inputPages[i] = new DCInput[page.size()]; for ( int j = 0; j < inputPages[i].length; j++ ) { inputPages[i][j] = new DCInput((Map)page.get(j), listMap); } } } /** * Return the name of the form that defines this input set * @return formName the name of the form */ public String getFormName() { return formName; } /** * Return the number of pages in this input set * @return number of pages */ public int getNumberPages() { return inputPages.length; } /** * Get all the rows for a page from the form definition * * @param pageNum desired page within set * @param addTitleAlternative flag to add the additional title row * @param addPublishedBefore flag to add the additional published info * * @return an array containing the page's displayable rows */ public DCInput[] getPageRows(int pageNum, boolean addTitleAlternative, boolean addPublishedBefore) { List filteredInputs = new ArrayList(); if ( pageNum < inputPages.length ) { for (int i = 0; i < inputPages[pageNum].length; i++ ) { DCInput input = inputPages[pageNum][i]; if (doField(input, addTitleAlternative, addPublishedBefore)) { filteredInputs.add(input); } } } // Convert list into an array DCInput[] inputArray = new DCInput[filteredInputs.size()]; return (DCInput[])filteredInputs.toArray(inputArray); } /** * Does this set of inputs include an alternate title field? * * @return true if the current set has an alternate title field */ public boolean isDefinedMultTitles() { return isFieldPresent("title.alternative"); } /** * Does this set of inputs include the previously published fields? * * @return true if the current set has all the prev. published fields */ public boolean isDefinedPubBefore() { return ( isFieldPresent("date.issued") && isFieldPresent("identifier.citation") && isFieldPresent("publisher.null") ); } /** * Does the current input set define the named field? * Scan through every field in every page of the input set * * @return true if the current set has the named field */ public boolean isFieldPresent(String fieldName) { for (int i = 0; i < inputPages.length; i++) { DCInput[] pageInputs = inputPages[i]; for (int row = 0; row < pageInputs.length; row++) { String fullName = pageInputs[row].getElement() + "." + pageInputs[row].getQualifier(); if (fullName.equals(fieldName)) { return true; } } } return false; } private static boolean doField(DCInput dcf, boolean addTitleAlternative, boolean addPublishedBefore) { String rowName = dcf.getElement() + "." + dcf.getQualifier(); if ( rowName.equals("title.alternative") && ! addTitleAlternative ) { return false; } if (rowName.equals("date.issued") && ! addPublishedBefore ) { return false; } if (rowName.equals("publisher.null") && ! addPublishedBefore ) { return false; } if (rowName.equals("identifier.citation") && ! addPublishedBefore ) { return false; } return true; } }