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:
Jan Vonka
2009-10-14 09:20:15 +00:00
parent f03cabea25
commit d9d774eac0
6 changed files with 133 additions and 56 deletions

View File

@@ -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);

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
* 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;
}

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
* 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()]));
}
}

View File

@@ -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
{

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
* 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;
}