diff --git a/source/java/org/alfresco/web/action/evaluator/WCMWorkflowDeletedEvaluator.java b/source/java/org/alfresco/web/action/evaluator/WCMWorkflowDeletedEvaluator.java index 1926bde92e..d4e582b7c0 100644 --- a/source/java/org/alfresco/web/action/evaluator/WCMWorkflowDeletedEvaluator.java +++ b/source/java/org/alfresco/web/action/evaluator/WCMWorkflowDeletedEvaluator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -24,19 +24,13 @@ */ package org.alfresco.web.action.evaluator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import javax.faces.context.FacesContext; -import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.web.app.servlet.FacesHelper; import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.wcm.AVMBrowseBean; import org.alfresco.web.bean.wcm.AVMNode; import org.alfresco.web.bean.wcm.AVMUtil; -import org.alfresco.web.bean.wcm.AVMWorkflowUtil; import org.alfresco.web.bean.wcm.WebProject; /** @@ -49,8 +43,6 @@ public class WCMWorkflowDeletedEvaluator extends WCMLockEvaluator { private static final long serialVersionUID = -4341942166433855200L; - private static final String TASK_CACHE = "_alf_sandbox_task_cache"; - /** * @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node) */ @@ -61,28 +53,16 @@ public class WCMWorkflowDeletedEvaluator extends WCMLockEvaluator { final FacesContext fc = FacesContext.getCurrentInstance(); final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME); + WebProject webProject = avmBrowseBean.getWebProject(); if (webProject == null || webProject.hasWorkflow()) { - Map> cachedSandboxTasks = (Map>)fc.getExternalContext().getRequestMap().get(TASK_CACHE); - if (cachedSandboxTasks == null) - { - cachedSandboxTasks = new HashMap>(64, 1.0f); - fc.getExternalContext().getRequestMap().put(TASK_CACHE, cachedSandboxTasks); - } - String sandbox = AVMUtil.getStoreName(node.getPath()); - List cachedTasks = cachedSandboxTasks.get(sandbox); - if (cachedTasks == null) - { - cachedTasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(sandbox); - cachedSandboxTasks.put(sandbox, cachedTasks); - } // evaluate to true if we are within a workflow store (i.e. list of resources in the task // dialog) or not part of an already in-progress workflow proceed = (AVMUtil.isWorkflowStore(sandbox) || - !((AVMNode)node).isWorkflowInFlight(cachedTasks)); + !((AVMNode)node).isInActiveWorkflow(sandbox)); } else { diff --git a/source/java/org/alfresco/web/action/evaluator/WCMWorkflowEvaluator.java b/source/java/org/alfresco/web/action/evaluator/WCMWorkflowEvaluator.java index 149b5c7a3b..dc854a4243 100644 --- a/source/java/org/alfresco/web/action/evaluator/WCMWorkflowEvaluator.java +++ b/source/java/org/alfresco/web/action/evaluator/WCMWorkflowEvaluator.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -24,19 +24,13 @@ */ package org.alfresco.web.action.evaluator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import javax.faces.context.FacesContext; -import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.web.app.servlet.FacesHelper; import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.wcm.AVMBrowseBean; import org.alfresco.web.bean.wcm.AVMNode; import org.alfresco.web.bean.wcm.AVMUtil; -import org.alfresco.web.bean.wcm.AVMWorkflowUtil; import org.alfresco.web.bean.wcm.WebProject; /** @@ -48,8 +42,6 @@ public class WCMWorkflowEvaluator extends WCMLockEvaluator { private static final long serialVersionUID = -5847066921917855781L; - private static final String TASK_CACHE = "_alf_sandbox_task_cache"; - /** * @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node) */ @@ -60,26 +52,14 @@ public class WCMWorkflowEvaluator extends WCMLockEvaluator { final FacesContext fc = FacesContext.getCurrentInstance(); final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME); + WebProject webProject = avmBrowseBean.getWebProject(); if (webProject == null || webProject.hasWorkflow()) { - Map> cachedSandboxTasks = (Map>)fc.getExternalContext().getRequestMap().get(TASK_CACHE); - if (cachedSandboxTasks == null) - { - cachedSandboxTasks = new HashMap>(64, 1.0f); - fc.getExternalContext().getRequestMap().put(TASK_CACHE, cachedSandboxTasks); - } - String sandbox = AVMUtil.getStoreName(node.getPath()); - List cachedTasks = cachedSandboxTasks.get(sandbox); - if (cachedTasks == null) - { - cachedTasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(sandbox); - cachedSandboxTasks.put(sandbox, cachedTasks); - } - + proceed = ((AVMUtil.isWorkflowStore(sandbox) || - !((AVMNode)node).isWorkflowInFlight(cachedTasks)) && + !((AVMNode)node).isInActiveWorkflow(sandbox)) && !((AVMNode)node).isDeleted()); } else diff --git a/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java b/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java index 91100b105e..05cd65e1fa 100644 --- a/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java +++ b/source/java/org/alfresco/web/bean/wcm/AVMBrowseBean.java @@ -71,7 +71,6 @@ import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.workflow.WorkflowService; -import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.wcm.asset.AssetInfo; import org.alfresco.wcm.asset.AssetInfoImpl; import org.alfresco.wcm.sandbox.SandboxInfo; @@ -2254,18 +2253,11 @@ public class AVMBrowseBean implements IContextListener String sbStoreId = storePath[0]; List paths = new ArrayList(); - List tasks = null; for (AssetInfo asset : assets) { if (asset.getDiffCode() == AVMDifference.CONFLICT) { - // TODO refactor getAssociatedTasksForNode to use AssetInfo instead of AVMNodeDescriptor - AVMNodeDescriptor node = ((AssetInfoImpl)asset).getAVMNodeDescriptor(); - if (tasks == null) - { - tasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(sbStoreId); - } - if (AVMWorkflowUtil.getAssociatedTasksForNode(node, tasks).size() == 0) + if (! AVMWorkflowUtil.isInActiveWorkflow(sbStoreId, asset.getPath())) { paths.add(asset.getPath()); } diff --git a/source/java/org/alfresco/web/bean/wcm/AVMNode.java b/source/java/org/alfresco/web/bean/wcm/AVMNode.java index 132d55093c..91e3efeb75 100644 --- a/source/java/org/alfresco/web/bean/wcm/AVMNode.java +++ b/source/java/org/alfresco/web/bean/wcm/AVMNode.java @@ -41,6 +41,7 @@ import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.namespace.QName; import org.alfresco.wcm.asset.AssetInfo; import org.alfresco.wcm.asset.AssetInfoImpl; +import org.alfresco.wcm.util.WCMUtil; import org.alfresco.web.bean.BrowseBean; import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.repository.NodePropertyResolver; @@ -255,8 +256,8 @@ public class AVMNode extends Node implements Map } return !this.layeringDesc.isBackground(); } - - public final boolean isWorkflowInFlight(List tasks) + + public final boolean isInActiveWorkflow(String sandbox) { if (this.workflowInFlight == null) { @@ -266,7 +267,7 @@ public class AVMNode extends Node implements Map } else { - this.workflowInFlight = AVMWorkflowUtil.getAssociatedTasksForNode(this.avmRef, tasks).size() != 0; + this.workflowInFlight = AVMWorkflowUtil.isInActiveWorkflow(sandbox, this.getDescriptor()); } } return this.workflowInFlight; diff --git a/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java b/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java index bac77ad852..dcec37942d 100644 --- a/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java +++ b/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java @@ -32,7 +32,9 @@ import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import javax.faces.context.FacesContext; @@ -43,6 +45,7 @@ import org.alfresco.model.WCMAppModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.service.cmr.avm.AVMNodeDescriptor; import org.alfresco.service.cmr.avm.AVMService; +import org.alfresco.service.cmr.avmsync.AVMSyncService; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; @@ -50,6 +53,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.workflow.WorkflowTask; +import org.alfresco.wcm.util.WCMUtil; import org.alfresco.wcm.util.WCMWorkflowUtil; import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Repository; @@ -66,6 +70,8 @@ import org.apache.commons.logging.LogFactory; public class AVMWorkflowUtil extends WorkflowUtil { private static final Log logger = LogFactory.getLog(AVMWorkflowUtil.class); + + private static final String PATH_CACHE = "_alf_sandbox_path_cache"; // cached configured lists private static List configuredWorkflowDefs = null; @@ -176,7 +182,10 @@ public class AVMWorkflowUtil extends WorkflowUtil } return configuredWorkflowDefs; } - + + /** + * @deprecated since 3.2 + */ public static List getAssociatedTasksForSandbox(final String storeName) { FacesContext fc = FacesContext.getCurrentInstance(); @@ -184,10 +193,47 @@ public class AVMWorkflowUtil extends WorkflowUtil return WCMWorkflowUtil.getAssociatedTasksForSandbox(workflowService, storeName); } + /** + * @deprecated since 3.2 + */ public static List getAssociatedTasksForNode(AVMNodeDescriptor node, List tasks) { FacesContext fc = FacesContext.getCurrentInstance(); AVMService avmService = Repository.getServiceRegistry(fc).getAVMService(); return WCMWorkflowUtil.getAssociatedTasksForNode(avmService, node, tasks); } + + public static boolean isInActiveWorkflow(String sandbox, AVMNodeDescriptor node) + { + return isInActiveWorkflow(sandbox, WCMUtil.getStoreRelativePath(node.getPath())); + } + + public static boolean isInActiveWorkflow(String sandbox, String relativePath) + { + List cachedPaths = AVMWorkflowUtil.getAssociatedPathsForSandbox(sandbox); + return (cachedPaths.contains(relativePath)); + } + + private static List getAssociatedPathsForSandbox(String sandbox) + { + FacesContext fc = FacesContext.getCurrentInstance(); + AVMSyncService avmSyncService = Repository.getServiceRegistry(fc).getAVMSyncService(); + WorkflowService workflowService = Repository.getServiceRegistry(fc).getWorkflowService(); + + Map> cachedSandboxPaths = (Map>)fc.getExternalContext().getRequestMap().get(PATH_CACHE); + if (cachedSandboxPaths == null) + { + cachedSandboxPaths = new HashMap>(64, 1.0f); + fc.getExternalContext().getRequestMap().put(PATH_CACHE, cachedSandboxPaths); + } + + List cachedPaths = cachedSandboxPaths.get(sandbox); + if (cachedPaths == null) + { + cachedPaths = WCMWorkflowUtil.getAssociatedPathsForSandbox(avmSyncService, workflowService, sandbox); + cachedSandboxPaths.put(sandbox, cachedPaths); + } + + return cachedPaths; + } } diff --git a/source/java/org/alfresco/web/bean/wcm/CompareSnapshotDialog.java b/source/java/org/alfresco/web/bean/wcm/CompareSnapshotDialog.java index 2cdb2c0b1b..8e481b2f56 100755 --- a/source/java/org/alfresco/web/bean/wcm/CompareSnapshotDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/CompareSnapshotDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -33,6 +33,7 @@ import javax.faces.context.FacesContext; import org.alfresco.service.cmr.avm.AVMService; import org.alfresco.service.cmr.avmsync.AVMSyncService; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.wcm.sandbox.SandboxService; import org.alfresco.web.app.Application; import org.alfresco.web.bean.dialog.BaseDialogBean; import org.alfresco.web.bean.repository.Repository; @@ -43,7 +44,6 @@ import org.apache.commons.logging.LogFactory; * Base class for AVMCompare dialogs * * @author Dmitry Lazurkin - * */ public abstract class CompareSnapshotDialog extends BaseDialogBean { @@ -53,6 +53,7 @@ public abstract class CompareSnapshotDialog extends BaseDialogBean private final static String MSG_CLOSE = "close"; protected AVMBrowseBean avmBrowseBean; + transient private SandboxService sandboxService; transient private AVMService avmService; transient private AVMSyncService avmSyncService; protected NodeRef websiteRef; @@ -108,7 +109,7 @@ public abstract class CompareSnapshotDialog extends BaseDialogBean @Override public String getContainerDescription() { - int prev = AVMCompareUtils.getPrevVersionID(getAvmService(), sandbox, version); + int prev = WCMCompareUtils.getPrevVersionID(getSandboxService(), sandbox, version); return MessageFormat.format(Application.getMessage(FacesContext.getCurrentInstance(), getDescription()), version, prev); } @@ -159,6 +160,20 @@ public abstract class CompareSnapshotDialog extends BaseDialogBean return avmService; } + /** + * Getter for sandboxService service + * + * @return sandboxService + */ + public SandboxService getSandboxService() + { + if (sandboxService == null) + { + sandboxService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getSandboxService(); + } + return sandboxService; + } + /** * Getter for avmSyncService service * diff --git a/source/java/org/alfresco/web/bean/wcm/CompareToAnySnapshotDialog.java b/source/java/org/alfresco/web/bean/wcm/CompareToAnySnapshotDialog.java index 7469fd3d02..8ed892dce8 100755 --- a/source/java/org/alfresco/web/bean/wcm/CompareToAnySnapshotDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/CompareToAnySnapshotDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -65,10 +65,11 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog /** * Builds list of available version numbers */ - private void buildAvailibleVersionNumbers() + private void buildAvailableVersionNumbers() { this.curAvailableVersionNumber = -1; - this.availableVersionNumbers = AVMCompareUtils.getAllVersionID(getAvmService(), userSpecifiedStore); + this.availableVersionNumbers = WCMCompareUtils.getAllVersionID(getSandboxService(), userSpecifiedStore); + Collections.sort(availableVersionNumbers); } @Override @@ -78,7 +79,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog userSpecifiedStore = sandbox; userSpecifiedRoot = storeRoot; userSpecifiedVersion = -1; - buildAvailibleVersionNumbers(); + buildAvailableVersionNumbers(); this.compare = true; this.storeChanged = false; } @@ -102,7 +103,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog if (isCorrectVersion(userSpecifiedVersion)) { - nodes = AVMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, userSpecifiedVersion, userSpecifiedRoot, null); + nodes = WCMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, userSpecifiedVersion, userSpecifiedRoot, null); } return nodes; @@ -118,7 +119,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog */ public List getStoresList() { - List stores = AVMCompareUtils.receiveStoresList(getAvmService()); + List stores = WCMCompareUtils.receiveStoresList(getAvmService()); List result = new ArrayList(); @@ -211,7 +212,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog this.userSpecifiedStore = userSpecifiedSnapshot; this.userSpecifiedRoot = AVMUtil.buildSandboxRootPath(this.userSpecifiedStore); this.userSpecifiedVersion = -1; - buildAvailibleVersionNumbers(); + buildAvailableVersionNumbers(); } } diff --git a/source/java/org/alfresco/web/bean/wcm/CompareToCurrentSnapshotDialog.java b/source/java/org/alfresco/web/bean/wcm/CompareToCurrentSnapshotDialog.java index de5f786cf0..f4f8adc281 100755 --- a/source/java/org/alfresco/web/bean/wcm/CompareToCurrentSnapshotDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/CompareToCurrentSnapshotDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -32,8 +32,8 @@ import org.apache.commons.logging.LogFactory; /** * Class for compareToCurrentSnapshot dialog - * @author ValerySh * + * @author ValerySh */ public class CompareToCurrentSnapshotDialog extends CompareSnapshotDialog { @@ -58,7 +58,7 @@ public class CompareToCurrentSnapshotDialog extends CompareSnapshotDialog return null; } finished = true; - return AVMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, -1, storeRoot, null); + return WCMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, -1, storeRoot, null); } /* diff --git a/source/java/org/alfresco/web/bean/wcm/CompareToPreviousSnapshotDialog.java b/source/java/org/alfresco/web/bean/wcm/CompareToPreviousSnapshotDialog.java index bbbd8f3afa..f2774aaaac 100755 --- a/source/java/org/alfresco/web/bean/wcm/CompareToPreviousSnapshotDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/CompareToPreviousSnapshotDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -31,7 +31,6 @@ import java.util.Map; * Class for compareToPreviousSnapshot dialog * * @author ValerySh - * */ public class CompareToPreviousSnapshotDialog extends CompareSnapshotDialog { @@ -42,8 +41,8 @@ public class CompareToPreviousSnapshotDialog extends CompareSnapshotDialog public List> getComparedNodes() { - int prevVersion = AVMCompareUtils.getPrevVersionID(getAvmService(), sandbox, version); - return AVMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, prevVersion, storeRoot, null); + int prevVersion = WCMCompareUtils.getPrevVersionID(getSandboxService(), sandbox, version); + return WCMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, prevVersion, storeRoot, null); } protected String getDescription() diff --git a/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java index 2dac4d900e..03dac5f4cf 100644 --- a/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/CreateWebContentWizard.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -460,7 +460,9 @@ public class CreateWebContentWizard extends CreateContentWizard logger.debug("reset form instance data " + this.formInstanceData.getName() + " and " + this.renditions.size() + " rendition(s) to main store"); } - + + this.avmBrowseBean.setAvmActionNode(new AVMNode(this.getAvmService().lookup(-1, this.createdPath))); + return outcome; } diff --git a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java index 7640b8abbd..b9db4179fa 100644 --- a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java @@ -53,7 +53,6 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowService; -import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.RegexQNamePattern; import org.springframework.extensions.surf.util.ISO8601DateFormat; @@ -730,18 +729,15 @@ public class SubmitDialog extends BaseDialogBean Set submittedPaths = new HashSet(selected.size()); this.submitItems = new ArrayList(selected.size()); this.warningItems = new ArrayList(selected.size() >> 1); - List tasks = null; + for (AVMNodeDescriptor node : selected) { - if (tasks == null) - { - tasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(AVMUtil.getStoreName(node.getPath())); - } - if (AVMWorkflowUtil.getAssociatedTasksForNode(node, tasks).size() != 0) + if (AVMWorkflowUtil.isInActiveWorkflow(this.avmBrowseBean.getStagingStore(), node)) { this.warningItems.add(new ItemWrapper(node)); continue; } + NodeRef ref = AVMNodeConverter.ToNodeRef(-1, node.getPath()); if (submittedPaths.contains(node.getPath())) { diff --git a/source/java/org/alfresco/web/bean/wcm/AVMCompareUtils.java b/source/java/org/alfresco/web/bean/wcm/WCMCompareUtils.java similarity index 66% rename from source/java/org/alfresco/web/bean/wcm/AVMCompareUtils.java rename to source/java/org/alfresco/web/bean/wcm/WCMCompareUtils.java index 726577889e..126428aa3d 100755 --- a/source/java/org/alfresco/web/bean/wcm/AVMCompareUtils.java +++ b/source/java/org/alfresco/web/bean/wcm/WCMCompareUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -26,30 +26,34 @@ package org.alfresco.web.bean.wcm; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.context.FacesContext; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.avm.AVMService; import org.alfresco.service.cmr.avm.AVMStoreDescriptor; -import org.alfresco.service.cmr.avm.VersionDescriptor; import org.alfresco.service.cmr.avmsync.AVMDifference; import org.alfresco.service.cmr.avmsync.AVMSyncService; import org.alfresco.util.NameMatcher; +import org.alfresco.wcm.sandbox.SandboxService; +import org.alfresco.wcm.sandbox.SandboxVersion; import org.alfresco.web.app.Application; /** * AVMCompare Utils - * @author ValerySh * + * @author ValerySh */ -public class AVMCompareUtils +public class WCMCompareUtils { - + /** * Get a difference map between two corresponding node trees. + * * @param avmSyncService AVMSyncService * @param srcVersion The version id for the source tree. * @param srcPath The avm path to the source tree. @@ -101,76 +105,74 @@ public class AVMCompareUtils /** * checks the version of the first is accessible for Store - * @param avmService AVMService - * @param name The name of the AVMStore - * @param version Version + * + * @param versions versions of specified store. + * @param item Version * @return true if version is first */ - public static boolean isFirstVersion(AVMService avmService, String name, int version) + public static boolean isFirstVersion(List versions, SandboxVersion item) { boolean result = false; - List allVersions = getAllVersionID(avmService, name); - - if (version == Collections.min(allVersions)) - result = true; + if (versions.size() > 0) + { + if (item.getVersion() == Collections.min(versions, new SandboxVersionComparator()).getVersion()) + { + result = true; + } + } return result; } /** * checks the version of the last is accessible for Store - * @param avmService AVMService - * @param name The name of the AVMStore - * @param version Version + * + * @param versions versions of specified store. + * @param item Version * @return true if version is latest */ - public static boolean isLatestVersion(AVMService avmService, String name, int version) + public static boolean isLatestVersion(List versions, SandboxVersion item) { boolean result = false; - List allVersions = getAllVersionID(avmService, name); - if (version == Collections.max(allVersions)) - result = true; + if (versions.size() > 0) + { + if (item.getVersion() == Collections.max(versions, new SandboxVersionComparator()).getVersion()) + { + result = true; + } + } return result; } /** - * Get the versions id in an AVMStore - * @param avmService AVMService - * @param name The name of the AVMStore - * @return List versions id - */ - public static List getAllVersionID(AVMService avmService, String name) - { - List allVersions = new ArrayList(); - List listVersion = avmService.getStoreVersions(name); - for (VersionDescriptor vd : listVersion) - { - if ((vd.getTag() != null || AVMUtil.isUserStore(name)) && vd.getVersionID() > 2) - { - allVersions.add(vd.getVersionID()); - } - } - - return allVersions; - } - - /** Get Previous Version Id - * @param avmService AVMService + * Get Previous Version Id + * + * @param sandboxService SandboxService * @param name The name of the AVMStore * @param version Current version Id * @return Previous Version Id */ - public static int getPrevVersionID(AVMService avmService, String name, int version) + public static int getPrevVersionID(SandboxService sandboxService, String name, int version) { - List allVersions = getAllVersionID(avmService, name); + List allVersions = getAllVersionID(sandboxService, name); Collections.sort(allVersions); int index = allVersions.indexOf(version); if (index == 0) + { return 0; + } + else + { + if (index == -1) + { + return -1; + } + } return allVersions.get(index - 1); } /** * Receive Stores List + * * @param avmService AVMService * @return List Stores name */ @@ -180,9 +182,42 @@ public class AVMCompareUtils List storeDescs = avmService.getStores(); for (AVMStoreDescriptor storeDesc : storeDescs) { - if (!storeDesc.getCreator().equalsIgnoreCase("system") && !AVMUtil.isPreviewStore(storeDesc.getName())) + if (!storeDesc.getCreator().equalsIgnoreCase(AuthenticationUtil.SYSTEM_USER_NAME) && !AVMUtil.isPreviewStore(storeDesc.getName())) + { result.add(storeDesc.getName()); + } } return result; } + + /** + * Get the versions id in an AVMStore + * + * @param sandboxService SandboxService + * @param store The name of the AVMStore + * @return List versions id + */ + public static List getAllVersionID(SandboxService sandboxService, String store) + { + List allVersions = sandboxService.listSnapshots(store, false); + List result = new ArrayList(); + for (SandboxVersion sandboxVersion : allVersions) + { + result.add(sandboxVersion.getVersion()); + } + return result; + } + + /** + * Comparator for SandboxVersion class + */ + private static class SandboxVersionComparator implements Comparator + { + + public int compare(SandboxVersion o1, SandboxVersion o2) + { + return ((Integer) o1.getVersion()).compareTo((Integer) o2.getVersion()); + } + + } } diff --git a/source/java/org/alfresco/web/ui/wcm/component/UISandboxSnapshots.java b/source/java/org/alfresco/web/ui/wcm/component/UISandboxSnapshots.java index 98a18c13d3..6657700126 100644 --- a/source/java/org/alfresco/web/ui/wcm/component/UISandboxSnapshots.java +++ b/source/java/org/alfresco/web/ui/wcm/component/UISandboxSnapshots.java @@ -53,7 +53,7 @@ import org.alfresco.wcm.sandbox.SandboxVersion; import org.alfresco.wcm.util.WCMUtil; import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Repository; -import org.alfresco.web.bean.wcm.AVMCompareUtils; +import org.alfresco.web.bean.wcm.WCMCompareUtils; import org.alfresco.web.bean.wcm.DeploymentUtil; import org.alfresco.web.ui.common.ComponentConstants; import org.alfresco.web.ui.common.Utils; @@ -313,7 +313,7 @@ public class UISandboxSnapshots extends SelfRenderingComponent * Utils.encodeRecursive(context, aquireAction( context, sandbox, ACT_SNAPSHOT_PREVIEW, null, null, null)); out.write(" "); */ - boolean isLatestVersion = AVMCompareUtils.isLatestVersion(avmService, sandbox, version); + boolean isLatestVersion = WCMCompareUtils.isLatestVersion(versions, item); // ///////////////////////////////////////////////////////////////////////// if (!isLatestVersion) { @@ -335,7 +335,7 @@ public class UISandboxSnapshots extends SelfRenderingComponent Utils.encodeRecursive(context, action); } - boolean isFirstVersion = AVMCompareUtils.isFirstVersion(avmService, sandbox, version); + boolean isFirstVersion = WCMCompareUtils.isFirstVersion(versions, item); if (!isFirstVersion) { out.write("  "); diff --git a/source/web/jsp/wcm/file-details.jsp b/source/web/jsp/wcm/file-details.jsp index 38032e0137..253f0998cc 100644 --- a/source/web/jsp/wcm/file-details.jsp +++ b/source/web/jsp/wcm/file-details.jsp @@ -1,5 +1,5 @@ <%-- - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2009 Alfresco Software Limited. * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -119,9 +119,15 @@ - - - + + + + + + + + +