/** * The TrackSegment with the less inner Segment is the smaller. Then one by one contained Segment are compared and the first difference is the comparison * result. * * @param seg1 * The left segment * @param seg2 * The right segment * @return a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second */ private int compareTracks(final TrackSegment seg1, final TrackSegment seg2) { final int sizeDifference = Integer.signum(seg1.getSegment().size() - seg2.getSegment().size()); if ((sizeDifference == 0) && (!seg2.getSegment().isEmpty())) { // Both are of the same size and are not empty int cpt = 0; final int size = seg2.getSegment().size(); int innerSegmentDifference; do { innerSegmentDifference = this.compare(seg1.getSegment().get(cpt), seg2.getSegment().get(cpt)); cpt++; } while ((innerSegmentDifference == 0) && (cpt < size)); // Return the signum of the first difference between two inner segments. return innerSegmentDifference; } return sizeDifference; }
/** * Lists all URI in a segment and its subsegments. * @param segment a segment * @returna list of all URI in this segment the last time this segment was processed */ protected synchronized static Set<String> listUri(final Segment segment) { final Set<String> buffered_uris = AbstractFactory.listUri(segment.getUri()); if (!buffered_uris.isEmpty()) { return buffered_uris; } final Set<String> set = Collections.synchronizedSet(new HashSet<String>()); set.add(segment.getUri()); if (segment instanceof TrackSegment){ final TrackSegment ts = (TrackSegment)segment; for (final Segment inner : ts.getSegment()) { set.addAll(listUri(inner)); } } return set; }
/** * Automatically set a valid <code>WebLabRI</code> to the created <code>Segment</code> using the <code>TrackSegment</code> to generate an unique id. Created * <code>Segment</code> will be added to the <code>TrackSegment</code>. * * @param <T> * The subclass of <code>Segment</code> to be created * @param track * the <code>TrackSegment</code> that will contains the created <code>Segment</code> * @param segClass * The class of the <code>Segment</code> to be created * @return a new instance of <code>segClass</code> with a valid <code>WebLabRI</code> and added to the <code>TrackSegment</code> */ public final static <T extends Segment> T createAndLinkSegment(final TrackSegment track, final Class<T> segClass) { final T segment; try { segment = segClass.newInstance(); } catch (final InstantiationException ie) { throw new WebLabResourceCreationException(WebLabResourceCreationException.EXCEPTION + segClass.getName(), ie); } catch (final IllegalAccessException iae) { throw new WebLabResourceCreationException(WebLabResourceCreationException.EXCEPTION + segClass.getName(), iae); } segment.setUri(AbstractFactory.createSegmentURIFor(track)); track.getSegment().add(segment); return segment; }