Skip to content

Commit d282be6

Browse files
committed
Updated and created new tests for com.logicaldoc-core.folder
1 parent 970f236 commit d282be6

File tree

11 files changed

+851
-156
lines changed

11 files changed

+851
-156
lines changed

logicaldoc-core/src/main/java/com/logicaldoc/core/folder/FolderComparator.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ private static final FolderComparator newComparatorForExtendedAttribute(final St
8888
public int compare(Folder f1, Folder f2) {
8989
Comparable val1 = (Comparable) f1.getValue(attribute);
9090
Comparable val2 = (Comparable) f2.getValue(attribute);
91+
9192
if (val1 == null && val2 == null)
9293
return 0;
9394
else if (val1 == null)
@@ -129,7 +130,7 @@ else if (val2 == null)
129130

130131
public static Comparator<Folder> getComparator(String sort) {
131132
StringTokenizer st = new StringTokenizer(sort, ",", false);
132-
List<FolderComparator> comparators = new ArrayList<>();
133+
List<Comparator<Folder>> comparators = new ArrayList<>();
133134

134135
while (st.hasMoreTokens()) {
135136
String token = st.nextToken().trim();
@@ -158,21 +159,9 @@ else if (comp != null && !asc)
158159
return getComparator(comparators);
159160
}
160161

161-
public static Comparator<Folder> getComparator(List<FolderComparator> multipleOptions) {
162-
return (f1, f2) -> {
163-
for (FolderComparator option : multipleOptions) {
164-
int result = option.compare(f1, f2);
165-
if (result != 0) {
166-
return result;
167-
}
168-
}
169-
return 0;
170-
};
171-
}
172-
173-
public static Comparator<Folder> getComparator(final FolderComparator... multipleOptions) {
162+
private static Comparator<Folder> getComparator(List<Comparator<Folder>> multipleOptions) {
174163
return (f1, f2) -> {
175-
for (FolderComparator option : multipleOptions) {
164+
for (Comparator<Folder> option : multipleOptions) {
176165
int result = option.compare(f1, f2);
177166
if (result != 0) {
178167
return result;

logicaldoc-core/src/main/java/com/logicaldoc/core/folder/FolderListenerManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public synchronized void init() {
4646
for (Extension extension : exts) {
4747
sortedExts.add(extension);
4848
}
49+
4950
Collections.sort(sortedExts, (Extension e1, Extension e2) -> {
5051
int position1 = Integer.parseInt(e1.getParameter(POSITION).valueAsString());
5152
int position2 = Integer.parseInt(e2.getParameter(POSITION).valueAsString());

logicaldoc-core/src/main/java/com/logicaldoc/core/folder/HibernateFolderDAO.java

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public class HibernateFolderDAO extends HibernatePersistentObjectDAO<Folder> imp
7070

7171
private static final String PARENTID_EQUAL = ".parentId=";
7272

73-
private static final String FOLDER_ACL_AS_GROUP = ".accessControlList as _group ";
73+
private static final String FOLDER_ACL_AS_ACL = ".accessControlList as _acl ";
7474

7575
private static final String SECURITY_REF_IN = ".securityRef in (";
7676

@@ -94,7 +94,7 @@ public class HibernateFolderDAO extends HibernatePersistentObjectDAO<Folder> imp
9494

9595
private static final String SELECT_DISTINCT = "select distinct(";
9696

97-
private static final String WHERE_GROUP_GROUPID_IN = " where _group.groupId in (";
97+
private static final String WHERE_GROUP_GROUPID_IN = " where _acl.groupId in (";
9898

9999
@Resource(name = "UserDAO")
100100
protected UserDAO userDAO;
@@ -223,7 +223,7 @@ private void updateAliases(Folder folder) {
223223

224224
private void setCreator(Folder folder, FolderHistory transaction) {
225225
if (transaction != null) {
226-
if (folder.getId() == 0 && transaction.getEvent() == null)
226+
if (folder.getId() == 0 && StringUtils.isEmpty(transaction.getEvent()))
227227
transaction.setEvent(FolderEvent.CREATED.toString());
228228

229229
// In case of creation event we set the creator
@@ -281,11 +281,12 @@ public List<Folder> findByUserId(long userId) throws PersistenceException {
281281
return findAll();
282282

283283
Set<Group> userGroups = user.getGroups();
284+
284285
if (!userGroups.isEmpty()) {
285286
// First of all collect all folders that define it's own
286287
// policies
287288
StringBuilder query = new StringBuilder("select distinct(_folder) from Folder _folder ");
288-
query.append(" left join _folder" + FOLDER_ACL_AS_GROUP);
289+
query.append(" left join _folder" + FOLDER_ACL_AS_ACL);
289290
query.append(WHERE_GROUP_GROUPID_IN);
290291
query.append(userGroups.stream().map(ug -> Long.toString(ug.getId())).collect(Collectors.joining(",")));
291292
query.append(")");
@@ -299,7 +300,8 @@ public List<Folder> findByUserId(long userId) throws PersistenceException {
299300
query = new StringBuilder("select _folder from Folder _folder where _folder.securityRef in (");
300301
query.append(folders.stream().map(f -> Long.toString(f.getId())).collect(Collectors.joining(",")));
301302
query.append(")");
302-
List<Folder> tmp = find(query.toString(), user.getTenantId());
303+
304+
List<Folder> tmp = findByObjectQuery(query.toString(), null, null);
303305

304306
for (Folder folder : tmp) {
305307
if (!folders.contains(folder))
@@ -320,7 +322,7 @@ private User getExistingtUser(long userId) throws PersistenceException {
320322

321323
@Override
322324
public List<Folder> findByUserId(long userId, long parentId) throws PersistenceException {
323-
List<Folder> coll = new ArrayList<>();
325+
List<Folder> accessibleFolders = new ArrayList<>();
324326

325327
User user = getExistingtUser(userId);
326328

@@ -331,17 +333,20 @@ public List<Folder> findByUserId(long userId, long parentId) throws PersistenceE
331333
* Search for all those folders that defines its own security policies
332334
*/
333335
StringBuilder query1 = new StringBuilder();
334-
Set<Group> precoll = user.getGroups();
335-
if (precoll.isEmpty())
336-
return coll;
336+
Set<Group> allUserGroups = user.getGroups();
337+
if (allUserGroups.isEmpty())
338+
return accessibleFolders;
339+
340+
String allUserGroupIds = allUserGroups.stream().map(ug -> Long.toString(ug.getId()))
341+
.collect(Collectors.joining(","));
337342

338343
query1.append(SELECT_DISTINCT + ENTITY + ") " + FROM_FOLDER + ENTITY + " ");
339-
query1.append(LEFT_JOIN + ENTITY + FOLDER_ACL_AS_GROUP);
344+
query1.append(LEFT_JOIN + ENTITY + FOLDER_ACL_AS_ACL);
340345
query1.append(WHERE_GROUP_GROUPID_IN);
341-
query1.append(precoll.stream().map(ug -> Long.toString(ug.getId())).collect(Collectors.joining(",")));
346+
query1.append(allUserGroupIds);
342347
query1.append(") " + AND + ENTITY + ".parentId = :parentId and " + ENTITY + ".id != " + ENTITY + ".parentId");
343348

344-
coll = findByObjectQuery(query1.toString(), Map.of(PARENT_ID, parentId), null);
349+
accessibleFolders = findByObjectQuery(query1.toString(), Map.of(PARENT_ID, parentId), null);
345350

346351
/*
347352
* Now search for all other folders that references accessible folders
@@ -350,19 +355,19 @@ public List<Folder> findByUserId(long userId, long parentId) throws PersistenceE
350355
+ ".deleted=0 and " + ENTITY + ".parentId = :parentId ");
351356
query2.append(AND + ENTITY + SECURITY_REF_IN);
352357
query2.append(" select distinct(B.id) from Folder B ");
353-
query2.append(" left join B.accessControlList as _group");
358+
query2.append(" left join B.accessControlList as _acl");
354359
query2.append(WHERE_GROUP_GROUPID_IN);
355-
query2.append(precoll.stream().map(ug -> Long.toString(ug.getId())).collect(Collectors.joining(",")));
360+
query2.append(allUserGroups.stream().map(ug -> Long.toString(ug.getId())).collect(Collectors.joining(",")));
356361
query2.append("))");
357362

358363
List<Folder> coll2 = findByObjectQuery(query2.toString(), Map.of(PARENT_ID, parentId), null);
359364
for (Folder folder : coll2) {
360-
if (!coll.contains(folder))
361-
coll.add(folder);
365+
if (!accessibleFolders.contains(folder))
366+
accessibleFolders.add(folder);
362367
}
363368

364-
Collections.sort(coll, (o1, o2) -> (-1 * o1.getName().compareTo(o2.getName())));
365-
return coll;
369+
Collections.sort(accessibleFolders, (o1, o2) -> (-1 * o1.getName().compareTo(o2.getName())));
370+
return accessibleFolders;
366371
}
367372

368373
@Override
@@ -392,7 +397,7 @@ public List<Folder> findChildren(long parentId, long userId) throws PersistenceE
392397
* Search for the folders that define its own policies
393398
*/
394399
StringBuilder query1 = new StringBuilder(SELECT_DISTINCT + ENTITY + ") " + FROM_FOLDER + ENTITY + " ");
395-
query1.append(LEFT_JOIN + ENTITY + FOLDER_ACL_AS_GROUP);
400+
query1.append(LEFT_JOIN + ENTITY + FOLDER_ACL_AS_ACL);
396401
query1.append(WHERE_GROUP_GROUPID_IN);
397402
query1.append(groups.stream().map(ug -> Long.toString(ug.getId())).collect(Collectors.joining(",")));
398403
query1.append(") " + AND + ENTITY + PARENTID_EQUAL + parent.getId());
@@ -407,7 +412,7 @@ public List<Folder> findChildren(long parentId, long userId) throws PersistenceE
407412
+ ".deleted=0 and " + ENTITY + ".parentId = :parentId ");
408413
query2.append(AND + ENTITY + SECURITY_REF_IN);
409414
query2.append(" select distinct(B.id) from Folder B ");
410-
query2.append(" left join B.accessControlList as _group");
415+
query2.append(" left join B.accessControlList as _acl");
411416
query2.append(WHERE_GROUP_GROUPID_IN);
412417
query2.append(groups.stream().map(ug -> Long.toString(ug.getId())).collect(Collectors.joining(",")));
413418
query2.append("))");
@@ -489,6 +494,7 @@ public boolean isReadAllowed(long folderId, long userId) throws PersistenceExcep
489494

490495
long id = folderId;
491496
Folder folder = findById(folderId);
497+
492498
if (folder == null)
493499
return false;
494500
if (folder.getSecurityRef() != null)
@@ -536,8 +542,8 @@ public List<Folder> findByGroupId(long groupId) throws PersistenceException {
536542
* Search for folders that define its own security policies
537543
*/
538544
StringBuilder query = new StringBuilder(SELECT_DISTINCT + ENTITY + ") " + FROM_FOLDER + ENTITY + " ");
539-
query.append(LEFT_JOIN + ENTITY + FOLDER_ACL_AS_GROUP);
540-
query.append(WHERE + ENTITY + ".deleted=0 and _group.groupId =" + groupId);
545+
query.append(LEFT_JOIN + ENTITY + FOLDER_ACL_AS_ACL);
546+
query.append(WHERE + ENTITY + ".deleted=0 and _acl.groupId =" + groupId);
541547

542548
List<Folder> coll = findByObjectQuery(query.toString(), (Map<String, Object>) null, null);
543549

@@ -897,6 +903,7 @@ public Set<Permission> getAllowedPermissions(long folderId, long userId) throws
897903
// the policies
898904
long id = folderId;
899905
Folder folder = findById(folderId);
906+
900907
if (folder.getSecurityRef() != null) {
901908
id = folder.getSecurityRef().longValue();
902909
log.debug("Use the security reference {}", id);

0 commit comments

Comments
 (0)