mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.1 to HEAD
12943: Port of support for ADB-47 from V2.1-A to 3.1 12948: Port of tests from CHK-2235 for ADB-20 from V2.1-A to 3.1 12965: Activated index tracker Quartz job by default 12974: Port for lazy creation of home folders with configuration from V2.1-A to V3.1: original CHK-2619, CHK-2716 12976: Merged V2.1A to V3.1 8562: (record-only) Fix to lazily create home folders - DO NOT MERGE 8694: (record-only) Added configuration for lazy or eager creation of home folders 12978: Merged V3.0 to V3.1 12920: Merged V2.2 to V3.0 12456: Wire up AVM locking service by interface to allow for potential over-ride 12457: Make AVM ChildKey case insensitive 12470: Merged V2.2.1-NBC-FIXES to V2.2 12156: Optimizations to WCMWorkflowEvaluator and WCMWorkflowDeletedEvaluator 12605: Hide annoying "Virtualisation Server not started" warnings (by making them debug) 12707: AVM console - "snap" also allows tag and description to be specified 12979: Build/test fix ___________________________________________________________________ Modified: svn:mergeinfo Merged /alfresco/BRANCHES/DEV/V2.2.1-NBC-FIXES:r12156 Merged /alfresco/BRANCHES/V2.1-A:r8562,8694 Merged /alfresco/BRANCHES/V3.0:r12920 Merged /alfresco/BRANCHES/V2.2:r12456-12457,12470,12605,12707 Merged /alfresco/BRANCHES/V3.1:r12943,12948,12965,12974,12976,12978-12979 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13544 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -24,16 +24,19 @@
|
|||||||
*/
|
*/
|
||||||
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.repo.avm.AVMNodeConverter;
|
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||||
import org.alfresco.service.cmr.avm.AVMService;
|
|
||||||
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.repository.Repository;
|
|
||||||
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,7 +48,9 @@ import org.alfresco.web.bean.wcm.WebProject;
|
|||||||
public class WCMWorkflowDeletedEvaluator extends WCMLockEvaluator
|
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)
|
||||||
*/
|
*/
|
||||||
@@ -55,17 +60,29 @@ public class WCMWorkflowDeletedEvaluator extends WCMLockEvaluator
|
|||||||
if (super.evaluate(node))
|
if (super.evaluate(node))
|
||||||
{
|
{
|
||||||
final FacesContext fc = FacesContext.getCurrentInstance();
|
final FacesContext fc = FacesContext.getCurrentInstance();
|
||||||
final AVMService avmService = Repository.getServiceRegistry(fc).getAVMService();
|
|
||||||
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())
|
||||||
{
|
{
|
||||||
final String path = AVMNodeConverter.ToAVMVersionPath(node.getNodeRef()).getSecond();
|
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());
|
||||||
|
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(AVMUtil.getStoreName(path)) ||
|
proceed = (AVMUtil.isWorkflowStore(sandbox) ||
|
||||||
!((AVMNode)node).isWorkflowInFlight());
|
!((AVMNode)node).isWorkflowInFlight(cachedTasks));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -24,17 +24,19 @@
|
|||||||
*/
|
*/
|
||||||
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.repo.avm.AVMNodeConverter;
|
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||||
import org.alfresco.service.cmr.avm.AVMService;
|
|
||||||
import org.alfresco.util.Pair;
|
|
||||||
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.repository.Repository;
|
|
||||||
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,6 +47,8 @@ import org.alfresco.web.bean.wcm.WebProject;
|
|||||||
public class WCMWorkflowEvaluator extends WCMLockEvaluator
|
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)
|
||||||
@@ -55,19 +59,28 @@ public class WCMWorkflowEvaluator extends WCMLockEvaluator
|
|||||||
if (super.evaluate(node))
|
if (super.evaluate(node))
|
||||||
{
|
{
|
||||||
final FacesContext fc = FacesContext.getCurrentInstance();
|
final FacesContext fc = FacesContext.getCurrentInstance();
|
||||||
final AVMService avmService = Repository.getServiceRegistry(fc).getAVMService();
|
|
||||||
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())
|
||||||
{
|
{
|
||||||
final Pair<Integer, String> p = AVMNodeConverter.ToAVMVersionPath(node.getNodeRef());
|
Map<String, List<WorkflowTask>> cachedSandboxTasks = (Map<String, List<WorkflowTask>>)fc.getExternalContext().getRequestMap().get(TASK_CACHE);
|
||||||
final String path = p.getSecond();
|
if (cachedSandboxTasks == null)
|
||||||
|
{
|
||||||
|
cachedSandboxTasks = new HashMap<String, List<WorkflowTask>>(64, 1.0f);
|
||||||
|
fc.getExternalContext().getRequestMap().put(TASK_CACHE, cachedSandboxTasks);
|
||||||
|
}
|
||||||
|
|
||||||
// evaluate to true if we are not deleted and within a workflow store (i.e. list of resources
|
String sandbox = AVMUtil.getStoreName(node.getPath());
|
||||||
// in the task dialog) or not part of an already in-progress workflow
|
List<WorkflowTask> cachedTasks = cachedSandboxTasks.get(sandbox);
|
||||||
proceed = ((AVMUtil.isWorkflowStore(AVMUtil.getStoreName(path)) ||
|
if (cachedTasks == null)
|
||||||
!((AVMNode)node).isWorkflowInFlight()) &&
|
{
|
||||||
avmService.lookup(p.getFirst(), path) != null);
|
cachedTasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(sandbox);
|
||||||
|
cachedSandboxTasks.put(sandbox, cachedTasks);
|
||||||
|
}
|
||||||
|
|
||||||
|
proceed = ((AVMUtil.isWorkflowStore(sandbox) ||
|
||||||
|
!((AVMNode)node).isWorkflowInFlight(cachedTasks)) &&
|
||||||
|
!((AVMNode)node).isDeleted());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
@@ -37,8 +37,8 @@ import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
|
|||||||
import org.alfresco.service.cmr.avm.LayeringDescriptor;
|
import org.alfresco.service.cmr.avm.LayeringDescriptor;
|
||||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||||
import org.alfresco.service.cmr.repository.Path;
|
import org.alfresco.service.cmr.repository.Path;
|
||||||
|
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.util.Pair;
|
|
||||||
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.web.bean.BrowseBean;
|
import org.alfresco.web.bean.BrowseBean;
|
||||||
@@ -164,7 +164,6 @@ public class AVMNode extends Node implements Map<String, Object>
|
|||||||
private LayeringDescriptor layeringDesc;
|
private LayeringDescriptor layeringDesc;
|
||||||
private final int version;
|
private final int version;
|
||||||
private final boolean deleted;
|
private final boolean deleted;
|
||||||
private WebProject webProject;
|
|
||||||
private Boolean workflowInFlight;
|
private Boolean workflowInFlight;
|
||||||
|
|
||||||
public AVMNode(final AssetInfo asset)
|
public AVMNode(final AssetInfo asset)
|
||||||
@@ -243,6 +242,11 @@ public class AVMNode extends Node implements Map<String, Object>
|
|||||||
return this.avmRef.isFile() || this.avmRef.isDeletedFile();
|
return this.avmRef.isFile() || this.avmRef.isDeletedFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final boolean isDeleted()
|
||||||
|
{
|
||||||
|
return this.avmRef.isDeleted();
|
||||||
|
}
|
||||||
|
|
||||||
public final boolean isModified()
|
public final boolean isModified()
|
||||||
{
|
{
|
||||||
if (this.layeringDesc == null)
|
if (this.layeringDesc == null)
|
||||||
@@ -252,7 +256,7 @@ public class AVMNode extends Node implements Map<String, Object>
|
|||||||
return !this.layeringDesc.isBackground();
|
return !this.layeringDesc.isBackground();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isWorkflowInFlight()
|
public final boolean isWorkflowInFlight(List<WorkflowTask> tasks)
|
||||||
{
|
{
|
||||||
if (this.workflowInFlight == null)
|
if (this.workflowInFlight == null)
|
||||||
{
|
{
|
||||||
@@ -262,30 +266,12 @@ public class AVMNode extends Node implements Map<String, Object>
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// optimization to avoid having to perform a workflow query and multiple lookups
|
this.workflowInFlight = AVMWorkflowUtil.getAssociatedTasksForNode(this.avmRef, tasks).size() != 0;
|
||||||
// per workflow sandbox. only accurate for files, not new directories
|
|
||||||
if (!this.isDirectory())
|
|
||||||
{
|
|
||||||
this.workflowInFlight = false;
|
|
||||||
final List<Pair<Integer, String>> headPaths = this.getServiceRegistry().getAVMService().getHeadPaths(this.getDescriptor());
|
|
||||||
for (final Pair<Integer, String> headPath : headPaths)
|
|
||||||
{
|
|
||||||
if (AVMUtil.isWorkflowStore(AVMUtil.getStoreName(headPath.getSecond())))
|
|
||||||
{
|
|
||||||
this.workflowInFlight = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.workflowInFlight = AVMWorkflowUtil.getAssociatedTasksForNode(this.getDescriptor()).size() != 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.workflowInFlight;
|
return this.workflowInFlight;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return All the properties known about this node.
|
* @return All the properties known about this node.
|
||||||
*/
|
*/
|
||||||
|
@@ -584,7 +584,10 @@ public class ClientConfigElement extends ConfigElementAdapter
|
|||||||
if (value == null)
|
if (value == null)
|
||||||
{
|
{
|
||||||
value = JNDIConstants.DEFAULT_VSERVER_IP;
|
value = JNDIConstants.DEFAULT_VSERVER_IP;
|
||||||
logger.warn("Virtualisation Server not started - reverting to default IP: " + value);
|
if (logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug("Virtualisation Server not started - reverting to default IP: " + value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.wcmDomain.put(value);
|
this.wcmDomain.put(value);
|
||||||
}
|
}
|
||||||
@@ -605,7 +608,10 @@ public class ClientConfigElement extends ConfigElementAdapter
|
|||||||
if (iValue == null)
|
if (iValue == null)
|
||||||
{
|
{
|
||||||
iValue = JNDIConstants.DEFAULT_VSERVER_PORT;
|
iValue = JNDIConstants.DEFAULT_VSERVER_PORT;
|
||||||
logger.warn("Virtualisation Server not started - reverting to default port: " + iValue);
|
if (logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug("Virtualisation Server not started - reverting to default port: " + iValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
value = iValue.toString();
|
value = iValue.toString();
|
||||||
this.wcmPort.put(value);
|
this.wcmPort.put(value);
|
||||||
|
@@ -159,9 +159,11 @@ name is the name of the copy.
|
|||||||
snap - Creates a snapshot (a new version of an
|
snap - Creates a snapshot (a new version of an
|
||||||
avmstore).
|
avmstore).
|
||||||
|
|
||||||
snap, storename
|
snap, storename, tag, description
|
||||||
|
|
||||||
storename is the name of the store to snapshot.
|
storename is the name of the store to snapshot.
|
||||||
|
tag is the short label - note: cannot contain ',' using this interface
|
||||||
|
description is the longer description - note: cannot contain ',' using this interface
|
||||||
|
|
||||||
------
|
------
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user