View Javadoc
1   package org.argeo.slc.client.ui.dist.controllers;
2   
3   import org.argeo.slc.client.ui.dist.model.DistParentElem;
4   import org.argeo.slc.client.ui.dist.model.ModularDistVersionElem;
5   import org.argeo.slc.client.ui.dist.model.RepoElem;
6   import org.argeo.slc.client.ui.dist.model.WkspGroupElem;
7   import org.argeo.slc.client.ui.dist.model.WorkspaceElem;
8   import org.argeo.slc.client.ui.dist.utils.NameVersionComparator;
9   import org.argeo.slc.client.ui.dist.utils.VersionComparator;
10  import org.eclipse.jface.viewers.Viewer;
11  import org.eclipse.jface.viewers.ViewerComparator;
12  
13  /** Specific comparator to enhance Distribution tree browsers */
14  public class DistTreeComparator extends ViewerComparator {
15  	private static final long serialVersionUID = -7386716562202568704L;
16  
17  	private VersionComparator vc = new VersionComparator();
18  	private NameVersionComparator nvc = new NameVersionComparator();
19  
20  	public int category(Object element) {
21  		if (element instanceof RepoElem)
22  			if (((RepoElem) element).inHome())
23  				// Home repository always first
24  				return 2;
25  			else
26  				return 5;
27  		else if (element instanceof WkspGroupElem)
28  			return 10;
29  		else if (element instanceof WorkspaceElem)
30  			return 15;
31  		else
32  			return 20;
33  	}
34  
35  	public int compare(Viewer viewer, Object e1, Object e2) {
36  		int cat1 = category(e1);
37  		int cat2 = category(e2);
38  
39  		if (cat1 != cat2) {
40  			return cat1 - cat2;
41  		}
42  
43  		String s1, s2;
44  
45  		if (e1 instanceof DistParentElem) {
46  			s1 = ((DistParentElem) e1).getName();
47  			s2 = ((DistParentElem) e2).getName();
48  		} else {
49  			s1 = e1.toString();
50  			s2 = e2.toString();
51  		}
52  
53  		if (e1 instanceof WorkspaceElem)
54  			// Reverse order for nameversions
55  			return nvc.compare(viewer, s2, s1);
56  		else if (e1 instanceof ModularDistVersionElem)
57  			// Reverse order for versions
58  			return vc.compare(viewer, s2, s1);
59  		else
60  			return s1.compareTo(s2);
61  	}
62  }