tikhomirov@148: /* tikhomirov@394: * Copyright (c) 2011-2012 TMate Software Ltd tikhomirov@148: * tikhomirov@148: * This program is free software; you can redistribute it and/or modify tikhomirov@148: * it under the terms of the GNU General Public License as published by tikhomirov@148: * the Free Software Foundation; version 2 of the License. tikhomirov@148: * tikhomirov@148: * This program is distributed in the hope that it will be useful, tikhomirov@148: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@148: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@148: * GNU General Public License for more details. tikhomirov@148: * tikhomirov@148: * For information on how to redistribute this software under tikhomirov@148: * the terms of a license other than GNU General Public License tikhomirov@148: * contact TMate Software at support@hg4j.com tikhomirov@148: */ tikhomirov@148: package org.tmatesoft.hg.core; tikhomirov@148: tikhomirov@403: import org.tmatesoft.hg.internal.ExceptionInfo; tikhomirov@275: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@275: import org.tmatesoft.hg.util.Path; tikhomirov@275: tikhomirov@148: /** tikhomirov@425: * Root class for all Hg4J checked exceptions. tikhomirov@148: * tikhomirov@148: * @author Artem Tikhomirov tikhomirov@148: * @author TMate Software Ltd. tikhomirov@148: */ tikhomirov@148: @SuppressWarnings("serial") tikhomirov@427: public abstract class HgException extends Exception { tikhomirov@403: tikhomirov@403: protected final ExceptionInfo extras = new ExceptionInfo(this); tikhomirov@275: tikhomirov@427: protected HgException(String reason) { tikhomirov@148: super(reason); tikhomirov@148: } tikhomirov@148: tikhomirov@427: protected HgException(String reason, Throwable cause) { tikhomirov@148: super(reason, cause); tikhomirov@148: } tikhomirov@148: tikhomirov@427: protected HgException(Throwable cause) { tikhomirov@148: super(cause); tikhomirov@148: } tikhomirov@148: tikhomirov@275: /** tikhomirov@368: * @return not {@link HgRepository#BAD_REVISION} only when revision index was supplied at the construction time tikhomirov@275: */ tikhomirov@367: public int getRevisionIndex() { tikhomirov@403: return extras.getRevisionIndex(); tikhomirov@275: } tikhomirov@275: tikhomirov@367: public HgException setRevisionIndex(int rev) { tikhomirov@403: return extras.setRevisionIndex(rev); tikhomirov@275: } tikhomirov@367: tikhomirov@396: public boolean isRevisionIndexSet() { tikhomirov@403: return extras.isRevisionIndexSet(); tikhomirov@396: } tikhomirov@396: tikhomirov@367: /** tikhomirov@275: * @return non-null only when revision was supplied at construction time tikhomirov@275: */ tikhomirov@275: public Nodeid getRevision() { tikhomirov@403: return extras.getRevision(); tikhomirov@275: } tikhomirov@275: tikhomirov@275: public HgException setRevision(Nodeid r) { tikhomirov@403: return extras.setRevision(r); tikhomirov@275: } tikhomirov@396: tikhomirov@396: public boolean isRevisionSet() { tikhomirov@403: return extras.isRevisionSet(); tikhomirov@396: } tikhomirov@275: tikhomirov@275: /** tikhomirov@275: * @return non-null only if file name was set at construction time tikhomirov@275: */ tikhomirov@275: public Path getFileName() { tikhomirov@403: return extras.getFileName(); tikhomirov@275: } tikhomirov@275: tikhomirov@275: public HgException setFileName(Path name) { tikhomirov@403: return extras.setFileName(name); tikhomirov@275: } tikhomirov@275: tikhomirov@320: @Override tikhomirov@320: public String toString() { tikhomirov@320: StringBuilder sb = new StringBuilder(super.toString()); tikhomirov@320: sb.append(' '); tikhomirov@320: sb.append('('); tikhomirov@403: extras.appendDetails(sb); tikhomirov@320: sb.append(')'); tikhomirov@320: return sb.toString(); tikhomirov@320: } tikhomirov@148: // /* XXX CONSIDER capability to pass extra information about errors */ tikhomirov@148: // public static class Status { tikhomirov@148: // public Status(String message, Throwable cause, int errorCode, Object extraData) { tikhomirov@148: // } tikhomirov@148: // } tikhomirov@148: }