/** * 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.webui.components; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.dspace.app.webui.util.VersionUtil; import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeManager; import org.dspace.content.Item; import org.dspace.core.ConfigurationManager; import org.dspace.core.Context; import org.dspace.handle.HandleManager; import org.dspace.plugin.ItemHomeProcessor; import org.dspace.plugin.PluginException; import org.dspace.versioning.Version; import org.dspace.versioning.VersionHistory; public class VersioningItemHome implements ItemHomeProcessor { /** log4j category */ private static Logger log = Logger.getLogger(VersioningItemHome.class); @Override public void process(Context context, HttpServletRequest request, HttpServletResponse response, Item item) throws PluginException, AuthorizeException { boolean versioningEnabled = ConfigurationManager.getBooleanProperty( "versioning", "enabled"); boolean newVersionAvailable = false; boolean showVersionWorkflowAvailable = false; boolean hasVersionButton = false; boolean hasVersionHistory = false; VersionHistory history = null; List<Version> historyVersions = new ArrayList<Version>(); String latestVersionHandle = null; String latestVersionURL = null; if (versioningEnabled) { try { if(item.canEdit()) { if (VersionUtil.isLatest(context, item) && item.isArchived()) { hasVersionButton = true; } } } catch (SQLException e) { throw new PluginException(e.getMessage()); } if (VersionUtil.hasVersionHistory(context, item)) { hasVersionHistory = true; history = VersionUtil.retrieveVersionHistory(context, item); for(Version versRow : history.getVersions()) { //Skip items currently in submission try { if(VersionUtil.isItemInSubmission(context, versRow.getItem())) { continue; } else { historyVersions.add(versRow); } } catch (SQLException e) { throw new PluginException(e.getMessage()); } } } // Check if we have a history for the item Version latestVersion; try { latestVersion = VersionUtil.checkLatestVersion(context, item); } catch (SQLException e) { throw new PluginException(e.getMessage()); } if (latestVersion != null) { if (latestVersion != null && latestVersion.getItemID() != item.getID()) { // We have a newer version Item latestVersionItem = latestVersion.getItem(); if (latestVersionItem.isArchived()) { // Available, add a link for the user alerting him that // a new version is available newVersionAvailable = true; try { latestVersionURL = HandleManager.resolveToURL( context, latestVersionItem.getHandle()); } catch (SQLException e) { throw new PluginException(e.getMessage()); } latestVersionHandle = latestVersionItem.getHandle(); } else { // We might be dealing with a workflow/workspace item showVersionWorkflowAvailable = true; } } } } request.setAttribute("versioning.enabled", versioningEnabled); request.setAttribute("versioning.hasversionbutton", hasVersionButton); request.setAttribute("versioning.hasversionhistory", hasVersionHistory); request.setAttribute("versioning.history", history); request.setAttribute("versioning.historyversions", historyVersions); request.setAttribute("versioning.newversionavailable", newVersionAvailable); request.setAttribute("versioning.showversionwfavailable", showVersionWorkflowAvailable); request.setAttribute("versioning.latestversionhandle", latestVersionHandle); request.setAttribute("versioning.latestversionurl", latestVersionURL); } }