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