@@ -45,23 +45,64 @@ public class FolderImpl extends HierarchyItemImpl implements Folder, Search, Quo
4545 * @throws ServerException In case of an error.
4646 */
4747 public PageResults getChildren (List <Property > propNames , Long offset , Long nResults , List <OrderProperty > orderProps ) throws ServerException {
48- List <HierarchyItemImpl > hierarchyItems = getDataAccess ().readItems (
49- "SELECT ID," +
50- " Parent," +
51- " ItemType," +
52- " Name," +
53- " Created," +
54- " Modified," +
55- " LastChunkSaved," +
56- " TotalContentLength," +
57- " VersionControlled," +
58- " CheckinDuringUnlock," +
59- " CheckedOut," +
60- " AutoVersion," +
61- " CheckinOnFileComplete"
62- + " FROM Repository"
63- + " WHERE Parent = ? AND ID != 0" , getPath (), true , id );
64- return new PageResults (hierarchyItems , (long ) hierarchyItems .size ());
48+ offset = offset == null ? 0 : offset ;
49+ nResults = nResults == null || nResults < 0 ? 10 : nResults ;
50+
51+ String sqlBeforeOrder = "SELECT ID," +
52+ " Parent," +
53+ " ItemType," +
54+ " Name," +
55+ " Created," +
56+ " Modified," +
57+ " LastChunkSaved," +
58+ " TotalContentLength," +
59+ " VersionControlled," +
60+ " CheckinDuringUnlock," +
61+ " CheckedOut," +
62+ " AutoVersion," +
63+ " CheckinOnFileComplete, row_number() over (ORDER BY " ;
64+
65+ StringBuilder order = new StringBuilder ();
66+ if (orderProps != null && !orderProps .isEmpty ()) {
67+ for (OrderProperty orderProperty : orderProps ) {
68+ String sortPropertyName = orderProperty .getProperty ().getName ();
69+ String sortPropertyVal = orderProperty .isAscending () ? " ASC " : " DESC " ;
70+ if ("is-directory" .equals (sortPropertyName ))
71+ order .append ("ItemType" ).append (sortPropertyVal ).append (", " );
72+
73+ else if ("quota-used-bytes" .equals (sortPropertyName ))
74+ order .append ("TotalContentLength" ).append (sortPropertyVal ).append (", " );
75+
76+ else if ("getlastmodified" .equals (sortPropertyName ))
77+ order .append ("Modified" ).append (sortPropertyVal ).append (", " );
78+
79+ else if ("displayname" .equals (sortPropertyName ))
80+ order .append ("Name" ).append (sortPropertyVal ).append (", " );
81+
82+ else if ("getcontenttype" .equals (sortPropertyName ))
83+ order .append ("substr(Name, nullif(instr(Name,'.', -1) + 1, 1))" )
84+ .append (sortPropertyVal ).append (", " );
85+ }
86+
87+ if (order .lastIndexOf (", " ) == order .length () - 2 ) {
88+ order = new StringBuilder (order .substring (0 , order .length () - 2 ));
89+ }
90+ } else {
91+ order .append ("ID ASC" );
92+ }
93+
94+ String sqlAfterOrder = ") line_number FROM Repository " ;
95+
96+ String whereQuery = " WHERE Parent = ? AND ID != 0 " ;
97+
98+ List <HierarchyItemImpl > hierarchyItems = getDataAccess ().readItems ("SELECT * FROM (" + sqlBeforeOrder + order + sqlAfterOrder + whereQuery +
99+ ") WHERE line_number BETWEEN ? AND ? ORDER BY line_number" ,
100+ getPath (), true , id , offset + 1 , nResults + offset );
101+
102+ long hierarchyItemsSize = getDataAccess ()
103+ .executeInt ("SELECT COUNT(ID) FROM Repository " + whereQuery , id );
104+
105+ return new PageResults (hierarchyItems , hierarchyItemsSize );
65106 }
66107
67108 /**
0 commit comments