tikhomirov@403: /* tikhomirov@403: * Copyright (c) 2012 TMate Software Ltd tikhomirov@403: * tikhomirov@403: * This program is free software; you can redistribute it and/or modify tikhomirov@403: * it under the terms of the GNU General Public License as published by tikhomirov@403: * the Free Software Foundation; version 2 of the License. tikhomirov@403: * tikhomirov@403: * This program is distributed in the hope that it will be useful, tikhomirov@403: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@403: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@403: * GNU General Public License for more details. tikhomirov@403: * tikhomirov@403: * For information on how to redistribute this software under tikhomirov@403: * the terms of a license other than GNU General Public License tikhomirov@403: * contact TMate Software at support@hg4j.com tikhomirov@403: */ tikhomirov@403: package org.tmatesoft.hg.internal; tikhomirov@403: tikhomirov@403: import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; tikhomirov@403: tikhomirov@403: import java.io.File; tikhomirov@403: tikhomirov@403: import org.tmatesoft.hg.core.Nodeid; tikhomirov@403: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@403: import org.tmatesoft.hg.util.Path; tikhomirov@403: tikhomirov@403: /** tikhomirov@403: * Extras to record with exception to describe it better. tikhomirov@403: * XXX perhaps, not only with exception, may utilize it with status object? tikhomirov@403: * tikhomirov@403: * @author Artem Tikhomirov tikhomirov@403: * @author TMate Software Ltd. tikhomirov@403: */ tikhomirov@403: public class ExceptionInfo { tikhomirov@403: protected final T owner; tikhomirov@403: protected int revNumber = BAD_REVISION; tikhomirov@403: protected Nodeid revision; tikhomirov@403: protected Path filename; tikhomirov@403: protected File localFile; tikhomirov@403: tikhomirov@403: /** tikhomirov@403: * @param owner instance to return from setters tikhomirov@403: */ tikhomirov@403: public ExceptionInfo(T owner) { tikhomirov@403: this.owner = owner; tikhomirov@403: } tikhomirov@403: tikhomirov@403: /** tikhomirov@403: * @return not {@link HgRepository#BAD_REVISION} only when revision index was supplied at the construction time tikhomirov@403: */ tikhomirov@403: public int getRevisionIndex() { tikhomirov@403: return revNumber; tikhomirov@403: } tikhomirov@403: tikhomirov@403: public T setRevisionIndex(int rev) { tikhomirov@403: revNumber = rev; tikhomirov@403: return owner; tikhomirov@403: } tikhomirov@403: tikhomirov@403: public boolean isRevisionIndexSet() { tikhomirov@403: return revNumber != BAD_REVISION; tikhomirov@403: } tikhomirov@403: tikhomirov@403: /** tikhomirov@403: * @return non-null only when revision was supplied at construction time tikhomirov@403: */ tikhomirov@403: public Nodeid getRevision() { tikhomirov@403: return revision; tikhomirov@403: } tikhomirov@403: tikhomirov@403: public T setRevision(Nodeid r) { tikhomirov@403: revision = r; tikhomirov@403: return owner; tikhomirov@403: } tikhomirov@403: tikhomirov@403: public boolean isRevisionSet() { tikhomirov@403: return revision != null; tikhomirov@403: } tikhomirov@403: tikhomirov@403: /** tikhomirov@403: * @return non-null only if file name was set at construction time tikhomirov@403: */ tikhomirov@403: public Path getFileName() { tikhomirov@403: return filename; tikhomirov@403: } tikhomirov@403: tikhomirov@403: public T setFileName(Path name) { tikhomirov@403: filename = name; tikhomirov@403: return owner; tikhomirov@403: } tikhomirov@403: tikhomirov@403: public T setFile(File file) { tikhomirov@403: localFile = file; tikhomirov@403: return owner; tikhomirov@403: } tikhomirov@403: tikhomirov@403: /** tikhomirov@403: * @return file object that causes troubles, or null if specific file is unknown tikhomirov@403: */ tikhomirov@403: public File getFile() { tikhomirov@403: return localFile; tikhomirov@403: } tikhomirov@403: tikhomirov@403: public StringBuilder appendDetails(StringBuilder sb) { tikhomirov@403: if (filename != null) { tikhomirov@403: sb.append("path:'"); tikhomirov@403: sb.append(filename); tikhomirov@403: sb.append('\''); tikhomirov@403: sb.append(';'); tikhomirov@403: sb.append(' '); tikhomirov@403: } tikhomirov@403: sb.append("rev:"); tikhomirov@403: if (revNumber != BAD_REVISION) { tikhomirov@403: sb.append(revNumber); tikhomirov@403: if (revision != null) { tikhomirov@403: sb.append(':'); tikhomirov@403: } tikhomirov@403: } tikhomirov@403: if (revision != null) { tikhomirov@403: sb.append(revision.shortNotation()); tikhomirov@403: } tikhomirov@403: if (localFile != null) { tikhomirov@403: sb.append(';'); tikhomirov@403: sb.append(' '); tikhomirov@403: sb.append(" file:"); tikhomirov@403: sb.append(localFile.getPath()); tikhomirov@403: sb.append(','); tikhomirov@403: if (localFile.exists()) { tikhomirov@403: sb.append("EXISTS"); tikhomirov@403: } else { tikhomirov@403: sb.append("DOESN'T EXIST"); tikhomirov@403: } tikhomirov@403: } tikhomirov@403: return sb; tikhomirov@403: } tikhomirov@403: }