X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcontrollers%2FDistTreeComparator.java;fp=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcontrollers%2FDistTreeComparator.java;h=c788ebc7bccfd098f2940b2d4a2a7a1398a64603;hb=ecc22e604e47533c79de9cecdcdeacbc752cbff1;hp=0000000000000000000000000000000000000000;hpb=e07ded4632e53f8b8869763bc1f1f4091361e76e;p=gpl%2Fargeo-slc.git 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 index 000000000..c788ebc7b --- /dev/null +++ b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/controllers/DistTreeComparator.java @@ -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