package com.intellij.vcs.log.data;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.CommitId;
import com.intellij.vcs.log.Hash;
import com.intellij.vcs.log.VcsFullCommitDetails;
import com.intellij.vcs.log.VcsUser;
import com.intellij.vcs.log.impl.VcsUserImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
/**
* Fake {@link com.intellij.vcs.log.impl.VcsCommitMetadataImpl} implementation that is used to indicate that details are not ready for the moment,
* they are being retrieved from the VCS.
*
* @author Kirill Likhodedov
*/
public class LoadingDetails implements VcsFullCommitDetails {
private static final VcsUserImpl STUB_USER = new VcsUserImpl("", "");
private static final String LOADING = "Loading...";
@NotNull private final Computable<CommitId> myCommitIdComputable;
private final long myLoadingTaskIndex;
@Nullable private volatile CommitId myCommitId;
public LoadingDetails(@NotNull Computable<CommitId> commitIdComputable, long loadingTaskIndex) {
myCommitIdComputable = commitIdComputable;
myLoadingTaskIndex = loadingTaskIndex;
}
protected CommitId getCommitId() {
if (myCommitId == null) {
myCommitId = myCommitIdComputable.compute();
}
return myCommitId;
}
public long getLoadingTaskIndex() {
return myLoadingTaskIndex;
}
@NotNull
@Override
public Collection<Change> getChanges() {
return ContainerUtil.emptyList();
}
@NotNull
@Override
public String getFullMessage() {
return "";
}
@NotNull
@Override
public VirtualFile getRoot() {
return getCommitId().getRoot();
}
@NotNull
@Override
public String getSubject() {
return LOADING;
}
@NotNull
@Override
public VcsUser getAuthor() {
return STUB_USER;
}
@NotNull
@Override
public VcsUser getCommitter() {
return STUB_USER;
}
@Override
public long getAuthorTime() {
return -1;
}
@Override
public long getCommitTime() {
return -1;
}
@NotNull
@Override
public Hash getId() {
return getCommitId().getHash();
}
@NotNull
@Override
public List<Hash> getParents() {
return ContainerUtil.emptyList();
}
@Override
public long getTimestamp() {
return -1;
}
}