diff --git a/source/java/org/alfresco/repo/domain/permissions/traitextender/AccessControlListDAOExtension.java b/source/java/org/alfresco/repo/domain/permissions/traitextender/AccessControlListDAOExtension.java new file mode 100644 index 0000000000..bb3484832a --- /dev/null +++ b/source/java/org/alfresco/repo/domain/permissions/traitextender/AccessControlListDAOExtension.java @@ -0,0 +1,10 @@ +package org.alfresco.repo.domain.permissions.traitextender; + +import org.alfresco.repo.domain.permissions.Acl; +import org.alfresco.service.cmr.repository.NodeRef; + +public interface AccessControlListDAOExtension +{ + + public Acl getAccessControlList(NodeRef nodeRef); +} diff --git a/source/java/org/alfresco/repo/domain/permissions/traitextender/AccessControlListDAOTrait.java b/source/java/org/alfresco/repo/domain/permissions/traitextender/AccessControlListDAOTrait.java new file mode 100644 index 0000000000..06736e3ea0 --- /dev/null +++ b/source/java/org/alfresco/repo/domain/permissions/traitextender/AccessControlListDAOTrait.java @@ -0,0 +1,10 @@ +package org.alfresco.repo.domain.permissions.traitextender; + +import org.alfresco.repo.domain.permissions.Acl; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.traitextender.Trait; + +public interface AccessControlListDAOTrait extends Trait +{ + public Acl getAccessControlList(NodeRef nodeRef); +} diff --git a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java index 9a9017a1b9..385071ad13 100644 --- a/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java +++ b/source/java/org/alfresco/repo/model/filefolder/FileFolderServiceImpl.java @@ -40,6 +40,8 @@ import org.alfresco.query.PagingRequest; import org.alfresco.query.PagingResults; import org.alfresco.repo.copy.AbstractBaseCopyService; import org.alfresco.repo.model.filefolder.HiddenAspect.Visibility; +import org.alfresco.repo.model.filefolder.traitextender.FileFolderServiceExtension; +import org.alfresco.repo.model.filefolder.traitextender.FileFolderServiceTrait; import org.alfresco.repo.node.getchildren.GetChildrenCannedQuery; import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.search.QueryParameterDefImpl; @@ -72,6 +74,11 @@ import org.alfresco.service.cmr.search.QueryParameterDefinition; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; +import org.alfresco.traitextender.AJProxyTrait; +import org.alfresco.traitextender.Extend; +import org.alfresco.traitextender.ExtendedTrait; +import org.alfresco.traitextender.Extensible; +import org.alfresco.traitextender.Trait; import org.alfresco.util.FileFilterMode; import org.alfresco.util.FileFilterMode.Client; import org.alfresco.util.GUID; @@ -88,7 +95,7 @@ import org.springframework.extensions.surf.util.I18NUtil; * * @author Derek Hulley */ -public class FileFolderServiceImpl extends AbstractBaseCopyService implements FileFolderService +public class FileFolderServiceImpl extends AbstractBaseCopyService implements FileFolderService, Extensible { private static final String CANNED_QUERY_FILEFOLDER_LIST = "fileFolderGetChildrenCannedQueryFactory"; @@ -143,6 +150,8 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi // default cutoff - applies to list "all" methods private int defaultListMaxResults = 5000; + + private final ExtendedTrait fileFolderTrait; /** * Default constructor @@ -150,6 +159,8 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi public FileFolderServiceImpl() { super(); + + fileFolderTrait=new ExtendedTrait(AJProxyTrait.create(createFileFolderTrait(),FileFolderServiceTrait.class)); } public void setNamespaceService(NamespaceService namespaceService) @@ -350,6 +361,7 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi } @Override + @Extend(traitAPI=FileFolderServiceTrait.class,extensionAPI=FileFolderServiceExtension.class) public List list(NodeRef contextNodeRef) { // execute the query @@ -443,6 +455,7 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi } @Override + @Extend(traitAPI=FileFolderServiceTrait.class,extensionAPI=FileFolderServiceExtension.class) public PagingResults list(NodeRef contextNodeRef, boolean files, boolean folders, String pattern, Set ignoreQNames, List> sortProps, PagingRequest pagingRequest) { ParameterCheck.mandatory("contextNodeRef", contextNodeRef); @@ -459,6 +472,7 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi @Override + @Extend(traitAPI=FileFolderServiceTrait.class,extensionAPI=FileFolderServiceExtension.class) public PagingResults list(NodeRef rootNodeRef, Set searchTypeQNames, Set ignoreAspectQNames, List> sortProps, PagingRequest pagingRequest) { CannedQueryResults results = listImpl(rootNodeRef, null, searchTypeQNames, ignoreAspectQNames, sortProps, pagingRequest); @@ -616,6 +630,7 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi * @see #search(NodeRef, String, boolean, boolean, boolean) */ @Override + @Extend(traitAPI=FileFolderServiceTrait.class,extensionAPI=FileFolderServiceExtension.class) public List search(NodeRef contextNodeRef, String namePattern, boolean includeSubFolders) { return search(contextNodeRef, namePattern, true, true, includeSubFolders); @@ -627,6 +642,7 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi * Full search with all options */ @Override + @Extend(traitAPI=FileFolderServiceTrait.class,extensionAPI=FileFolderServiceExtension.class) public List search( NodeRef contextNodeRef, String namePattern, @@ -955,6 +971,7 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi * @see #move(NodeRef, NodeRef, String) */ @Override + @Extend(traitAPI=FileFolderServiceTrait.class,extensionAPI=FileFolderServiceExtension.class) public FileInfo rename(NodeRef sourceNodeRef, String newName) throws FileExistsException, FileNotFoundException { return moveOrCopy(sourceNodeRef, null, null, newName, true); @@ -1670,5 +1687,103 @@ public class FileFolderServiceImpl extends AbstractBaseCopyService implements Fi { return hiddenAspect.getVisibility(FileFilterMode.getClient(), nodeRef) != Visibility.Visible; } + + @Override + public ExtendedTrait getTrait(Class traitAPI) + { + return (ExtendedTrait) fileFolderTrait; + } + + private FileFolderServiceTrait createFileFolderTrait() + { + return new FileFolderServiceTraitImpl(this); + } + public static class FileFolderServiceTraitImpl implements FileFolderServiceTrait + { + private FileFolderServiceImpl thisService; + + public FileFolderServiceTraitImpl(FileFolderServiceImpl fileFolderServiceImpl) + { + thisService = fileFolderServiceImpl; + } + + @Override + public Pair, Set> buildSearchTypesAndIgnoreAspects(boolean files, boolean folders, + Set ignoreQNameTypes) + { + return thisService.buildSearchTypesAndIgnoreAspects(files, + folders, + ignoreQNameTypes); + } + + @Override + public FileInfo createFileInfo(NodeRef nodeRef, QName typeQName, boolean isFolder, boolean isHidden, + Map properties) + { + return new FileInfoImpl(nodeRef, + typeQName, + isFolder, + isHidden, + properties); + } + + @Override + public FileFolderServiceType getType(QName typeQName) + { + return thisService.getType(typeQName); + } + + @Override + public List list(final NodeRef contextNodeRef) + { + + return thisService.list(contextNodeRef); + } + + @Override + public PagingResults list(final NodeRef contextNodeRef, final boolean files, final boolean folders, + final String pattern, final Set ignoreQNames, final List> sortProps, + final PagingRequest pagingRequest) + { + return thisService.list(contextNodeRef, + files, + folders, + pattern, + ignoreQNames, + sortProps, + pagingRequest); + } + + @Override + public PagingResults list(final NodeRef rootNodeRef, final Set searchTypeQNames, + final Set ignoreAspectQNames, final List> sortProps, + final PagingRequest pagingRequest) + { + return thisService.list(rootNodeRef, + searchTypeQNames, + ignoreAspectQNames, + sortProps, + pagingRequest); + } + + @Override + public List search(final NodeRef contextNodeRef, final String namePattern, final boolean fileSearch, + final boolean folderSearch, final boolean includeSubFolders) + { + return thisService.search(contextNodeRef, + namePattern, + fileSearch, + folderSearch, + includeSubFolders); + } + + @Override + public FileInfo rename(final NodeRef sourceNodeRef, final String newName) throws FileExistsException, FileNotFoundException + { + + return thisService.rename(sourceNodeRef, newName); + + } + }; }