]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/controllers/DistTreeComparator.java
Clarify SLC project structure.
[gpl/argeo-slc.git] / cms / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / controllers / DistTreeComparator.java
diff --git a/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/controllers/DistTreeComparator.java b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/controllers/DistTreeComparator.java
new file mode 100644 (file)
index 0000000..c788ebc
--- /dev/null
@@ -0,0 +1,62 @@
+package org.argeo.slc.client.ui.dist.controllers;
+
+import org.argeo.slc.client.ui.dist.model.DistParentElem;
+import org.argeo.slc.client.ui.dist.model.ModularDistVersionElem;
+import org.argeo.slc.client.ui.dist.model.RepoElem;
+import org.argeo.slc.client.ui.dist.model.WkspGroupElem;
+import org.argeo.slc.client.ui.dist.model.WorkspaceElem;
+import org.argeo.slc.client.ui.dist.utils.NameVersionComparator;
+import org.argeo.slc.client.ui.dist.utils.VersionComparator;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+
+/** Specific comparator to enhance Distribution tree browsers */
+public class DistTreeComparator extends ViewerComparator {
+       private static final long serialVersionUID = -7386716562202568704L;
+
+       private VersionComparator vc = new VersionComparator();
+       private NameVersionComparator nvc = new NameVersionComparator();
+
+       public int category(Object element) {
+               if (element instanceof RepoElem)
+                       if (((RepoElem) element).inHome())
+                               // Home repository always first
+                               return 2;
+                       else
+                               return 5;
+               else if (element instanceof WkspGroupElem)
+                       return 10;
+               else if (element instanceof WorkspaceElem)
+                       return 15;
+               else
+                       return 20;
+       }
+
+       public int compare(Viewer viewer, Object e1, Object e2) {
+               int cat1 = category(e1);
+               int cat2 = category(e2);
+
+               if (cat1 != cat2) {
+                       return cat1 - cat2;
+               }
+
+               String s1, s2;
+
+               if (e1 instanceof DistParentElem) {
+                       s1 = ((DistParentElem) e1).getName();
+                       s2 = ((DistParentElem) e2).getName();
+               } else {
+                       s1 = e1.toString();
+                       s2 = e2.toString();
+               }
+
+               if (e1 instanceof WorkspaceElem)
+                       // Reverse order for nameversions
+                       return nvc.compare(viewer, s2, s1);
+               else if (e1 instanceof ModularDistVersionElem)
+                       // Reverse order for versions
+                       return vc.compare(viewer, s2, s1);
+               else
+                       return s1.compareTo(s2);
+       }
+}
\ No newline at end of file