diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index e29fa10237..95e2ff020f 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -241,6 +241,7 @@ public class NodesImpl implements Nodes ContentModel.PROP_WORKING_COPY_OWNER); private final static String PARAM_ISFOLDER = "isFolder"; + private final static String PARAM_ISCONTENT = "isContent"; private final static String PARAM_SUBTYPES = "subTypes"; private final static String PARAM_NAME = "name"; @@ -270,8 +271,9 @@ public class NodesImpl implements Nodes MAP_PARAM_QNAME = Collections.unmodifiableMap(aMap); } + // list children filtering (via where clause) private final static Set LIST_FOLDER_CHILDREN_EQUALS_QUERY_PROPERTIES = - new HashSet<>(Arrays.asList(new String[] {PARAM_ISFOLDER, PARAM_NODETYPE, PARAM_SUBTYPES})); + new HashSet<>(Arrays.asList(new String[] {PARAM_ISFOLDER, PARAM_ISCONTENT, PARAM_NODETYPE, PARAM_SUBTYPES})); /* * Validates that node exists. @@ -670,8 +672,9 @@ public class NodesImpl implements Nodes { // not direct folder (or file) ... // might be sub-type of cm:cmobject (or a cm:link pointing to cm:cmobject or possibly even another cm:link) - node = new Document(nodeRef, parentNodeRef, properties, mapUserInfo, sr); + node = new Node(nodeRef, parentNodeRef, properties, mapUserInfo, sr); node.setIsFolder(false); + node.setIsContent(false); } else if (type.equals(Type.DOCUMENT)) { @@ -679,7 +682,6 @@ public class NodesImpl implements Nodes } else if (type.equals(Type.FOLDER)) { - // container/folder node = new Folder(nodeRef, parentNodeRef, properties, mapUserInfo, sr); } else @@ -920,11 +922,23 @@ public class NodesImpl implements Nodes QueryHelper.walk(q, propertyWalker); Boolean isFolder = propertyWalker.getProperty(PARAM_ISFOLDER, WhereClauseParser.EQUALS, Boolean.class); - if (isFolder != null) + Boolean isContent = propertyWalker.getProperty(PARAM_ISCONTENT, WhereClauseParser.EQUALS, Boolean.class); + + if ((isFolder != null) && (isContent != null)) + { + includeFiles = isContent; + includeFolders = isFolder; + } + else if (isFolder != null) { includeFiles = !isFolder; includeFolders = isFolder; } + else if (isContent != null) + { + includeFiles = isContent; + includeFolders = !isContent; + } String nodeTypeStr = propertyWalker.getProperty(PARAM_NODETYPE, WhereClauseParser.EQUALS, String.class); if ((nodeTypeStr != null) && (! nodeTypeStr.isEmpty())) @@ -954,6 +968,7 @@ public class NodesImpl implements Nodes List> sortProps = null; if ((sortCols != null) && (sortCols.size() > 0)) { + // TODO should we allow isContent in sort (and map to reverse of isFolder) ? sortProps = new ArrayList<>(sortCols.size()); for (SortColumn sortCol : sortCols) { diff --git a/source/java/org/alfresco/rest/api/model/Document.java b/source/java/org/alfresco/rest/api/model/Document.java index b47f490741..47725f60b9 100644 --- a/source/java/org/alfresco/rest/api/model/Document.java +++ b/source/java/org/alfresco/rest/api/model/Document.java @@ -55,7 +55,8 @@ public class Document extends Node contentInfo = new ContentInfo(mimeType, mimeTypeName, cd.getSize(), cd.getEncoding()); } - this.isFolder = false; + setIsFolder(false); + setIsContent(true); } @Override diff --git a/source/java/org/alfresco/rest/api/model/Folder.java b/source/java/org/alfresco/rest/api/model/Folder.java index 7e93df3a98..eed4372ca6 100644 --- a/source/java/org/alfresco/rest/api/model/Folder.java +++ b/source/java/org/alfresco/rest/api/model/Folder.java @@ -42,7 +42,9 @@ public class Folder extends Node public Folder(NodeRef nodeRef, NodeRef parentNodeRef, Map nodeProps, Map mapUserInfo, ServiceRegistry sr) { super(nodeRef, parentNodeRef, nodeProps, mapUserInfo, sr); - this.isFolder = true; + + setIsFolder(true); + setIsContent(false); } @Override diff --git a/source/java/org/alfresco/rest/api/model/Node.java b/source/java/org/alfresco/rest/api/model/Node.java index b790396575..aa6dea2b06 100644 --- a/source/java/org/alfresco/rest/api/model/Node.java +++ b/source/java/org/alfresco/rest/api/model/Node.java @@ -57,6 +57,7 @@ public class Node implements Comparable protected UserInfo modifiedByUser; protected Boolean isFolder; + protected Boolean isContent; protected Boolean isLink; protected NodeRef parentNodeRef; @@ -253,6 +254,16 @@ public class Node implements Comparable this.isFolder = isFolder; } + public Boolean getIsContent() + { + return isContent; + } + + public void setIsContent(Boolean isContent) + { + this.isContent = isContent; + } + public Boolean getIsLink() { return isLink; @@ -291,10 +302,11 @@ public class Node implements Comparable return "Node [nodeRef=" + nodeRef + ", type=" + prefixTypeQName + ", name=" + name + ", title=" + title + ", description=" + description + ", createdAt=" + createdAt + ", modifiedAt=" + modifiedAt + ", createdByUser=" + createdByUser + ", modifiedBy=" - + modifiedByUser + ", pathInfo =" + pathInfo +"]"; + + modifiedByUser + ", isFolder =" + isFolder + ", isContent =" + isContent + ", pathInfo =" + pathInfo +"]"; } // here to allow POST /nodes/{id}/children when creating empty file with specified content.mimeType + // also allows list of results to be returned as "nodes" protected ContentInfo contentInfo; diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java index f6468a6713..6638da75a9 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -267,12 +267,16 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(4, nodes.size()); assertEquals(folder2, nodes.get(0).getName()); assertTrue(nodes.get(0).getIsFolder()); + assertFalse(nodes.get(0).getIsContent()); assertEquals(folder1, nodes.get(1).getName()); assertTrue(nodes.get(1).getIsFolder()); + assertFalse(nodes.get(1).getIsContent()); assertEquals(content2, nodes.get(2).getName()); assertFalse(nodes.get(2).getIsFolder()); + assertTrue(nodes.get(2).getIsContent()); assertEquals(content1, nodes.get(3).getName()); assertFalse(nodes.get(3).getIsFolder()); + assertTrue(nodes.get(3).getIsContent()); // Order by folders last and modified date first orderBy = Collections.singletonMap("orderBy", "isFolder ASC,modifiedAt DESC"); @@ -457,17 +461,21 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(2, nodes.size()); assertTrue(nodes.get(0).getIsFolder()); - assertTrue(nodes.get(1).getIsFolder()); + assertFalse(nodes.get(0).getIsContent()); assertTrue(folderIds.contains(nodes.get(0).getId())); + + assertTrue(nodes.get(1).getIsFolder()); + assertFalse(nodes.get(1).getIsContent()); assertTrue(folderIds.contains(nodes.get(1).getId())); // filtering, via where clause - content only params = new LinkedHashMap<>(); - params.put("where", "(isFolder=false)"); + params.put("where", "(isContent=true)"); response = getAll(myChildrenUrl, user1, paging, params, 200); nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Document.class); assertEquals(1, nodes.size()); assertFalse(nodes.get(0).getIsFolder()); + assertTrue(nodes.get(0).getIsContent()); assertTrue(contentIds.contains(nodes.get(0).getId())); // list children via relativePath @@ -614,6 +622,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertNotNull(myFilesNodeId); assertEquals(user1, node.getName()); assertTrue(node.getIsFolder()); + assertFalse(node.getIsContent()); NodeRef myHomeNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myFilesNodeId); NodeRef userHomesNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, node.getParentId()); @@ -759,6 +768,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertNotNull(myFilesNodeId); assertEquals(user1, node.getName()); assertTrue(node.getIsFolder()); + assertFalse(node.getIsContent()); assertNull(node.getPath()); // note: path can be optionally "select"'ed - see separate test response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_SHARED, null, 200); @@ -767,6 +777,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertNotNull(sharedFilesNodeId); assertEquals("Shared", node.getName()); assertTrue(node.getIsFolder()); + assertFalse(node.getIsContent()); assertNull(node.getPath()); //Delete user1's home @@ -2001,6 +2012,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertNotNull(docResp.getModifiedAt()); assertNotNull(docResp.getModifiedByUser()); assertFalse(docResp.getIsFolder()); + assertTrue(docResp.getIsContent()); assertNull(docResp.getIsLink()); assertEquals("cm:content", docResp.getNodeType()); assertNotNull(docResp.getParentId()); diff --git a/source/test-java/org/alfresco/rest/api/tests/client/data/Document.java b/source/test-java/org/alfresco/rest/api/tests/client/data/Document.java index 6144723a56..c95be0e446 100644 --- a/source/test-java/org/alfresco/rest/api/tests/client/data/Document.java +++ b/source/test-java/org/alfresco/rest/api/tests/client/data/Document.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2015 Alfresco Software Limited. + * Copyright (C) 2005-2016 Alfresco Software Limited. * * This file is part of Alfresco * @@ -21,14 +21,14 @@ package org.alfresco.rest.api.tests.client.data; import static org.junit.Assert.assertTrue; /** - * Representation of a document node (initially for client tests for File Folder API) + * Representation of a document node - initially for client tests for Nodes (aka File Folder) API * * @author janv * */ public class Document extends Node { - private ContentInfo content; + private ContentInfo contentInfo; public Document() { super(); @@ -36,12 +36,12 @@ public class Document extends Node public ContentInfo getContent() { - return content; + return contentInfo; } - public void setContent(ContentInfo content) + public void setContent(ContentInfo contentInfo) { - this.content = content; + this.contentInfo = contentInfo; } @Override @@ -53,6 +53,6 @@ public class Document extends Node Document other = (Document) o; - content.expected(((Document) o).getContent()); + contentInfo.expected(other.getContent()); } } diff --git a/source/test-java/org/alfresco/rest/api/tests/client/data/Folder.java b/source/test-java/org/alfresco/rest/api/tests/client/data/Folder.java index 8498a39df2..e40e912168 100644 --- a/source/test-java/org/alfresco/rest/api/tests/client/data/Folder.java +++ b/source/test-java/org/alfresco/rest/api/tests/client/data/Folder.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2015 Alfresco Software Limited. + * Copyright (C) 2005-2016 Alfresco Software Limited. * * This file is part of Alfresco * @@ -22,7 +22,7 @@ package org.alfresco.rest.api.tests.client.data; import static org.junit.Assert.assertTrue; /** - * Representation of a folder node (initially for client tests for File Folder API) + * Representation of a folder node - initially for client tests for Nodes (aka File Folder) API * * @author janv */ diff --git a/source/test-java/org/alfresco/rest/api/tests/client/data/Node.java b/source/test-java/org/alfresco/rest/api/tests/client/data/Node.java index 55a64971fa..41539985a2 100644 --- a/source/test-java/org/alfresco/rest/api/tests/client/data/Node.java +++ b/source/test-java/org/alfresco/rest/api/tests/client/data/Node.java @@ -30,7 +30,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** - * Representation of a node (for client tests for File Folder API) + * Representation of a node - initially for client tests for Nodes (aka File Folder) API * * @author janv */ @@ -45,6 +45,7 @@ public class Node protected UserInfo modifiedByUser; protected Boolean isFolder; + protected Boolean isContent; protected Boolean isLink; protected String parentId; @@ -114,9 +115,19 @@ public class Node return isFolder; } - public void setIsFolder(Boolean folder) + public void setIsFolder(Boolean isFolder) { - isFolder = folder; + this.isFolder = isFolder; + } + + public Boolean getIsContent() + { + return isContent; + } + + public void setIsContent(Boolean isContent) + { + this.isContent = isContent; } public Boolean getIsLink() @@ -262,6 +273,7 @@ public class Node } AssertUtil.assertEquals("isFolder", isFolder, other.getIsFolder()); + AssertUtil.assertEquals("isContent", isContent, other.getIsContent()); AssertUtil.assertEquals("isLink", isLink, other.getIsLink()); if (path != null) {