/* * Copyright (c) 2012, 2016 Eike Stepper (Berlin, Germany) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eike Stepper - initial API and implementation */ package org.eclipse.emf.cdo.internal.ui.history; /** * @author Eike Stepper */ public final class Segment { private final Track track; private final Branch branch; private final Commit mergeSource; private boolean complete; private long firstVisualTime; private long firstCommitTime; private long lastCommitTime; private Segment previousInTrack; private Segment nextInTrack; private Segment previousInBranch; private Segment nextInBranch; public Segment(Track track, Branch branch, Commit mergeSource) { this.track = track; this.branch = branch; this.mergeSource = mergeSource; } public Net getNet() { return track.getNet(); } public Track getTrack() { return track; } public Branch getBranch() { return branch; } public Commit getMergeSource() { return mergeSource; } public boolean isMerge() { return mergeSource != null; } public boolean isComplete() { return complete; } public long getFirstVisualTime() { return firstVisualTime; } public long getFirstCommitTime() { return firstCommitTime; } public long getLastCommitTime() { return lastCommitTime; } public Segment getPreviousInTrack() { return previousInTrack; } public Segment getNextInTrack() { return nextInTrack; } public Segment getPreviousInBranch() { return previousInBranch; } public Segment getNextInBranch() { return nextInBranch; } public boolean containsCommitTime(long time) { return time >= firstCommitTime && time <= lastCommitTime; } public boolean containsVisualTime(long time) { return time >= getFirstVisualTime() && time <= lastCommitTime; } @Override public String toString() { return "Segment[" + branch + " --> " + track + "]"; } void adjustVisualTime(long time, boolean adjustComplete) { if (isMerge()) { firstVisualTime = firstCommitTime; complete = true; return; } if (time < firstVisualTime) { firstVisualTime = time; } else if (firstVisualTime == 0) { Segment previousInBranch = getPreviousInBranch(); if (previousInBranch != null) { firstVisualTime = previousInBranch.getLastCommitTime(); complete = true; return; } Commit firstCommit = getNet().getFirstCommit(); if (firstCommit != null) { long baseCommitTime = branch.getBaseCommitTime(); if (baseCommitTime >= firstCommit.getTime()) { firstVisualTime = baseCommitTime; complete = true; return; } } firstVisualTime = time; } complete |= adjustComplete; } void adjustCommitTimes(long time) { adjustVisualTime(time, false); if (firstCommitTime == 0) { firstCommitTime = time; lastCommitTime = time; } else if (time < firstCommitTime) { firstCommitTime = time; } else if (time > lastCommitTime) { lastCommitTime = time; } } void setPreviousInTrack(Segment previousInTrack) { this.previousInTrack = previousInTrack; } void setNextInTrack(Segment nextInTrack) { this.nextInTrack = nextInTrack; } void setPreviousInBranch(Segment previousInBranch) { this.previousInBranch = previousInBranch; } void setNextInBranch(Segment nextInBranch) { this.nextInBranch = nextInBranch; } }