summaryrefslogtreecommitdiffstats
path: root/rba.tool.editor/src/rba/tool/editor/model/manager/GlobalIndexResourceSorter.java
diff options
context:
space:
mode:
Diffstat (limited to 'rba.tool.editor/src/rba/tool/editor/model/manager/GlobalIndexResourceSorter.java')
-rw-r--r--rba.tool.editor/src/rba/tool/editor/model/manager/GlobalIndexResourceSorter.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/rba.tool.editor/src/rba/tool/editor/model/manager/GlobalIndexResourceSorter.java b/rba.tool.editor/src/rba/tool/editor/model/manager/GlobalIndexResourceSorter.java
new file mode 100644
index 0000000..559e9d5
--- /dev/null
+++ b/rba.tool.editor/src/rba/tool/editor/model/manager/GlobalIndexResourceSorter.java
@@ -0,0 +1,36 @@
+package rba.tool.editor.model.manager;
+
+import java.util.Comparator;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+
+public class GlobalIndexResourceSorter implements Comparator<Resource> {
+
+ int sort(URI o1, URI o2) {
+ /* first compare folder */
+ int size1 = o1.segmentCount() - 1;
+ int size2 = o2.segmentCount() - 1;
+ for (int i = 0; i < size1 && i < size2; i++) {
+ int result = o1.segment(i).toLowerCase().compareTo(o2.segment(i).toLowerCase());
+ if (result != 0) {
+ return result;
+ }
+ }
+
+ if (size1 == size2) {
+ /* order of name that last segment(file). */
+ return o1.lastSegment().toLowerCase().compareTo(o2.lastSegment().toLowerCase());
+ } else if (size1 > size2) {
+ /* prioritize folder over file */
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+
+ @Override
+ public int compare(Resource o1, Resource o2) {
+ return sort(o1.getURI(), o2.getURI());
+ }
+}