Merged V3.2 to HEAD

17307: Merged DEV/BELARUS/V3.2-2009_10_19 to V3.2
       17121: ETHREEOH-2999: Accessing Recent snapshots fails in a web project that is created from an already existing project 
       17223: ETHREEEOH-2999: (post-review changes)
   17346: ETHREEOH-2824 - further perf improvement for multiple single submits (to active workflow sandboxes) from large modified list
   17375: Fix ETHREEOH-1643 - WCM revert file & version history, including a few unreported WCM / UI revert file issues
   17380: ETHREEOH-1643 - fix build/test fallout


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18110 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2010-01-19 10:26:45 +00:00
parent cd903c80df
commit 85e4c0dbf1
14 changed files with 191 additions and 138 deletions

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@@ -24,19 +24,13 @@
*/ */
package org.alfresco.web.action.evaluator; package org.alfresco.web.action.evaluator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.web.app.servlet.FacesHelper; import org.alfresco.web.app.servlet.FacesHelper;
import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.wcm.AVMBrowseBean; import org.alfresco.web.bean.wcm.AVMBrowseBean;
import org.alfresco.web.bean.wcm.AVMNode; import org.alfresco.web.bean.wcm.AVMNode;
import org.alfresco.web.bean.wcm.AVMUtil; import org.alfresco.web.bean.wcm.AVMUtil;
import org.alfresco.web.bean.wcm.AVMWorkflowUtil;
import org.alfresco.web.bean.wcm.WebProject; 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 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) * @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 FacesContext fc = FacesContext.getCurrentInstance();
final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME); final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME);
WebProject webProject = avmBrowseBean.getWebProject(); WebProject webProject = avmBrowseBean.getWebProject();
if (webProject == null || webProject.hasWorkflow()) if (webProject == null || webProject.hasWorkflow())
{ {
Map<String, List<WorkflowTask>> cachedSandboxTasks = (Map<String, List<WorkflowTask>>)fc.getExternalContext().getRequestMap().get(TASK_CACHE);
if (cachedSandboxTasks == null)
{
cachedSandboxTasks = new HashMap<String, List<WorkflowTask>>(64, 1.0f);
fc.getExternalContext().getRequestMap().put(TASK_CACHE, cachedSandboxTasks);
}
String sandbox = AVMUtil.getStoreName(node.getPath()); String sandbox = AVMUtil.getStoreName(node.getPath());
List<WorkflowTask> 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 // 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 // dialog) or not part of an already in-progress workflow
proceed = (AVMUtil.isWorkflowStore(sandbox) || proceed = (AVMUtil.isWorkflowStore(sandbox) ||
!((AVMNode)node).isWorkflowInFlight(cachedTasks)); !((AVMNode)node).isInActiveWorkflow(sandbox));
} }
else else
{ {

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@@ -24,19 +24,13 @@
*/ */
package org.alfresco.web.action.evaluator; package org.alfresco.web.action.evaluator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.web.app.servlet.FacesHelper; import org.alfresco.web.app.servlet.FacesHelper;
import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.wcm.AVMBrowseBean; import org.alfresco.web.bean.wcm.AVMBrowseBean;
import org.alfresco.web.bean.wcm.AVMNode; import org.alfresco.web.bean.wcm.AVMNode;
import org.alfresco.web.bean.wcm.AVMUtil; import org.alfresco.web.bean.wcm.AVMUtil;
import org.alfresco.web.bean.wcm.AVMWorkflowUtil;
import org.alfresco.web.bean.wcm.WebProject; 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 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) * @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 FacesContext fc = FacesContext.getCurrentInstance();
final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME); final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME);
WebProject webProject = avmBrowseBean.getWebProject(); WebProject webProject = avmBrowseBean.getWebProject();
if (webProject == null || webProject.hasWorkflow()) if (webProject == null || webProject.hasWorkflow())
{ {
Map<String, List<WorkflowTask>> cachedSandboxTasks = (Map<String, List<WorkflowTask>>)fc.getExternalContext().getRequestMap().get(TASK_CACHE);
if (cachedSandboxTasks == null)
{
cachedSandboxTasks = new HashMap<String, List<WorkflowTask>>(64, 1.0f);
fc.getExternalContext().getRequestMap().put(TASK_CACHE, cachedSandboxTasks);
}
String sandbox = AVMUtil.getStoreName(node.getPath()); String sandbox = AVMUtil.getStoreName(node.getPath());
List<WorkflowTask> cachedTasks = cachedSandboxTasks.get(sandbox);
if (cachedTasks == null)
{
cachedTasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(sandbox);
cachedSandboxTasks.put(sandbox, cachedTasks);
}
proceed = ((AVMUtil.isWorkflowStore(sandbox) || proceed = ((AVMUtil.isWorkflowStore(sandbox) ||
!((AVMNode)node).isWorkflowInFlight(cachedTasks)) && !((AVMNode)node).isInActiveWorkflow(sandbox)) &&
!((AVMNode)node).isDeleted()); !((AVMNode)node).isDeleted());
} }
else else

View File

@@ -71,7 +71,6 @@ import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.workflow.WorkflowService; 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.AssetInfo;
import org.alfresco.wcm.asset.AssetInfoImpl; import org.alfresco.wcm.asset.AssetInfoImpl;
import org.alfresco.wcm.sandbox.SandboxInfo; import org.alfresco.wcm.sandbox.SandboxInfo;
@@ -2254,18 +2253,11 @@ public class AVMBrowseBean implements IContextListener
String sbStoreId = storePath[0]; String sbStoreId = storePath[0];
List<String> paths = new ArrayList<String>(); List<String> paths = new ArrayList<String>();
List<WorkflowTask> tasks = null;
for (AssetInfo asset : assets) for (AssetInfo asset : assets)
{ {
if (asset.getDiffCode() == AVMDifference.CONFLICT) if (asset.getDiffCode() == AVMDifference.CONFLICT)
{ {
// TODO refactor getAssociatedTasksForNode to use AssetInfo instead of AVMNodeDescriptor if (! AVMWorkflowUtil.isInActiveWorkflow(sbStoreId, asset.getPath()))
AVMNodeDescriptor node = ((AssetInfoImpl)asset).getAVMNodeDescriptor();
if (tasks == null)
{
tasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(sbStoreId);
}
if (AVMWorkflowUtil.getAssociatedTasksForNode(node, tasks).size() == 0)
{ {
paths.add(asset.getPath()); paths.add(asset.getPath());
} }

View File

@@ -41,6 +41,7 @@ import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.wcm.asset.AssetInfo; import org.alfresco.wcm.asset.AssetInfo;
import org.alfresco.wcm.asset.AssetInfoImpl; import org.alfresco.wcm.asset.AssetInfoImpl;
import org.alfresco.wcm.util.WCMUtil;
import org.alfresco.web.bean.BrowseBean; import org.alfresco.web.bean.BrowseBean;
import org.alfresco.web.bean.repository.Node; import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.NodePropertyResolver; import org.alfresco.web.bean.repository.NodePropertyResolver;
@@ -255,8 +256,8 @@ public class AVMNode extends Node implements Map<String, Object>
} }
return !this.layeringDesc.isBackground(); return !this.layeringDesc.isBackground();
} }
public final boolean isWorkflowInFlight(List<WorkflowTask> tasks) public final boolean isInActiveWorkflow(String sandbox)
{ {
if (this.workflowInFlight == null) if (this.workflowInFlight == null)
{ {
@@ -266,7 +267,7 @@ public class AVMNode extends Node implements Map<String, Object>
} }
else else
{ {
this.workflowInFlight = AVMWorkflowUtil.getAssociatedTasksForNode(this.avmRef, tasks).size() != 0; this.workflowInFlight = AVMWorkflowUtil.isInActiveWorkflow(sandbox, this.getDescriptor());
} }
} }
return this.workflowInFlight; return this.workflowInFlight;

View File

@@ -32,7 +32,9 @@ import java.io.ObjectOutputStream;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
@@ -43,6 +45,7 @@ import org.alfresco.model.WCMAppModel;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor; import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMService; 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.ContentReader;
import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter; 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.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.service.cmr.workflow.WorkflowTask; import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.wcm.util.WCMUtil;
import org.alfresco.wcm.util.WCMWorkflowUtil; import org.alfresco.wcm.util.WCMWorkflowUtil;
import org.alfresco.web.app.Application; import org.alfresco.web.app.Application;
import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.repository.Repository;
@@ -66,6 +70,8 @@ import org.apache.commons.logging.LogFactory;
public class AVMWorkflowUtil extends WorkflowUtil public class AVMWorkflowUtil extends WorkflowUtil
{ {
private static final Log logger = LogFactory.getLog(AVMWorkflowUtil.class); private static final Log logger = LogFactory.getLog(AVMWorkflowUtil.class);
private static final String PATH_CACHE = "_alf_sandbox_path_cache";
// cached configured lists // cached configured lists
private static List<WorkflowDefinition> configuredWorkflowDefs = null; private static List<WorkflowDefinition> configuredWorkflowDefs = null;
@@ -176,7 +182,10 @@ public class AVMWorkflowUtil extends WorkflowUtil
} }
return configuredWorkflowDefs; return configuredWorkflowDefs;
} }
/**
* @deprecated since 3.2
*/
public static List<WorkflowTask> getAssociatedTasksForSandbox(final String storeName) public static List<WorkflowTask> getAssociatedTasksForSandbox(final String storeName)
{ {
FacesContext fc = FacesContext.getCurrentInstance(); FacesContext fc = FacesContext.getCurrentInstance();
@@ -184,10 +193,47 @@ public class AVMWorkflowUtil extends WorkflowUtil
return WCMWorkflowUtil.getAssociatedTasksForSandbox(workflowService, storeName); return WCMWorkflowUtil.getAssociatedTasksForSandbox(workflowService, storeName);
} }
/**
* @deprecated since 3.2
*/
public static List<WorkflowTask> getAssociatedTasksForNode(AVMNodeDescriptor node, List<WorkflowTask> tasks) public static List<WorkflowTask> getAssociatedTasksForNode(AVMNodeDescriptor node, List<WorkflowTask> tasks)
{ {
FacesContext fc = FacesContext.getCurrentInstance(); FacesContext fc = FacesContext.getCurrentInstance();
AVMService avmService = Repository.getServiceRegistry(fc).getAVMService(); AVMService avmService = Repository.getServiceRegistry(fc).getAVMService();
return WCMWorkflowUtil.getAssociatedTasksForNode(avmService, node, tasks); 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<String> cachedPaths = AVMWorkflowUtil.getAssociatedPathsForSandbox(sandbox);
return (cachedPaths.contains(relativePath));
}
private static List<String> getAssociatedPathsForSandbox(String sandbox)
{
FacesContext fc = FacesContext.getCurrentInstance();
AVMSyncService avmSyncService = Repository.getServiceRegistry(fc).getAVMSyncService();
WorkflowService workflowService = Repository.getServiceRegistry(fc).getWorkflowService();
Map<String, List<String>> cachedSandboxPaths = (Map<String, List<String>>)fc.getExternalContext().getRequestMap().get(PATH_CACHE);
if (cachedSandboxPaths == null)
{
cachedSandboxPaths = new HashMap<String, List<String>>(64, 1.0f);
fc.getExternalContext().getRequestMap().put(PATH_CACHE, cachedSandboxPaths);
}
List<String> cachedPaths = cachedSandboxPaths.get(sandbox);
if (cachedPaths == null)
{
cachedPaths = WCMWorkflowUtil.getAssociatedPathsForSandbox(avmSyncService, workflowService, sandbox);
cachedSandboxPaths.put(sandbox, cachedPaths);
}
return cachedPaths;
}
} }

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * 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.avm.AVMService;
import org.alfresco.service.cmr.avmsync.AVMSyncService; import org.alfresco.service.cmr.avmsync.AVMSyncService;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.wcm.sandbox.SandboxService;
import org.alfresco.web.app.Application; import org.alfresco.web.app.Application;
import org.alfresco.web.bean.dialog.BaseDialogBean; import org.alfresco.web.bean.dialog.BaseDialogBean;
import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.repository.Repository;
@@ -43,7 +44,6 @@ import org.apache.commons.logging.LogFactory;
* Base class for AVMCompare dialogs * Base class for AVMCompare dialogs
* *
* @author Dmitry Lazurkin * @author Dmitry Lazurkin
*
*/ */
public abstract class CompareSnapshotDialog extends BaseDialogBean public abstract class CompareSnapshotDialog extends BaseDialogBean
{ {
@@ -53,6 +53,7 @@ public abstract class CompareSnapshotDialog extends BaseDialogBean
private final static String MSG_CLOSE = "close"; private final static String MSG_CLOSE = "close";
protected AVMBrowseBean avmBrowseBean; protected AVMBrowseBean avmBrowseBean;
transient private SandboxService sandboxService;
transient private AVMService avmService; transient private AVMService avmService;
transient private AVMSyncService avmSyncService; transient private AVMSyncService avmSyncService;
protected NodeRef websiteRef; protected NodeRef websiteRef;
@@ -108,7 +109,7 @@ public abstract class CompareSnapshotDialog extends BaseDialogBean
@Override @Override
public String getContainerDescription() 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); return MessageFormat.format(Application.getMessage(FacesContext.getCurrentInstance(), getDescription()), version, prev);
} }
@@ -159,6 +160,20 @@ public abstract class CompareSnapshotDialog extends BaseDialogBean
return avmService; 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 * Getter for avmSyncService service
* *

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * 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 * Builds list of available version numbers
*/ */
private void buildAvailibleVersionNumbers() private void buildAvailableVersionNumbers()
{ {
this.curAvailableVersionNumber = -1; this.curAvailableVersionNumber = -1;
this.availableVersionNumbers = AVMCompareUtils.getAllVersionID(getAvmService(), userSpecifiedStore); this.availableVersionNumbers = WCMCompareUtils.getAllVersionID(getSandboxService(), userSpecifiedStore);
Collections.sort(availableVersionNumbers);
} }
@Override @Override
@@ -78,7 +79,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog
userSpecifiedStore = sandbox; userSpecifiedStore = sandbox;
userSpecifiedRoot = storeRoot; userSpecifiedRoot = storeRoot;
userSpecifiedVersion = -1; userSpecifiedVersion = -1;
buildAvailibleVersionNumbers(); buildAvailableVersionNumbers();
this.compare = true; this.compare = true;
this.storeChanged = false; this.storeChanged = false;
} }
@@ -102,7 +103,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog
if (isCorrectVersion(userSpecifiedVersion)) if (isCorrectVersion(userSpecifiedVersion))
{ {
nodes = AVMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, userSpecifiedVersion, userSpecifiedRoot, null); nodes = WCMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, userSpecifiedVersion, userSpecifiedRoot, null);
} }
return nodes; return nodes;
@@ -118,7 +119,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog
*/ */
public List<SelectItem> getStoresList() public List<SelectItem> getStoresList()
{ {
List<String> stores = AVMCompareUtils.receiveStoresList(getAvmService()); List<String> stores = WCMCompareUtils.receiveStoresList(getAvmService());
List<SelectItem> result = new ArrayList<SelectItem>(); List<SelectItem> result = new ArrayList<SelectItem>();
@@ -211,7 +212,7 @@ public class CompareToAnySnapshotDialog extends CompareSnapshotDialog
this.userSpecifiedStore = userSpecifiedSnapshot; this.userSpecifiedStore = userSpecifiedSnapshot;
this.userSpecifiedRoot = AVMUtil.buildSandboxRootPath(this.userSpecifiedStore); this.userSpecifiedRoot = AVMUtil.buildSandboxRootPath(this.userSpecifiedStore);
this.userSpecifiedVersion = -1; this.userSpecifiedVersion = -1;
buildAvailibleVersionNumbers(); buildAvailableVersionNumbers();
} }
} }

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * 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 * Class for compareToCurrentSnapshot dialog
* @author ValerySh
* *
* @author ValerySh
*/ */
public class CompareToCurrentSnapshotDialog extends CompareSnapshotDialog public class CompareToCurrentSnapshotDialog extends CompareSnapshotDialog
{ {
@@ -58,7 +58,7 @@ public class CompareToCurrentSnapshotDialog extends CompareSnapshotDialog
return null; return null;
} }
finished = true; finished = true;
return AVMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, -1, storeRoot, null); return WCMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, -1, storeRoot, null);
} }
/* /*

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@@ -31,7 +31,6 @@ import java.util.Map;
* Class for compareToPreviousSnapshot dialog * Class for compareToPreviousSnapshot dialog
* *
* @author ValerySh * @author ValerySh
*
*/ */
public class CompareToPreviousSnapshotDialog extends CompareSnapshotDialog public class CompareToPreviousSnapshotDialog extends CompareSnapshotDialog
{ {
@@ -42,8 +41,8 @@ public class CompareToPreviousSnapshotDialog extends CompareSnapshotDialog
public List<Map<String, String>> getComparedNodes() public List<Map<String, String>> getComparedNodes()
{ {
int prevVersion = AVMCompareUtils.getPrevVersionID(getAvmService(), sandbox, version); int prevVersion = WCMCompareUtils.getPrevVersionID(getSandboxService(), sandbox, version);
return AVMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, prevVersion, storeRoot, null); return WCMCompareUtils.getComparedNodes(getAvmSyncService(), version, storeRoot, prevVersion, storeRoot, null);
} }
protected String getDescription() protected String getDescription()

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * 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() + logger.debug("reset form instance data " + this.formInstanceData.getName() +
" and " + this.renditions.size() + " rendition(s) to main store"); " and " + this.renditions.size() + " rendition(s) to main store");
} }
this.avmBrowseBean.setAvmActionNode(new AVMNode(this.getAvmService().lookup(-1, this.createdPath)));
return outcome; return outcome;
} }

View File

@@ -53,7 +53,6 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowService; 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.QName;
import org.alfresco.service.namespace.RegexQNamePattern; import org.alfresco.service.namespace.RegexQNamePattern;
import org.springframework.extensions.surf.util.ISO8601DateFormat; import org.springframework.extensions.surf.util.ISO8601DateFormat;
@@ -730,18 +729,15 @@ public class SubmitDialog extends BaseDialogBean
Set<String> submittedPaths = new HashSet<String>(selected.size()); Set<String> submittedPaths = new HashSet<String>(selected.size());
this.submitItems = new ArrayList<ItemWrapper>(selected.size()); this.submitItems = new ArrayList<ItemWrapper>(selected.size());
this.warningItems = new ArrayList<ItemWrapper>(selected.size() >> 1); this.warningItems = new ArrayList<ItemWrapper>(selected.size() >> 1);
List<WorkflowTask> tasks = null;
for (AVMNodeDescriptor node : selected) for (AVMNodeDescriptor node : selected)
{ {
if (tasks == null) if (AVMWorkflowUtil.isInActiveWorkflow(this.avmBrowseBean.getStagingStore(), node))
{
tasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(AVMUtil.getStoreName(node.getPath()));
}
if (AVMWorkflowUtil.getAssociatedTasksForNode(node, tasks).size() != 0)
{ {
this.warningItems.add(new ItemWrapper(node)); this.warningItems.add(new ItemWrapper(node));
continue; continue;
} }
NodeRef ref = AVMNodeConverter.ToNodeRef(-1, node.getPath()); NodeRef ref = AVMNodeConverter.ToNodeRef(-1, node.getPath());
if (submittedPaths.contains(node.getPath())) if (submittedPaths.contains(node.getPath()))
{ {

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * 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.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.faces.context.FacesContext; 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.AVMService;
import org.alfresco.service.cmr.avm.AVMStoreDescriptor; 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.AVMDifference;
import org.alfresco.service.cmr.avmsync.AVMSyncService; import org.alfresco.service.cmr.avmsync.AVMSyncService;
import org.alfresco.util.NameMatcher; import org.alfresco.util.NameMatcher;
import org.alfresco.wcm.sandbox.SandboxService;
import org.alfresco.wcm.sandbox.SandboxVersion;
import org.alfresco.web.app.Application; import org.alfresco.web.app.Application;
/** /**
* AVMCompare Utils * AVMCompare Utils
* @author ValerySh
* *
* @author ValerySh
*/ */
public class AVMCompareUtils public class WCMCompareUtils
{ {
/** /**
* Get a difference map between two corresponding node trees. * Get a difference map between two corresponding node trees.
*
* @param avmSyncService AVMSyncService * @param avmSyncService AVMSyncService
* @param srcVersion The version id for the source tree. * @param srcVersion The version id for the source tree.
* @param srcPath The avm path to 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 * checks the version of the first is accessible for Store
* @param avmService AVMService *
* @param name The name of the AVMStore * @param versions versions of specified store.
* @param version Version * @param item Version
* @return true if version is first * @return true if version is first
*/ */
public static boolean isFirstVersion(AVMService avmService, String name, int version) public static boolean isFirstVersion(List<SandboxVersion> versions, SandboxVersion item)
{ {
boolean result = false; boolean result = false;
List<Integer> allVersions = getAllVersionID(avmService, name); if (versions.size() > 0)
{
if (version == Collections.min(allVersions)) if (item.getVersion() == Collections.min(versions, new SandboxVersionComparator()).getVersion())
result = true; {
result = true;
}
}
return result; return result;
} }
/** /**
* checks the version of the last is accessible for Store * checks the version of the last is accessible for Store
* @param avmService AVMService *
* @param name The name of the AVMStore * @param versions versions of specified store.
* @param version Version * @param item Version
* @return true if version is latest * @return true if version is latest
*/ */
public static boolean isLatestVersion(AVMService avmService, String name, int version) public static boolean isLatestVersion(List<SandboxVersion> versions, SandboxVersion item)
{ {
boolean result = false; boolean result = false;
List<Integer> allVersions = getAllVersionID(avmService, name); if (versions.size() > 0)
if (version == Collections.max(allVersions)) {
result = true; if (item.getVersion() == Collections.max(versions, new SandboxVersionComparator()).getVersion())
{
result = true;
}
}
return result; return result;
} }
/** /**
* Get the versions id in an AVMStore * Get Previous Version Id
* @param avmService AVMService *
* @param name The name of the AVMStore * @param sandboxService SandboxService
* @return List versions id
*/
public static List<Integer> getAllVersionID(AVMService avmService, String name)
{
List<Integer> allVersions = new ArrayList<Integer>();
List<VersionDescriptor> 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
* @param name The name of the AVMStore * @param name The name of the AVMStore
* @param version Current version Id * @param version Current version Id
* @return Previous 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<Integer> allVersions = getAllVersionID(avmService, name); List<Integer> allVersions = getAllVersionID(sandboxService, name);
Collections.sort(allVersions); Collections.sort(allVersions);
int index = allVersions.indexOf(version); int index = allVersions.indexOf(version);
if (index == 0) if (index == 0)
{
return 0; return 0;
}
else
{
if (index == -1)
{
return -1;
}
}
return allVersions.get(index - 1); return allVersions.get(index - 1);
} }
/** /**
* Receive Stores List * Receive Stores List
*
* @param avmService AVMService * @param avmService AVMService
* @return List Stores name * @return List Stores name
*/ */
@@ -180,9 +182,42 @@ public class AVMCompareUtils
List<AVMStoreDescriptor> storeDescs = avmService.getStores(); List<AVMStoreDescriptor> storeDescs = avmService.getStores();
for (AVMStoreDescriptor storeDesc : storeDescs) 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()); result.add(storeDesc.getName());
}
} }
return result; 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<Integer> getAllVersionID(SandboxService sandboxService, String store)
{
List<SandboxVersion> allVersions = sandboxService.listSnapshots(store, false);
List<Integer> result = new ArrayList<Integer>();
for (SandboxVersion sandboxVersion : allVersions)
{
result.add(sandboxVersion.getVersion());
}
return result;
}
/**
* Comparator for SandboxVersion class
*/
private static class SandboxVersionComparator implements Comparator<SandboxVersion>
{
public int compare(SandboxVersion o1, SandboxVersion o2)
{
return ((Integer) o1.getVersion()).compareTo((Integer) o2.getVersion());
}
}
} }

View File

@@ -53,7 +53,7 @@ import org.alfresco.wcm.sandbox.SandboxVersion;
import org.alfresco.wcm.util.WCMUtil; import org.alfresco.wcm.util.WCMUtil;
import org.alfresco.web.app.Application; import org.alfresco.web.app.Application;
import org.alfresco.web.bean.repository.Repository; 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.bean.wcm.DeploymentUtil;
import org.alfresco.web.ui.common.ComponentConstants; import org.alfresco.web.ui.common.ComponentConstants;
import org.alfresco.web.ui.common.Utils; 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("&nbsp;"); * Utils.encodeRecursive(context, aquireAction( context, sandbox, ACT_SNAPSHOT_PREVIEW, null, null, null)); out.write("&nbsp;");
*/ */
boolean isLatestVersion = AVMCompareUtils.isLatestVersion(avmService, sandbox, version); boolean isLatestVersion = WCMCompareUtils.isLatestVersion(versions, item);
// ///////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////
if (!isLatestVersion) if (!isLatestVersion)
{ {
@@ -335,7 +335,7 @@ public class UISandboxSnapshots extends SelfRenderingComponent
Utils.encodeRecursive(context, action); Utils.encodeRecursive(context, action);
} }
boolean isFirstVersion = AVMCompareUtils.isFirstVersion(avmService, sandbox, version); boolean isFirstVersion = WCMCompareUtils.isFirstVersion(versions, item);
if (!isFirstVersion) if (!isFirstVersion)
{ {
out.write("&nbsp;&nbsp;"); out.write("&nbsp;&nbsp;");

View File

@@ -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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@@ -119,9 +119,15 @@
<h:outputText id="outT3" value="#{msg.actions}" /> <h:outputText id="outT3" value="#{msg.actions}" />
</f:facet> </f:facet>
<a:actionLink id="view-link" value="#{msg.view}" href="#{r.url}" target="new" image="#{r.fileType16}" style="padding-right:8px" /> <a:actionLink id="view-link" value="#{msg.view}" href="#{r.url}" target="new" image="#{r.fileType16}" style="padding-right:8px" />
<a:actionLink id="revert-link" value="#{msg.revert}" actionListener="#{DialogManager.bean.revertNode}" action="dialog:close" image="/images/icons/revert.gif">
<f:param name="version" value="#{r.strVersion}" /> <r:permissionEvaluator id="eval2" value="#{DialogManager.bean.avmNode}" allow="Write">
</a:actionLink> <r:actionInstanceEvaluator id="acEv1" value="#{DialogManager.bean.avmNode}" evaluatorClassName="org.alfresco.web.action.evaluator.WCMWorkflowEvaluator">
<a:actionLink id="revert-link" value="#{msg.revert}" actionListener="#{DialogManager.bean.revertNode}" action="dialog:close" image="/images/icons/revert.gif">
<f:param name="version" value="#{r.strVersion}" />
</a:actionLink>
</r:actionInstanceEvaluator>
</r:permissionEvaluator>
</a:column> </a:column>
<a:dataPager id="pager" styleClass="pager" /> <a:dataPager id="pager" styleClass="pager" />