mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)
76888: Merged PLATFORM1 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud) 65459: MERGE DEV to PLATFORM1 ACE-968 - CIFS: folder is not deleted if it has subfolder and document inside git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@77703 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -484,6 +484,11 @@
|
|||||||
<bean name="samlTrustEngineSharedCache" factory-bean="cacheFactory" factory-method="createCache">
|
<bean name="samlTrustEngineSharedCache" factory-bean="cacheFactory" factory-method="createCache">
|
||||||
<constructor-arg value="cache.samlTrustEngineSharedCache"/>
|
<constructor-arg value="cache.samlTrustEngineSharedCache"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<!-- Temp Deleted Pseudo File Cache With TTL -->
|
||||||
|
<bean name="deletePseudoFileCache" factory-bean="cacheFactory" factory-method="createCache">
|
||||||
|
<constructor-arg value="cache.deletePseudoFileCache"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
@@ -528,6 +528,17 @@ cache.publicapi.webScriptsRegistryCache.eviction-policy=LRU
|
|||||||
cache.publicapi.webScriptsRegistryCache.eviction-percentage=25
|
cache.publicapi.webScriptsRegistryCache.eviction-percentage=25
|
||||||
cache.publicapi.webScriptsRegistryCache.merge-policy=hz.ADD_NEW_ENTRY
|
cache.publicapi.webScriptsRegistryCache.merge-policy=hz.ADD_NEW_ENTRY
|
||||||
|
|
||||||
|
cache.deletePseudoFileCache.tx.maxItems=50000
|
||||||
|
cache.deletePseudoFileCache.maxItems=50000
|
||||||
|
cache.deletePseudoFileCache.timeToLiveSeconds=180
|
||||||
|
cache.deletePseudoFileCache.maxIdleSeconds=0
|
||||||
|
cache.deletePseudoFileCache.cluster.type=fully-distributed
|
||||||
|
cache.deletePseudoFileCache.backup-count=1
|
||||||
|
cache.deletePseudoFileCache.eviction-policy=LRU
|
||||||
|
cache.deletePseudoFileCache.eviction-percentage=25
|
||||||
|
cache.deletePseudoFileCache.merge-policy=hz.ADD_NEW_ENTRY
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# RM Caveat cache
|
# RM Caveat cache
|
||||||
|
@@ -408,6 +408,7 @@
|
|||||||
<property name="nodeArchiveService" ><ref bean="nodeArchiveService"/></property>
|
<property name="nodeArchiveService" ><ref bean="nodeArchiveService"/></property>
|
||||||
<property name="hiddenAspect" ><ref bean="hiddenAspect"/></property>
|
<property name="hiddenAspect" ><ref bean="hiddenAspect"/></property>
|
||||||
<property name="alfrescoLockKeeper" ><ref bean="lockKeeper"/></property>
|
<property name="alfrescoLockKeeper" ><ref bean="lockKeeper"/></property>
|
||||||
|
<property name="deletePseudoFileCache" ><ref bean="deletePseudoFileCache"/></property>
|
||||||
|
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
@@ -44,5 +44,16 @@ public interface PseudoFileOverlay
|
|||||||
* @return list of pseudo files.
|
* @return list of pseudo files.
|
||||||
*/
|
*/
|
||||||
public PseudoFileList searchPseudoFiles(NodeRef parentDir, String name);
|
public PseudoFileList searchPseudoFiles(NodeRef parentDir, String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a pseudo file.
|
||||||
|
*
|
||||||
|
* Pseudo files may need to be deleted for delete folder operations to work
|
||||||
|
* correctly.
|
||||||
|
*
|
||||||
|
* A pseudo file can be deleted for a short time. However it may re-appear at some point
|
||||||
|
* later since there is no permanent persistence of pseudo files which are ephemeral!
|
||||||
|
*/
|
||||||
|
public void delete(NodeRef parentDir, String name);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -18,9 +18,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.filesys.alfresco;
|
package org.alfresco.filesys.alfresco;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.alfresco.filesys.repo.ContentDiskDriver2;
|
import org.alfresco.filesys.repo.ContentDiskDriver2;
|
||||||
|
import org.alfresco.jlan.server.filesys.FileInfo;
|
||||||
import org.alfresco.jlan.server.filesys.FileName;
|
import org.alfresco.jlan.server.filesys.FileName;
|
||||||
import org.alfresco.jlan.server.filesys.pseudo.MemoryPseudoFile;
|
import org.alfresco.jlan.server.filesys.pseudo.MemoryPseudoFile;
|
||||||
import org.alfresco.jlan.server.filesys.pseudo.PseudoFile;
|
import org.alfresco.jlan.server.filesys.pseudo.PseudoFile;
|
||||||
@@ -28,6 +31,7 @@ import org.alfresco.jlan.server.filesys.pseudo.PseudoFileList;
|
|||||||
import org.alfresco.jlan.util.WildCard;
|
import org.alfresco.jlan.util.WildCard;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.admin.SysAdminParams;
|
import org.alfresco.repo.admin.SysAdminParams;
|
||||||
|
import org.alfresco.repo.cache.SimpleCache;
|
||||||
import org.alfresco.repo.site.SiteModel;
|
import org.alfresco.repo.site.SiteModel;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
@@ -47,6 +51,7 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
private SysAdminParams sysAdminParams;
|
private SysAdminParams sysAdminParams;
|
||||||
private AlfrescoContext context;
|
private AlfrescoContext context;
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
|
private SimpleCache<String, String> deletePseudoFileCache;
|
||||||
|
|
||||||
private static final Log logger = LogFactory.getLog(PseudoFileOverlayImpl.class);
|
private static final Log logger = LogFactory.getLog(PseudoFileOverlayImpl.class);
|
||||||
|
|
||||||
@@ -57,6 +62,7 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
PropertyCheck.mandatory(this, "nodeService", getNodeService());
|
PropertyCheck.mandatory(this, "nodeService", getNodeService());
|
||||||
PropertyCheck.mandatory(this, "context", context);
|
PropertyCheck.mandatory(this, "context", context);
|
||||||
PropertyCheck.mandatory(this, "sysAdminParams", sysAdminParams);
|
PropertyCheck.mandatory(this, "sysAdminParams", sysAdminParams);
|
||||||
|
PropertyCheck.mandatory(this, "deletePseudoFileCache", deletePseudoFileCache);
|
||||||
|
|
||||||
DesktopActionTable actions = context.getDesktopActions();
|
DesktopActionTable actions = context.getDesktopActions();
|
||||||
|
|
||||||
@@ -322,23 +328,39 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
for ( int i = 0; i < pl.numberOfFiles(); i++)
|
for ( int i = 0; i < pl.numberOfFiles(); i++)
|
||||||
{
|
{
|
||||||
PseudoFile pseudoFile = pl.getFileAt(i);
|
PseudoFile pseudoFile = pl.getFileAt(i);
|
||||||
filterList.addFile(pseudoFile);
|
if(!isDeleted(parentDir, pseudoFile.getFileName()))
|
||||||
|
{
|
||||||
|
// File is not deleted
|
||||||
|
filterList.addFile(pseudoFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The URL file is dependent upon the parent dir
|
// The URL file is dependent upon the parent dir
|
||||||
if(context.isAlfrescoURLEnabled())
|
if(context.isAlfrescoURLEnabled())
|
||||||
{
|
{
|
||||||
filterList.addFile(generateAlfrescoURLShortcut(parentDir));
|
if(!isDeleted(parentDir, context.getURLFileName()))
|
||||||
|
{
|
||||||
|
filterList.addFile(generateAlfrescoURLShortcut(parentDir));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug("alfresco URL pseudo file deleted");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(context.isShareURLEnabled())
|
if(context.isShareURLEnabled())
|
||||||
{
|
{
|
||||||
PseudoFile sharePseudoFile = generateShareURLShortcut(parentDir);
|
if(!isDeleted(parentDir, context.getShareURLFileName()))
|
||||||
|
|
||||||
if(sharePseudoFile != null)
|
|
||||||
{
|
{
|
||||||
filterList.addFile(sharePseudoFile);
|
PseudoFile sharePseudoFile = generateShareURLShortcut(parentDir);
|
||||||
}
|
if(sharePseudoFile != null)
|
||||||
|
{
|
||||||
|
filterList.addFile(sharePseudoFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return filterList;
|
return filterList;
|
||||||
@@ -355,8 +377,11 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
PseudoFile pseudoFile = pl.getFileAt( i);
|
PseudoFile pseudoFile = pl.getFileAt( i);
|
||||||
if ( wildCard.matchesPattern( pseudoFile.getFileName()))
|
if ( wildCard.matchesPattern( pseudoFile.getFileName()))
|
||||||
{
|
{
|
||||||
// Add the pseudo file to the filtered list
|
if(!isDeleted(parentDir, pseudoFile.getFileName()))
|
||||||
filterList.addFile( pseudoFile);
|
{
|
||||||
|
// Add the pseudo file to the filtered list
|
||||||
|
filterList.addFile( pseudoFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,7 +390,10 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
{
|
{
|
||||||
if(wildCard.matchesPattern(context.getURLFileName()))
|
if(wildCard.matchesPattern(context.getURLFileName()))
|
||||||
{
|
{
|
||||||
filterList.addFile(generateAlfrescoURLShortcut(parentDir));
|
if(!isDeleted(parentDir, context.getURLFileName()))
|
||||||
|
{
|
||||||
|
filterList.addFile(generateAlfrescoURLShortcut(parentDir));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,12 +401,15 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
{
|
{
|
||||||
if(wildCard.matchesPattern(context.getShareURLFileName()))
|
if(wildCard.matchesPattern(context.getShareURLFileName()))
|
||||||
{
|
{
|
||||||
PseudoFile sharePseudoFile = generateShareURLShortcut(parentDir);
|
if(!isDeleted(parentDir, context.getShareURLFileName()))
|
||||||
|
{
|
||||||
|
PseudoFile sharePseudoFile = generateShareURLShortcut(parentDir);
|
||||||
|
|
||||||
if(sharePseudoFile != null)
|
if(sharePseudoFile != null)
|
||||||
{
|
{
|
||||||
filterList.addFile(sharePseudoFile);
|
filterList.addFile(sharePseudoFile);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,7 +423,7 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
PseudoFileList filterList = new PseudoFileList();
|
PseudoFileList filterList = new PseudoFileList();
|
||||||
PseudoFile file = getPseudoFile(parentDir, fname);
|
PseudoFile file = getPseudoFile(parentDir, fname);
|
||||||
|
|
||||||
if(file != null)
|
if(file != null && !isDeleted(parentDir, fname))
|
||||||
{
|
{
|
||||||
filterList.addFile(file);
|
filterList.addFile(file);
|
||||||
}
|
}
|
||||||
@@ -400,6 +431,32 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
return filterList;
|
return filterList;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(NodeRef parentDir, String name)
|
||||||
|
{
|
||||||
|
if(logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug("delete pseudo file parentDir:" + parentDir + ", name: " + name);
|
||||||
|
}
|
||||||
|
getDeletePseudoFileCache().put(toDeleteKey(parentDir, name), "Deleted");
|
||||||
|
}
|
||||||
|
|
||||||
|
private String toDeleteKey(NodeRef parentNoderef, String name)
|
||||||
|
{
|
||||||
|
return (parentNoderef.toString() + "/" + name + ":" + context.getDeviceName()).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isDeleted(NodeRef parentDir, String name)
|
||||||
|
{
|
||||||
|
String key = toDeleteKey(parentDir, name);
|
||||||
|
boolean isDeleted = getDeletePseudoFileCache().contains(key);
|
||||||
|
if(logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug("pseudoFile isDeleted: " + isDeleted + ", for name:" + name);
|
||||||
|
}
|
||||||
|
return isDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
public void setNodeService(NodeService nodeService)
|
public void setNodeService(NodeService nodeService)
|
||||||
@@ -440,4 +497,13 @@ public class PseudoFileOverlayImpl implements PseudoFileOverlay
|
|||||||
{
|
{
|
||||||
return sysAdminParams;
|
return sysAdminParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SimpleCache<String, String> getDeletePseudoFileCache()
|
||||||
|
{
|
||||||
|
return deletePseudoFileCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeletePseudoFileCache(SimpleCache<String, String> deletePseudoFileCache) {
|
||||||
|
this.deletePseudoFileCache = deletePseudoFileCache;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -96,7 +96,7 @@ public interface RepositoryDiskInterface
|
|||||||
* @throws FileNotFoundException
|
* @throws FileNotFoundException
|
||||||
* @return node ref of deleted file or null if no file deleted
|
* @return node ref of deleted file or null if no file deleted
|
||||||
*/
|
*/
|
||||||
public NodeRef closeFile(NodeRef rootNode, String Path, NetworkFile file) throws IOException;
|
public NodeRef closeFile(TreeConnection tree, NodeRef rootNode, String Path, NetworkFile file) throws IOException;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -220,7 +220,7 @@ public class CommandExecutorImpl implements CommandExecutor
|
|||||||
{
|
{
|
||||||
logger.debug("close file command");
|
logger.debug("close file command");
|
||||||
CloseFileCommand c = (CloseFileCommand)command;
|
CloseFileCommand c = (CloseFileCommand)command;
|
||||||
return repositoryDiskInterface.closeFile(c.getRootNodeRef(), c.getPath(), c.getNetworkFile());
|
return repositoryDiskInterface.closeFile(tree, c.getRootNodeRef(), c.getPath(), c.getNetworkFile());
|
||||||
}
|
}
|
||||||
else if(command instanceof ReduceQuotaCommand)
|
else if(command instanceof ReduceQuotaCommand)
|
||||||
{
|
{
|
||||||
|
@@ -59,6 +59,7 @@ import org.alfresco.jlan.server.filesys.SearchContext;
|
|||||||
import org.alfresco.jlan.server.filesys.SrvDiskInfo;
|
import org.alfresco.jlan.server.filesys.SrvDiskInfo;
|
||||||
import org.alfresco.jlan.server.filesys.TreeConnection;
|
import org.alfresco.jlan.server.filesys.TreeConnection;
|
||||||
import org.alfresco.jlan.server.filesys.cache.FileState;
|
import org.alfresco.jlan.server.filesys.cache.FileState;
|
||||||
|
import org.alfresco.jlan.server.filesys.pseudo.MemoryNetworkFile;
|
||||||
import org.alfresco.jlan.server.filesys.pseudo.PseudoFile;
|
import org.alfresco.jlan.server.filesys.pseudo.PseudoFile;
|
||||||
import org.alfresco.jlan.server.filesys.pseudo.PseudoFileList;
|
import org.alfresco.jlan.server.filesys.pseudo.PseudoFileList;
|
||||||
import org.alfresco.jlan.server.filesys.pseudo.PseudoNetworkFile;
|
import org.alfresco.jlan.server.filesys.pseudo.PseudoNetworkFile;
|
||||||
@@ -74,6 +75,7 @@ import org.alfresco.jlan.smb.server.SMBSrvSession;
|
|||||||
import org.alfresco.jlan.util.DataBuffer;
|
import org.alfresco.jlan.util.DataBuffer;
|
||||||
import org.alfresco.jlan.util.MemorySize;
|
import org.alfresco.jlan.util.MemorySize;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
|
import org.alfresco.repo.cache.SimpleCache;
|
||||||
import org.alfresco.repo.content.MimetypeMap;
|
import org.alfresco.repo.content.MimetypeMap;
|
||||||
import org.alfresco.repo.content.encoding.ContentCharsetFinder;
|
import org.alfresco.repo.content.encoding.ContentCharsetFinder;
|
||||||
import org.alfresco.repo.content.filestore.FileContentReader;
|
import org.alfresco.repo.content.filestore.FileContentReader;
|
||||||
@@ -178,6 +180,7 @@ public class ContentDiskDriver2 extends AlfrescoDiskDriver implements ExtendedD
|
|||||||
PropertyCheck.mandatory(this, "nodeArchiveService", nodeArchiveService);
|
PropertyCheck.mandatory(this, "nodeArchiveService", nodeArchiveService);
|
||||||
PropertyCheck.mandatory(this, "hiddenAspect", hiddenAspect);
|
PropertyCheck.mandatory(this, "hiddenAspect", hiddenAspect);
|
||||||
PropertyCheck.mandatory(this, "lockKeeper", lockKeeper);
|
PropertyCheck.mandatory(this, "lockKeeper", lockKeeper);
|
||||||
|
PropertyCheck.mandatory(this, "deletePseudoFileCache", deletePseudoFileCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -601,6 +604,7 @@ public class ContentDiskDriver2 extends AlfrescoDiskDriver implements ExtendedD
|
|||||||
ps.setContext(context);
|
ps.setContext(context);
|
||||||
ps.setNodeService(nodeService);
|
ps.setNodeService(nodeService);
|
||||||
ps.setSysAdminParams(context.getSysAdminParams());
|
ps.setSysAdminParams(context.getSysAdminParams());
|
||||||
|
ps.setDeletePseudoFileCache(deletePseudoFileCache);
|
||||||
context.setPseudoFileOverlay(ps);
|
context.setPseudoFileOverlay(ps);
|
||||||
ps.init();
|
ps.init();
|
||||||
}
|
}
|
||||||
@@ -1231,9 +1235,11 @@ public class ContentDiskDriver2 extends AlfrescoDiskDriver implements ExtendedD
|
|||||||
// lookup parent directory
|
// lookup parent directory
|
||||||
NodeRef dirNodeRef = getNodeForPath(tree, paths[0]);
|
NodeRef dirNodeRef = getNodeForPath(tree, paths[0]);
|
||||||
|
|
||||||
// Check whether we are opening a pseudo file
|
// Check whether we are closing a pseudo file
|
||||||
if(ctx.getPseudoFileOverlay().isPseudoFile(dirNodeRef, paths[1]))
|
if(ctx.getPseudoFileOverlay().isPseudoFile(dirNodeRef, paths[1]))
|
||||||
{
|
{
|
||||||
|
// pseudo delete a pseudo file
|
||||||
|
ctx.getPseudoFileOverlay().delete(dirNodeRef, paths[1]);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2863,16 +2869,34 @@ public class ContentDiskDriver2 extends AlfrescoDiskDriver implements ExtendedD
|
|||||||
* @exception java.io.IOException If an error occurs.
|
* @exception java.io.IOException If an error occurs.
|
||||||
* @return node ref of deleted file
|
* @return node ref of deleted file
|
||||||
*/
|
*/
|
||||||
public NodeRef closeFile(NodeRef rootNode, String path, NetworkFile file) throws IOException
|
public NodeRef closeFile(TreeConnection tree, NodeRef rootNode, String path, NetworkFile file) throws IOException
|
||||||
{
|
{
|
||||||
if ( logger.isDebugEnabled())
|
if ( logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("Close file:" + path + ", readOnly=" + file.isReadOnly() );
|
logger.debug("Close file:" + path + ", readOnly=" + file.isReadOnly() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( file instanceof PseudoNetworkFile)
|
if( file instanceof PseudoNetworkFile || file instanceof MemoryNetworkFile)
|
||||||
{
|
{
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
|
if(file.hasDeleteOnClose())
|
||||||
|
{
|
||||||
|
if(logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug("delete on close a pseudo file");
|
||||||
|
}
|
||||||
|
final ContentContext ctx = (ContentContext) tree.getContext();
|
||||||
|
|
||||||
|
String[] paths = FileName.splitPath(path);
|
||||||
|
|
||||||
|
if (paths[0] != null && paths[0].length() > 1)
|
||||||
|
{
|
||||||
|
// lookup parent directory
|
||||||
|
NodeRef dirNodeRef = getNodeForPath(tree, paths[0]);
|
||||||
|
ctx.getPseudoFileOverlay().delete(dirNodeRef, paths[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3205,4 +3229,12 @@ public class ContentDiskDriver2 extends AlfrescoDiskDriver implements ExtendedD
|
|||||||
{
|
{
|
||||||
return nodeArchiveService;
|
return nodeArchiveService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SimpleCache<String, String> deletePseudoFileCache;
|
||||||
|
|
||||||
|
public void setDeletePseudoFileCache(SimpleCache<String, String> deletePseudoFileCache)
|
||||||
|
{
|
||||||
|
this.deletePseudoFileCache = deletePseudoFileCache;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user