+package org.simantics.document.linking.report.templates;\r
+\r
+import java.util.Comparator;\r
+import java.util.List;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.utils.NameUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.document.linking.utils.SourceLinkUtil;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.utils.strings.AlphanumComparator;\r
+\r
+\r
+class ResourceNameComparator implements Comparator<Resource> {\r
+ protected ReadGraph graph;\r
+ protected Layer0 l0;\r
+ protected Resource model;\r
+ \r
+ public ResourceNameComparator(ReadGraph graph, Resource model) {\r
+ this.graph = graph;\r
+ this.l0 = Layer0.getInstance(graph);\r
+ this.model = model;\r
+ }\r
+ \r
+ @Override\r
+ public int compare(Resource r1, Resource r2) {\r
+ if (r1.equals(r2))\r
+ return 0;\r
+ try {\r
+ String l1 = getText(r1);\r
+ String l2 = getText(r2);\r
+ int c = AlphanumComparator.COMPARATOR.compare(l1, l2);\r
+ if (c == 0) {\r
+ if (r1.getResourceId() > r2.getResourceId())\r
+ return 1;\r
+ if (r1.getResourceId() < r2.getResourceId())\r
+ return -1;\r
+ return 0;\r
+ }\r
+ return c;\r
+ } catch (DatabaseException e) {\r
+ return 0;\r
+ }\r
+ \r
+ }\r
+ \r
+ public String getText(Resource r) throws DatabaseException {\r
+ String l1 = NameUtils.getSafeLabel(graph, r);\r
+ if (l1.length() == 0)\r
+ l1 = NameUtils.getSafeName(graph, r);\r
+ return l1;\r
+ }\r
+ \r
+ public List<Resource> getPath(Resource obj) throws DatabaseException {\r
+ return SourceLinkUtil.getPath(graph, model, obj);\r
+ }\r
+}
\ No newline at end of file