mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.2 to HEAD
16030: Merged V3.1 to V3.2 16001: Merged V2.2 to V3.1 15999: Temp build/test (AVM permissions - testSimpleInternalLayer) 16223: WCM UI - simple perf improvement when displaying modified list (lock icon) 16472: Merged V3.1 to V3.2 16180: ETHREEOH-2821 - fix deployment of WCM layered (ie. across web project) file 16188: WCM - minor: display (localisable) "File" text (follow-on fix for r15970) 16255: WCM - ETHREEOH-2836 16257: AVM - minor updates to unit tests 16275: WCM - ETHREEOH-2844 16277: WCM - ETHREEOH-2829 - added simple unit test 16341: AVM - minor update to reuse core (path) utils 16344: Merged V2.2 to V3.1 16323: Fix ETWOTWO-1266 (unexpected AVM conflict) 16457: Fix ETHREEOH-2836 (WCM layered files) - follow-on fix, with additional unit test 16649: Fix ETHREEOH-1878 - configure WCM locking for CIFS/FTP 16654: Merged V3.1 to V3.2 16507: Fix ETHREEOH-2604 - update unsecured-public-services-security-context.xml.sample (to allow server to start) 16527: Fix ETHREEOH-2868 - can't submit removal of WCM layered file (Older version prevents update) 16607: AVM - additional tests when deleting LD + fix to avoid cycle 16612: AVM - console improvement (lsver, rmvers) to enable admin/support to list & purge snapshots between dates 16638: Fix ETHREEOH-2893 - stale WCM/AVM layered dir 16643: AVM - console improvement (setopacity) -> eg. to set stale/modifed WCM layered folder as opaque git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16895 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1329,7 +1329,7 @@ public class AVMBrowseBean implements IContextListener
|
||||
String type = "";
|
||||
if (avmRef.getType() == AVMNodeType.LAYERED_DIRECTORY && avmRef.isPrimary())
|
||||
{
|
||||
if (getAvmService().lookup(avmRef.getIndirectionVersion(), avmRef.getIndirection()) != null)
|
||||
if ((getAvmService().lookup(avmRef.getIndirectionVersion(), avmRef.getIndirection()) != null) || (avmRef.getOpacity()))
|
||||
{
|
||||
type = Application.getMessage(FacesContext.getCurrentInstance(), "shared_folder");
|
||||
}
|
||||
@@ -1348,9 +1348,9 @@ public class AVMBrowseBean implements IContextListener
|
||||
}
|
||||
else
|
||||
{
|
||||
String type = "file";
|
||||
if (avmRef.isLayeredFile())
|
||||
{
|
||||
String type = "";
|
||||
if (avmRef.isLayeredFile())
|
||||
{
|
||||
if (getAvmService().lookup(avmRef.getIndirectionVersion(), avmRef.getIndirection()) != null)
|
||||
{
|
||||
type = Application.getMessage(FacesContext.getCurrentInstance(), "shared_file");
|
||||
@@ -1359,12 +1359,17 @@ public class AVMBrowseBean implements IContextListener
|
||||
{
|
||||
type = Application.getMessage(FacesContext.getCurrentInstance(), "stale_shared_file");
|
||||
}
|
||||
}
|
||||
|
||||
node.getProperties().put("fileType", type);
|
||||
}
|
||||
else
|
||||
{
|
||||
type = Application.getMessage(FacesContext.getCurrentInstance(), "file");
|
||||
}
|
||||
|
||||
node.getProperties().put("fileType", type);
|
||||
node.getProperties().put("fileType16", FileTypeImageUtils.getFileTypeImage(avmRef.getName(), true));
|
||||
node.getProperties().put("url", DownloadContentServlet.generateBrowserURL(
|
||||
AVMNodeConverter.ToNodeRef(-1, avmRef.getPath()), avmRef.getName()));
|
||||
|
||||
this.files.add(node);
|
||||
}
|
||||
|
||||
@@ -1430,7 +1435,10 @@ public class AVMBrowseBean implements IContextListener
|
||||
String path = params.get("id");
|
||||
AVMNodeDescriptor avmNode = getAvmService().lookup(-1, path);
|
||||
|
||||
if (avmNode.isLayeredDirectory() && avmNode.isPrimary() && (getAvmService().lookup(avmNode.getIndirectionVersion(), avmNode.getIndirection()) == null))
|
||||
if (avmNode.isLayeredDirectory() && avmNode.isPrimary() &&
|
||||
(getAvmService().lookup(avmNode.getIndirectionVersion(), avmNode.getIndirection()) == null) &&
|
||||
(! avmNode.getOpacity()) &&
|
||||
getAvmService().getDirectoryListingDirect(avmNode, false).isEmpty())
|
||||
{
|
||||
String pattern = Application.getMessage(FacesContext.getCurrentInstance(), MSG_TARGET_IS_DELETED);
|
||||
String folderName = path.substring(path.lastIndexOf("/") + 1);
|
||||
|
@@ -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
|
||||
@@ -38,7 +38,6 @@ import javax.faces.context.FacesContext;
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.model.WCMAppModel;
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
@@ -213,7 +212,7 @@ public class FormImpl implements Form
|
||||
result = AVMUtil.buildPath(parentAVMPath,
|
||||
result,
|
||||
AVMUtil.PathRelation.SANDBOX_RELATIVE);
|
||||
result = AVMNodeConverter.NormalizePath(result);
|
||||
result = AVMUtil.normalizePath(result);
|
||||
LOGGER.debug("processed pattern " + outputPathPattern + " as " + result);
|
||||
return result;
|
||||
}
|
||||
|
@@ -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
|
||||
@@ -25,21 +25,20 @@
|
||||
package org.alfresco.web.ui.wcm.component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
|
||||
import org.alfresco.repo.avm.AVMNodeConverter;
|
||||
import org.alfresco.service.cmr.avm.AVMService;
|
||||
import org.alfresco.service.cmr.avm.AVMNotFoundException;
|
||||
import org.alfresco.service.cmr.avm.locking.AVMLock;
|
||||
import org.alfresco.service.cmr.avm.locking.AVMLockingService;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.wcm.asset.AssetInfo;
|
||||
import org.alfresco.wcm.util.WCMUtil;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.app.servlet.FacesHelper;
|
||||
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;
|
||||
import org.alfresco.web.ui.repo.component.UILockIcon;
|
||||
|
||||
/**
|
||||
@@ -70,45 +69,69 @@ public class UIAVMLockIcon extends UILockIcon
|
||||
return;
|
||||
}
|
||||
|
||||
// get the value and see if the image is locked
|
||||
final AVMService avmService = Repository.getServiceRegistry(context).getAVMService();
|
||||
final AVMLockingService avmLockingService = Repository.getServiceRegistry(context).getAVMLockingService();
|
||||
final AVMBrowseBean avmBrowseBean = (AVMBrowseBean)FacesHelper.getManagedBean(context, AVMBrowseBean.BEAN_NAME);
|
||||
|
||||
boolean locked = false;
|
||||
boolean lockedOwner = false;
|
||||
Object val = getValue();
|
||||
List<String> lockUsers = null;
|
||||
final String avmPath = (val instanceof NodeRef
|
||||
? AVMNodeConverter.ToAVMVersionPath((NodeRef)val).getSecond()
|
||||
: (val instanceof String
|
||||
? (String)val
|
||||
: null));
|
||||
if (avmPath != null)
|
||||
|
||||
if (val != null)
|
||||
{
|
||||
if (avmService.lookup(-1, avmPath) != null)
|
||||
if (val instanceof AssetInfo)
|
||||
{
|
||||
// optimization to reuse the current WebProject object if it represents the
|
||||
// same webproject that the lock item path is contained within - this ensures
|
||||
// we do not perform slow store property lookups for every UIAVMLockIcon instance
|
||||
String stagingStore = AVMUtil.buildStagingStoreName(AVMUtil.getStoreId(AVMUtil.getStoreName(avmPath)));
|
||||
WebProject webProject = avmBrowseBean.getWebProject();
|
||||
if (webProject == null || !webProject.getStagingStore().equals(stagingStore))
|
||||
// via UIUserSandboxes.renderUserFiles()
|
||||
|
||||
AssetInfo asset = (AssetInfo)val;
|
||||
|
||||
locked = asset.isLocked();
|
||||
|
||||
String assetLockOwner = asset.getLockOwner();
|
||||
if (assetLockOwner != null)
|
||||
{
|
||||
webProject = new WebProject(avmPath);
|
||||
}
|
||||
AVMLock lock = avmLockingService.getLock(webProject.getStoreId(), avmPath.substring(avmPath.indexOf("/")));
|
||||
if (lock != null)
|
||||
{
|
||||
locked = true;
|
||||
lockUsers = lock.getOwners();
|
||||
lockedOwner = (lockUsers.contains(Application.getCurrentUser(context).getUserName()));
|
||||
lockUsers = new ArrayList<String>(1);
|
||||
lockUsers.add(assetLockOwner);
|
||||
lockedOwner = assetLockOwner.equals(Application.getCurrentUser(context).getUserName());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO eventually refactor out
|
||||
|
||||
// via browse-sandbox.jsp -> AVMBrowseBean (getFolders/getFiles - directory listing or search)
|
||||
|
||||
// get the value and see if the image is locked
|
||||
final AVMLockingService avmLockingService = Repository.getServiceRegistry(context).getAVMLockingService();
|
||||
|
||||
// NodeRef or String
|
||||
final String avmPath = (val instanceof NodeRef
|
||||
? AVMNodeConverter.ToAVMVersionPath((NodeRef)val).getSecond()
|
||||
: (val instanceof String
|
||||
? (String)val
|
||||
: null));
|
||||
if (avmPath != null)
|
||||
{
|
||||
String[] pathParts = WCMUtil.splitPath(avmPath);
|
||||
AVMLock lock = null;
|
||||
try
|
||||
{
|
||||
lock = avmLockingService.getLock(WCMUtil.getWebProjectStoreId(pathParts[0]), pathParts[1]);
|
||||
}
|
||||
catch (AVMNotFoundException nfe)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
if (lock != null)
|
||||
{
|
||||
locked = true;
|
||||
lockUsers = lock.getOwners();
|
||||
lockedOwner = (lockUsers.contains(Application.getCurrentUser(context).getUserName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.encodeBegin(context,
|
||||
locked,
|
||||
lockedOwner,
|
||||
lockUsers == null ? new String[0] : (String[])lockUsers.toArray(new String[lockUsers.size()]));
|
||||
}
|
||||
this.encodeBegin(context,
|
||||
locked,
|
||||
lockedOwner,
|
||||
lockUsers == null ? new String[0] : (String[])lockUsers.toArray(new String[lockUsers.size()]));
|
||||
}
|
||||
}
|
||||
|
@@ -734,10 +734,19 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
|
||||
String stagingStore = AVMUtil.buildStagingStoreName(storeRoot);
|
||||
String stagingStorePath = AVMUtil.buildStoreWebappPath(stagingStore, getWebapp());
|
||||
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
List<AssetInfo> assets = sandboxService.listChangedWebApp(userStore, getWebapp(), true);
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("List "+assets.size()+" changes webapp in "+(System.currentTimeMillis()-start)+" msecs");
|
||||
}
|
||||
|
||||
if (assets.size() != 0)
|
||||
{
|
||||
start = System.currentTimeMillis();
|
||||
|
||||
// output confict header, only if conflicts exist
|
||||
int diffCount = 0;
|
||||
for (AssetInfo asset : assets)
|
||||
@@ -891,7 +900,7 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
|
||||
out.write("</td><td width=20>");
|
||||
UIAVMLockIcon lockIcon = (UIAVMLockIcon)fc.getApplication().createComponent(UIAVMLockIcon.ALFRESCO_FACES_AVMLOCKICON);
|
||||
lockIcon.setId("avmlock_" + Integer.toString(rowIndex));
|
||||
lockIcon.setValue(sourcePath);
|
||||
lockIcon.setValue(node);
|
||||
Utils.encodeRecursive(fc, lockIcon);
|
||||
out.write("</td><td width=16>");
|
||||
out.write(linkPrefix);
|
||||
@@ -993,6 +1002,11 @@ public class UIUserSandboxes extends SelfRenderingComponent implements Serializa
|
||||
|
||||
// end table
|
||||
out.write("</table>");
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Wrote table in "+(System.currentTimeMillis()-start)+" msecs");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -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
|
||||
@@ -67,7 +67,8 @@ public class AVMListRenderer extends RichListRenderer
|
||||
if ((avmRef.isLayeredDirectory() && avmRef.isPrimary()) || avmRef.isLayeredFile())
|
||||
{
|
||||
AVMService avmService = Repository.getServiceRegistry(context).getAVMService();
|
||||
if (avmService.lookup(avmRef.getIndirectionVersion(), avmRef.getIndirection()) == null)
|
||||
if ((avmService.lookup(avmRef.getIndirectionVersion(), avmRef.getIndirection()) == null) &&
|
||||
(! avmRef.getOpacity()))
|
||||
{
|
||||
rowStyle = STALE_CSS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user