diff src/org/tmatesoft/hg/internal/ExceptionInfo.java @ 403:2747b0723867

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