001/* 002 * The contents of this file are subject to the license and copyright 003 * detailed in the LICENSE and NOTICE files at the root of the source 004 * tree. 005 */ 006package org.fcrepo.http.commons.api.rdf; 007 008import java.util.Comparator; 009 010import org.apache.jena.graph.Triple; 011import org.apache.jena.shared.PrefixMapping; 012 013/** 014 * Comparator to sort a list of Quads by subject, predicate, and object 015 * to ensure a consistent order for human-readable output 016 * 017 * @author awoods 018 */ 019public class TripleOrdering implements Comparator<Triple> { 020 021 private final PrefixMapping prefixMapping; 022 023 /** 024 * When sorting predicates, take into account the given PrefixMapping 025 * @param prefixMapping the prefix mapping 026 */ 027 public TripleOrdering(final PrefixMapping prefixMapping) { 028 super(); 029 030 this.prefixMapping = prefixMapping; 031 } 032 033 @Override 034 public int compare(final Triple left, final Triple right) { 035 036 final int s = 037 left.getSubject().toString(prefixMapping, false).compareTo( 038 right.getSubject().toString(prefixMapping, false)); 039 040 if (s != 0) { 041 return s; 042 } 043 044 final int p = 045 left.getPredicate().toString(prefixMapping, false).compareTo( 046 right.getPredicate().toString(prefixMapping, false)); 047 048 if (p != 0) { 049 return p; 050 } 051 052 return left.getObject().toString(false).compareTo( 053 right.getObject().toString(false)); 054 055 } 056 057}