use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualFileFolderServiceExtension method list.
@Override
public PagingResults<FileInfo> list(final NodeRef contextNodeRef, final boolean files, final boolean folders, final String pattern, final Set<QName> ignoreQNames, final List<Pair<QName, Boolean>> sortProps, final PagingRequest pagingRequest) {
final FileFolderServiceTrait theTrait = getTrait();
if (canVirtualize(contextNodeRef)) {
final Reference reference = smartStore.virtualize(contextNodeRef);
Set<QName>[] searchAndIgnore = buildSearchAndIgnore(files, folders, ignoreQNames);
if (mergeActualNode(reference)) {
PagingResults<Reference> virtualChildren = smartStore.list(reference, false, true, files, folders, pattern, searchAndIgnore[1], searchAndIgnore[2], sortProps, new PagingRequest(0));
PagingResultsSource<FileInfo> superSource = new PagingResultsSource<FileInfo>() {
@Override
public PagingResults<FileInfo> retrieve(PagingRequest pr) throws PageCollationException {
try {
PagingResults<FileInfo> result = theTrait.list(actualNodeFrom(reference), files, folders, pattern, ignoreQNames, sortProps, pr);
return result;
} catch (VirtualizationException e) {
throw new PageCollationException(e);
}
}
};
FileInfoPropsComparator comparator = (sortProps != null && !sortProps.isEmpty()) ? new FileInfoPropsComparator(sortProps) : null;
try {
return new PageCollator<FileInfo>().collate(asFileInfoResults(environment, virtualChildren, smartStore).getPage(), superSource, pagingRequest, comparator);
} catch (PageCollationException error) {
throw new VirtualizationException(error);
}
} else {
PagingResults<Reference> children = smartStore.list(reference, true, true, files, folders, pattern, searchAndIgnore[1], searchAndIgnore[2], sortProps, pagingRequest);
return asFileInfoResults(environment, children, smartStore);
}
} else {
return theTrait.list(contextNodeRef, files, folders, pattern, ignoreQNames, sortProps, pagingRequest);
}
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualFileFolderServiceExtension method asFileInfoResults.
public PagingResults<FileInfo> asFileInfoResults(ActualEnvironment environment, final PagingResults<Reference> results, VirtualStore store) throws ReferenceEncodingException, VirtualizationException {
List<Reference> virtualPage = results.getPage();
final LinkedList<FileInfo> page = new LinkedList<FileInfo>();
for (Reference ref : virtualPage) {
FileInfo fileInfo = asFileInfo(store, environment, ref);
page.add(fileInfo);
}
final boolean hasMoreItems = results.hasMoreItems();
final Pair<Integer, Integer> totalResultCount = results.getTotalResultCount();
final String queryExecutionId = results.getQueryExecutionId();
return new PagingResults<FileInfo>() {
@Override
public List<FileInfo> getPage() {
return page;
}
@Override
public String getQueryExecutionId() {
return queryExecutionId;
}
@Override
public Pair<Integer, Integer> getTotalResultCount() {
return totalResultCount;
}
@Override
public boolean hasMoreItems() {
return hasMoreItems;
}
};
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualPermissionServiceExtension method getSetPermissions.
@Override
public NodePermissionEntry getSetPermissions(NodeRef nodeRef) {
PermissionServiceTrait theTrait = getTrait();
Reference reference = Reference.fromNodeRef(nodeRef);
if (reference == null) {
return theTrait.getSetPermissions(nodeRef);
} else {
NodePermissionEntry virtualSetPermissions = smartStore.getSetPermissions(reference);
NodeRef nodeToAdhereTo = establishPermisisonAdherence(reference);
List<? extends PermissionEntry> actualPermissionEntries;
boolean inheritPermissions = false;
if (nodeToAdhereTo != null) {
NodePermissionEntry actualSetPermissions = theTrait.getSetPermissions(nodeToAdhereTo);
actualPermissionEntries = actualSetPermissions.getPermissionEntries();
inheritPermissions = actualSetPermissions.inheritPermissions();
} else {
actualPermissionEntries = Collections.emptyList();
inheritPermissions = false;
}
List<PermissionEntry> mergedEntries = new LinkedList<>();
List<? extends PermissionEntry> virtualPermissionEntries = virtualSetPermissions.getPermissionEntries();
Set<QName> overridenPermissions = new HashSet<>();
for (PermissionEntry permissionEntry : virtualPermissionEntries) {
overridenPermissions.add(permissionEntry.getPermissionReference().getQName());
mergedEntries.add(permissionEntry);
}
for (PermissionEntry permissionEntry : actualPermissionEntries) {
if (!overridenPermissions.contains(permissionEntry.getPermissionReference().getQName())) {
mergedEntries.add(permissionEntry);
}
}
return new SimpleNodePermissionEntry(nodeRef, inheritPermissions, mergedEntries);
}
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualPermissionServiceExtension method getPermissions.
@Override
public Set<AccessPermission> getPermissions(NodeRef nodeRef) {
PermissionServiceTrait theTrait = getTrait();
Reference reference = Reference.fromNodeRef(nodeRef);
if (reference == null) {
return theTrait.getPermissions(nodeRef);
} else {
Set<AccessPermission> virtualSetPermissions = smartStore.getAllSetPermissions(reference);
NodeRef nodeToAdhereTo = establishPermisisonAdherence(reference);
Set<AccessPermission> mergedEntries = new HashSet<>(virtualSetPermissions);
if (nodeToAdhereTo != null) {
Set<AccessPermission> actualSetPermissions = theTrait.getPermissions(nodeToAdhereTo);
mergedEntries.addAll(actualSetPermissions);
}
return mergedEntries;
}
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualPermissionServiceExtension method getAllSetPermissions.
@Override
public Set<AccessPermission> getAllSetPermissions(NodeRef nodeRef) {
PermissionServiceTrait theTrait = getTrait();
Reference reference = Reference.fromNodeRef(nodeRef);
if (reference == null) {
return theTrait.getAllSetPermissions(nodeRef);
} else {
Set<AccessPermission> virtualSetPermissions = smartStore.getAllSetPermissions(reference);
NodeRef nodeToAdhereTo = establishPermisisonAdherence(reference);
Set<AccessPermission> actualSetPermissions;
if (nodeToAdhereTo != null) {
actualSetPermissions = theTrait.getAllSetPermissions(nodeToAdhereTo);
} else {
actualSetPermissions = Collections.emptySet();
}
Set<String> overridenPermissions = new HashSet<>();
Set<AccessPermission> mergedEntries = new HashSet<>();
for (AccessPermission permission : virtualSetPermissions) {
overridenPermissions.add(permission.getPermission());
mergedEntries.add(permission);
}
for (AccessPermission permission : actualSetPermissions) {
if (!overridenPermissions.contains(permission.getPermission())) {
mergedEntries.add(permission);
}
}
return mergedEntries;
}
}
Aggregations