diff --git a/config/alfresco/web-client-config-actions.xml b/config/alfresco/web-client-config-actions.xml
index 92220b40e9..255afed809 100644
--- a/config/alfresco/web-client-config-actions.xml
+++ b/config/alfresco/web-client-config-actions.xml
@@ -723,6 +723,7 @@
+
diff --git a/source/java/org/alfresco/web/action/evaluator/WCMLockEvaluator.java b/source/java/org/alfresco/web/action/evaluator/WCMLockEvaluator.java
index 60470cf705..2f6c67d1ae 100644
--- a/source/java/org/alfresco/web/action/evaluator/WCMLockEvaluator.java
+++ b/source/java/org/alfresco/web/action/evaluator/WCMLockEvaluator.java
@@ -34,6 +34,7 @@ import org.alfresco.web.app.servlet.FacesHelper;
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.AVMUtil;
import org.alfresco.web.bean.wcm.WebProject;
/**
@@ -48,20 +49,25 @@ public class WCMLockEvaluator implements ActionEvaluator
*/
public boolean evaluate(final Node node)
{
- final FacesContext fc = FacesContext.getCurrentInstance();
- final AVMLockingService avmLockService = Repository.getServiceRegistry(fc).getAVMLockingService();
- final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME);
-
+ boolean result = false;
final String path = AVMNodeConverter.ToAVMVersionPath(node.getNodeRef()).getSecond();
- final String username = Application.getCurrentUser(fc).getUserName();
-
- WebProject webProject = avmBrowseBean.getWebProject();
- if (webProject == null)
+ if (!AVMUtil.isMainStore(AVMUtil.getStoreName(path)))
{
- // when in a workflow context, the WebProject may not be accurate on the browsebean
- // so get the web project associated with the path
- webProject = new WebProject(path);
+ final FacesContext fc = FacesContext.getCurrentInstance();
+ final AVMLockingService avmLockService = Repository.getServiceRegistry(fc).getAVMLockingService();
+ final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(fc, AVMBrowseBean.BEAN_NAME);
+
+ final String username = Application.getCurrentUser(fc).getUserName();
+
+ WebProject webProject = avmBrowseBean.getWebProject();
+ if (webProject == null)
+ {
+ // when in a workflow context, the WebProject may not be accurate on the browsebean
+ // so get the web project associated with the path
+ webProject = new WebProject(path);
+ }
+ result = avmLockService.hasAccess(webProject.getNodeRef(), path, username);
}
- return avmLockService.hasAccess(webProject.getNodeRef(), path, username);
+ return result;
}
}
diff --git a/source/java/org/alfresco/web/bean/CategoriesBean.java b/source/java/org/alfresco/web/bean/CategoriesBean.java
index 22ab8e4367..187a15001b 100644
--- a/source/java/org/alfresco/web/bean/CategoriesBean.java
+++ b/source/java/org/alfresco/web/bean/CategoriesBean.java
@@ -461,11 +461,11 @@ public class CategoriesBean implements IContextListener
NodeRef ref;
if (categoryRef == null)
{
- ref = categoryService.createRootCategory(Repository.getStoreRef(), ContentModel.ASPECT_GEN_CLASSIFIABLE, name);
+ ref = categoryService.createRootCategory(Repository.getStoreRef(), ContentModel.ASPECT_GEN_CLASSIFIABLE, name.trim());
}
else
{
- ref = categoryService.createCategory(categoryRef, name);
+ ref = categoryService.createCategory(categoryRef, name.trim());
}
// apply the titled aspect - for description
diff --git a/source/java/org/alfresco/web/bean/wcm/AVMUtil.java b/source/java/org/alfresco/web/bean/wcm/AVMUtil.java
index c72f89f309..a73a0b62b4 100644
--- a/source/java/org/alfresco/web/bean/wcm/AVMUtil.java
+++ b/source/java/org/alfresco/web/bean/wcm/AVMUtil.java
@@ -154,6 +154,18 @@ public final class AVMUtil
}
return storeName.indexOf(AVMUtil.STORE_SEPARATOR) != -1;
}
+
+ /**
+ * Indicates whether the store name describes a main store.
+ *
+ * @param storeName the store name
+ *
+ * @return true if the store is a main store, false otherwise.
+ */
+ public static boolean isMainStore(String storeName)
+ {
+ return (storeName.indexOf(AVMUtil.STORE_SEPARATOR) == -1);
+ }
/**
* Extracts the username from the store name.
diff --git a/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java b/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java
index ade27b49b1..1469f325e5 100644
--- a/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java
+++ b/source/java/org/alfresco/web/bean/wcm/AVMWorkflowUtil.java
@@ -71,7 +71,7 @@ import org.apache.commons.logging.LogFactory;
*/
public class AVMWorkflowUtil extends WorkflowUtil
{
- private static final Log LOGGER = LogFactory.getLog(AVMWorkflowUtil.class);
+ private static final Log logger = LogFactory.getLog(AVMWorkflowUtil.class);
// cached configured lists
private static List configuredWorkflowDefs = null;
@@ -133,6 +133,7 @@ public class AVMWorkflowUtil extends WorkflowUtil
final ServiceRegistry services = Repository.getServiceRegistry(FacesContext.getCurrentInstance());
final PermissionService permissionService = services.getPermissionService();
permissionService.setPermission(packageNodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true);
+
return packageNodeRef;
}
@@ -209,14 +210,14 @@ public class AVMWorkflowUtil extends WorkflowUtil
ConfigElement config = Application.getConfigService(fc).getGlobalConfig().getConfigElement("wcm");
if (config == null)
{
- LOGGER.warn("WARNING: Unable to find 'wcm' config element definition.");
+ logger.warn("WARNING: Unable to find 'wcm' config element definition.");
}
else
{
ConfigElement workflowConfig = config.getChild("workflows");
if (workflowConfig == null)
{
- LOGGER.warn("WARNING: Unable to find WCM 'workflows' config element definition.");
+ logger.warn("WARNING: Unable to find WCM 'workflows' config element definition.");
}
else
{
@@ -233,7 +234,7 @@ public class AVMWorkflowUtil extends WorkflowUtil
}
else
{
- LOGGER.warn("WARNING: Cannot find WCM workflow def for configured definition name: " + wfName);
+ logger.warn("WARNING: Cannot find WCM workflow def for configured definition name: " + wfName);
}
}
}
@@ -249,48 +250,54 @@ public class AVMWorkflowUtil extends WorkflowUtil
final FacesContext fc = FacesContext.getCurrentInstance();
final WorkflowService workflowService = Repository.getServiceRegistry(fc).getWorkflowService();
final WorkflowTaskQuery query = new WorkflowTaskQuery();
+
final HashMap props = new HashMap(1, 1.0f);
props.put(WCMWorkflowModel.PROP_FROM_PATH, fromPath);
query.setProcessCustomProps(props);
final List tasks = workflowService.queryTasks(query);
- LOGGER.debug("found " + tasks.size() + " tasks originating user sandbox " + fromPath);
+
+ if (logger.isDebugEnabled())
+ logger.debug("found " + tasks.size() + " tasks originating user sandbox " + fromPath);
+
return tasks;
}
-
- public static List getAssociatedTasksForNode(final AVMNodeDescriptor node)
+
+ public static List getAssociatedTasksForNode(AVMNodeDescriptor node, List tasks)
{
- final List tasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(AVMUtil.getStoreName(node.getPath()));
final List result = new LinkedList();
final FacesContext fc = FacesContext.getCurrentInstance();
final AVMService avmService = Repository.getServiceRegistry(fc).getAVMService();
+
for (final WorkflowTask task : tasks)
{
final NodeRef ref = task.path.instance.workflowPackage;
final String path = AVMUtil.getCorrespondingPath(node.getPath(), ref.getStoreRef().getIdentifier());
- if (LOGGER.isDebugEnabled())
- {
- LOGGER.debug("checking store " + ref.getStoreRef().getIdentifier() +
+ if (logger.isDebugEnabled())
+ logger.debug("checking store " + ref.getStoreRef().getIdentifier() +
" for " + node.getPath() + " (" + path + ")");
- }
try
{
final LayeringDescriptor ld = avmService.getLayeringInfo(-1, path);
if (!ld.isBackground())
{
- LOGGER.debug(path + " is in the foreground. workflow active");
+ if (logger.isDebugEnabled())
+ logger.debug(path + " is in the foreground. workflow active");
result.add(task);
}
- else
- {
-// LOGGER.debug(path + " is in the background");
- }
}
catch (final AVMNotFoundException avmnfe)
{
- LOGGER.debug(path + " not found");
+ if (logger.isDebugEnabled())
+ logger.debug(path + " not found");
}
}
-
+
return result;
}
+
+ public static List getAssociatedTasksForNode(AVMNodeDescriptor node)
+ {
+ final List tasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(AVMUtil.getStoreName(node.getPath()));
+ return getAssociatedTasksForNode(node, tasks);
+ }
}
diff --git a/source/java/org/alfresco/web/bean/wcm/RegenerateRenditionsWizard.java b/source/java/org/alfresco/web/bean/wcm/RegenerateRenditionsWizard.java
index 5fd2c6a8f5..7293c613a9 100644
--- a/source/java/org/alfresco/web/bean/wcm/RegenerateRenditionsWizard.java
+++ b/source/java/org/alfresco/web/bean/wcm/RegenerateRenditionsWizard.java
@@ -201,7 +201,12 @@ public class RegenerateRenditionsWizard
@Override
public boolean getNextButtonDisabled()
{
- return false;
+ boolean disabled = false;
+ if ("select_renditions".equals(Application.getWizardManager().getCurrentStepName()))
+ {
+ disabled = this.selectedWebProject == null;
+ }
+ return disabled;
}
@Override
@@ -413,7 +418,7 @@ public class RegenerateRenditionsWizard
final StoreRef storeRef = AVMNodeConverter.ToStoreRef(webProject.getStagingStore());
sp.addStore(storeRef);
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
- StringBuilder query = new StringBuilder();
+ final StringBuilder query = new StringBuilder();
query.append("+ASPECT:\"" + WCMAppModel.ASPECT_FORM_INSTANCE_DATA + "\"");
query.append("-ASPECT:\"" + WCMAppModel.ASPECT_RENDITION + "\"");
query.append(" +@" + Repository.escapeQName(WCMAppModel.PROP_PARENT_FORM_NAME) +
@@ -438,9 +443,9 @@ public class RegenerateRenditionsWizard
final StoreRef storeRef = AVMNodeConverter.ToStoreRef(webProject.getStagingStore());
sp.addStore(storeRef);
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
- StringBuilder query = new StringBuilder();
+ final StringBuilder query = new StringBuilder();
query.append("+ASPECT:\"" + WCMAppModel.ASPECT_RENDITION + "\"");
- query.append("+@" + Repository.escapeQName(WCMAppModel.PROP_PARENT_RENDERING_ENGINE_TEMPLATE) +
+ query.append(" +@" + Repository.escapeQName(WCMAppModel.PROP_PARENT_RENDERING_ENGINE_TEMPLATE) +
":\"" + ((RenderingEngineTemplateImpl)ret).getNodeRef() + "\"");
LOGGER.debug("running query " + query);
diff --git a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java
index 9eb43dabd0..e755369279 100644
--- a/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java
+++ b/source/java/org/alfresco/web/bean/wcm/SubmitDialog.java
@@ -946,7 +946,7 @@ public class SubmitDialog extends BaseDialogBean
selected = new ArrayList(1);
selected.add(this.avmService.lookup(-1, this.avmBrowseBean.getAvmActionNode().getPath(), true));
}
-
+
if (selected == null)
{
this.submitItems = Collections.emptyList();
@@ -957,9 +957,14 @@ 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 (AVMWorkflowUtil.getAssociatedTasksForNode(node).size() != 0)
+ if (tasks == null)
+ {
+ tasks = AVMWorkflowUtil.getAssociatedTasksForSandbox(AVMUtil.getStoreName(node.getPath()));
+ }
+ if (AVMWorkflowUtil.getAssociatedTasksForNode(node, tasks).size() != 0)
{
this.warningItems.add(new ItemWrapper(node));
continue;
@@ -977,7 +982,7 @@ public class SubmitDialog extends BaseDialogBean
}
// lookup if this item was created via a form - then lookup the workflow defaults
// for that form and store into the list of available workflows
- else if (! this.nodeService.hasAspect(ref, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
+ else if (!this.nodeService.hasAspect(ref, WCMAppModel.ASPECT_FORM_INSTANCE_DATA))
{
this.submitItems.add(new ItemWrapper(node));
submittedPaths.add(node.getPath());
diff --git a/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java b/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java
index 1427f798fe..3ecc74acfc 100644
--- a/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java
+++ b/source/java/org/alfresco/web/bean/workflow/ManageTaskDialog.java
@@ -819,7 +819,7 @@ public class ManageTaskDialog extends BaseDialogBean
node.addPropertyResolver("url", this.browseBean.resolverUrl);
}
this.resources.add(node);
- if (node.isDirectory())
+ if (node.isDirectory() && !node.getDescriptor().isDeleted())
{
for (final AVMNodeDescriptor d :
this.avmService.getDirectoryListingArray(node.getDescriptor(), true))
diff --git a/source/java/org/alfresco/web/data/Sort.java b/source/java/org/alfresco/web/data/Sort.java
index f4190b4bee..d2792c6286 100644
--- a/source/java/org/alfresco/web/data/Sort.java
+++ b/source/java/org/alfresco/web/data/Sort.java
@@ -202,6 +202,13 @@ public abstract class Sort
if (getter != null)
{
// if we have a bean getter method impl use that
+ try
+ {
+ getter.setAccessible(true);
+ }
+ catch (SecurityException se)
+ {
+ }
obj = getter.invoke(data.get(iIndex), (Object [])null);
}
else
diff --git a/source/java/org/alfresco/web/ui/repo/component/AbstractItemSelector.java b/source/java/org/alfresco/web/ui/repo/component/AbstractItemSelector.java
index 6f18c48454..6a1a4fdaf6 100644
--- a/source/java/org/alfresco/web/ui/repo/component/AbstractItemSelector.java
+++ b/source/java/org/alfresco/web/ui/repo/component/AbstractItemSelector.java
@@ -790,6 +790,24 @@ public abstract class AbstractItemSelector extends UIInput
* @return Node Service bean instance or throws exception if not found
*/
protected static NodeService getNodeService(FacesContext context)
+ {
+ NodeService service = Repository.getServiceRegistry(context).getNodeService();
+ if (service == null)
+ {
+ throw new IllegalStateException("Unable to obtain NodeService bean reference.");
+ }
+
+ return service;
+ }
+
+ /**
+ * Use Spring JSF integration to return the node Service bean instance
+ *
+ * @param context FacesContext
+ *
+ * @return Node Service bean instance or throws exception if not found
+ */
+ protected static NodeService getFastNodeService(FacesContext context)
{
NodeService service = (NodeService)FacesContextUtils.getRequiredWebApplicationContext(
context).getBean("nodeService");
diff --git a/source/java/org/alfresco/web/ui/repo/component/UICategorySelector.java b/source/java/org/alfresco/web/ui/repo/component/UICategorySelector.java
index ee8d44c024..b441c53046 100644
--- a/source/java/org/alfresco/web/ui/repo/component/UICategorySelector.java
+++ b/source/java/org/alfresco/web/ui/repo/component/UICategorySelector.java
@@ -91,7 +91,7 @@ public class UICategorySelector extends AbstractItemSelector
if (this.navigationId != null)
{
- ChildAssociationRef parentRef = getNodeService(context).getPrimaryParent(
+ ChildAssociationRef parentRef = getFastNodeService(context).getPrimaryParent(
new NodeRef(Repository.getStoreRef(), this.navigationId));
Node parentNode = new Node(parentRef.getParentRef());
diff --git a/source/java/org/alfresco/web/ui/repo/component/UISpaceSelector.java b/source/java/org/alfresco/web/ui/repo/component/UISpaceSelector.java
index c61368bd75..254f61129e 100644
--- a/source/java/org/alfresco/web/ui/repo/component/UISpaceSelector.java
+++ b/source/java/org/alfresco/web/ui/repo/component/UISpaceSelector.java
@@ -70,7 +70,7 @@ public class UISpaceSelector extends AbstractItemSelector
{
try
{
- ChildAssociationRef parentRef = getNodeService(context).getPrimaryParent(
+ ChildAssociationRef parentRef = getFastNodeService(context).getPrimaryParent(
new NodeRef(Repository.getStoreRef(), this.navigationId));
id = parentRef.getParentRef().getId();
}
@@ -89,7 +89,7 @@ public class UISpaceSelector extends AbstractItemSelector
List allKids = getNodeService(context).getChildAssocs(nodeRef,
ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
DictionaryService dd = getDictionaryService(context);
- NodeService service = getNodeService(context);
+ NodeService service = getFastNodeService(context);
// filter out those children that are not spaces
List spaceKids = new ArrayList();
@@ -126,7 +126,7 @@ public class UISpaceSelector extends AbstractItemSelector
public String getItemIcon(FacesContext context, NodeRef ref)
{
- String icon = (String)getNodeService(context).getProperty(ref, ApplicationModel.PROP_ICON);
+ String icon = (String)getFastNodeService(context).getProperty(ref, ApplicationModel.PROP_ICON);
if (icon != null)
{
icon = "/images/icons/" + icon + "-16.gif";
diff --git a/source/java/org/alfresco/web/ui/repo/component/UIWebProjectFolderSelector.java b/source/java/org/alfresco/web/ui/repo/component/UIWebProjectFolderSelector.java
index 40e12dcdd9..a0c04e02a4 100644
--- a/source/java/org/alfresco/web/ui/repo/component/UIWebProjectFolderSelector.java
+++ b/source/java/org/alfresco/web/ui/repo/component/UIWebProjectFolderSelector.java
@@ -142,10 +142,10 @@ public class UIWebProjectFolderSelector extends AbstractItemSelector
public Collection getRootChildren(FacesContext context)
{
- // query for all nodes under the "Web Projects" foler in company home.
+ // query for all nodes under the "Web Projects" folder in company home.
FacesContext fc = FacesContext.getCurrentInstance();
String xpath = Application.getRootPath(fc) + "/" + Application.getWebsitesFolderName(fc) + "/*";
- NodeRef rootNodeRef = getNodeService(fc).getRootNode(Repository.getStoreRef());
+ NodeRef rootNodeRef = getFastNodeService(fc).getRootNode(Repository.getStoreRef());
NamespaceService resolver = Repository.getServiceRegistry(fc).getNamespaceService();
SearchService searchService = Repository.getServiceRegistry(fc).getSearchService();
List nodes = searchService.selectNodes(rootNodeRef, xpath, null, resolver, false);
@@ -179,7 +179,7 @@ public class UIWebProjectFolderSelector extends AbstractItemSelector
public String getItemIcon(FacesContext context, NodeRef ref)
{
- String icon = (String)getNodeService(context).getProperty(ref, ApplicationModel.PROP_ICON);
+ String icon = (String)getFastNodeService(context).getProperty(ref, ApplicationModel.PROP_ICON);
if (icon != null)
{
icon = "/images/icons/" + icon + "-16.gif";
diff --git a/source/java/org/alfresco/web/ui/wcm/component/UIUserSandboxes.java b/source/java/org/alfresco/web/ui/wcm/component/UIUserSandboxes.java
index 1e0ffb77a3..f14b184357 100644
--- a/source/java/org/alfresco/web/ui/wcm/component/UIUserSandboxes.java
+++ b/source/java/org/alfresco/web/ui/wcm/component/UIUserSandboxes.java
@@ -409,11 +409,10 @@ public class UIUserSandboxes extends SelfRenderingComponent
out.write(" ");
// Submit All Items
- // NOTE: removed for 2.0 final
- /*Utils.encodeRecursive(context, aquireAction(
+ Utils.encodeRecursive(context, aquireAction(
context, mainStore, username, ACT_SANDBOX_SUBMITALL, "/images/icons/submit_all.gif",
"#{AVMBrowseBean.setupAllItemsAction}", "dialog:submitSandboxItems"));
- out.write(" ");*/
+ out.write(" ");
// Revert All Items
Utils.encodeRecursive(context, aquireAction(