ACS-4966 Add option to include path while fetching Categories

This commit is contained in:
MichalKinas
2023-03-29 16:22:48 +02:00
parent 5bb96729fc
commit f1561504cd
2 changed files with 49 additions and 9 deletions

View File

@@ -69,6 +69,7 @@ import org.apache.commons.lang3.StringUtils;
public class CategoriesImpl implements Categories
{
static final String INCLUDE_COUNT_PARAM = "count";
static final String INCLUDE_PATH_PARAM = "path";
static final String NOT_A_VALID_CATEGORY = "Node id does not refer to a valid category";
static final String NO_PERMISSION_TO_MANAGE_A_CATEGORY = "Current user does not have permission to manage a category";
static final String NO_PERMISSION_TO_READ_CONTENT = "Current user does not have read permission to content";
@@ -111,6 +112,11 @@ public class CategoriesImpl implements Categories
category.setCount(categoriesCount.getOrDefault(category.getId(), 0));
}
if (parameters.getInclude().contains(INCLUDE_PATH_PARAM))
{
category.setPath(nodeService.getPath(nodeRef).toDisplayPath(nodeService, permissionService));
}
return category;
}
@@ -136,11 +142,18 @@ public class CategoriesImpl implements Categories
public List<Category> getCategoryChildren(final StoreRef storeRef, final String parentCategoryId, final Parameters parameters)
{
final NodeRef parentNodeRef = getCategoryNodeRef(storeRef, parentCategoryId);
final List<Category> categories = nodeService.getChildAssocs(parentNodeRef).stream()
.filter(ca -> ContentModel.ASSOC_SUBCATEGORIES.equals(ca.getTypeQName()))
.map(ChildAssociationRef::getChildRef)
.map(this::mapToCategory)
.collect(Collectors.toList());
final List<Category> categories = nodeService.getChildAssocs(parentNodeRef)
.stream()
.filter(ca -> ContentModel.ASSOC_SUBCATEGORIES.equals(ca.getTypeQName()))
.map(ChildAssociationRef::getChildRef)
.map(this::mapToCategory)
.peek(category -> {
if (parameters.getInclude().contains(INCLUDE_PATH_PARAM))
{
category.setPath(nodeService.getPath(nodes.getNode(category.getId()).getNodeRef()).toDisplayPath(nodeService, permissionService));
}
})
.collect(Collectors.toList());
if (parameters.getInclude().contains(INCLUDE_COUNT_PARAM))
{
@@ -200,7 +213,16 @@ public class CategoriesImpl implements Categories
}
final Collection<NodeRef> actualCategories = DefaultTypeConverter.INSTANCE.getCollection(NodeRef.class, currentCategories);
return actualCategories.stream().map(this::mapToCategory).collect(Collectors.toList());
return actualCategories
.stream()
.map(this::mapToCategory)
.peek(category -> {
if (parameters.getInclude().contains(INCLUDE_PATH_PARAM))
{
category.setPath(nodeService.getPath(nodes.getNode(category.getId()).getNodeRef()).toDisplayPath(nodeService, permissionService));
}
})
.collect(Collectors.toList());
}
@Override

View File

@@ -35,6 +35,7 @@ public class Category
private String parentId;
private boolean hasChildren;
private Integer count;
private String path;
public String getId()
{
@@ -91,6 +92,14 @@ public class Category
this.count = count;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
@Override
public boolean equals(Object o)
{
@@ -100,19 +109,20 @@ public class Category
return false;
Category category = (Category) o;
return hasChildren == category.hasChildren && Objects.equals(id, category.id) && Objects.equals(name, category.name) && Objects.equals(parentId, category.parentId)
&& Objects.equals(count, category.count);
&& Objects.equals(count, category.count) && Objects.equals(path, category.path);
}
@Override
public int hashCode()
{
return Objects.hash(id, name, parentId, hasChildren, count);
return Objects.hash(id, name, parentId, hasChildren, count, path);
}
@Override
public String toString()
{
return "Category{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", parentId='" + parentId + '\'' + ", hasChildren=" + hasChildren + ", count=" + count + '}';
return "Category{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", parentId='" + parentId + '\'' + ", hasChildren=" + hasChildren
+ ", count=" + count + ", path=" + path + '}';
}
public static Builder builder()
@@ -127,6 +137,7 @@ public class Category
private String parentId;
private boolean hasChildren;
private Integer count;
private String path;
public Builder id(String id)
{
@@ -158,6 +169,12 @@ public class Category
return this;
}
public Builder path(String path)
{
this.path = path;
return this;
}
public Category create()
{
final Category category = new Category();
@@ -166,6 +183,7 @@ public class Category
category.setParentId(parentId);
category.setHasChildren(hasChildren);
category.setCount(count);
category.setPath(path);
return category;
}
}