]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/report/templates/PathComparator.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / report / templates / PathComparator.java
1 package org.simantics.document.linking.report.templates;
2
3 import java.util.Comparator;
4 import java.util.List;
5
6 import org.simantics.db.ReadGraph;
7 import org.simantics.db.Resource;
8 import org.simantics.db.common.utils.NameUtils;
9 import org.simantics.db.exception.DatabaseException;
10 import org.simantics.utils.strings.AlphanumComparator;
11
12 public class PathComparator implements Comparator<List<Resource>>{
13         
14         private ReadGraph graph;
15         
16         public PathComparator(ReadGraph graph) {
17                 this.graph = graph;
18         }
19         
20         @Override
21         public int compare(List<Resource> o1, List<Resource> o2) {
22                 int common = Math.min(o1.size(), o2.size());
23                 for (int i = 0; i < common; i++) {
24                         if (o1.get(i).equals(o2.get(i)))
25                                 continue;
26                         try {
27                                 Resource r1 = o1.get(i);
28                                 Resource r2 = o2.get(i);
29                                 String l1 = getText(r1);
30                                 String l2 = getText(r2);
31                                 int c = AlphanumComparator.COMPARATOR.compare(l1, l2);
32                                 if (c == 0) {
33                                         if (r1.getResourceId() > r2.getResourceId())
34                                                 return 1;
35                                         if (r1.getResourceId() < r2.getResourceId())
36                                                 return -1;
37                                         return 0;
38                                 }
39                                 return c;
40                         } catch (DatabaseException e) {
41                                 return 0;
42                         }
43                 }
44                 return o1.size() - o2.size();
45         }
46         
47         public String getText(Resource r) throws DatabaseException {
48                 String l1 = NameUtils.getSafeLabel(graph, r);
49                 if (l1.length() == 0)
50                         l1 = NameUtils.getSafeName(graph, r);
51                 return l1;
52         }
53
54 }