Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/ExceptionInfo.java @ 423:9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Fri, 23 Mar 2012 22:51:18 +0100 | 
| parents | 2747b0723867 | 
| children | 2bf6f917a7e5 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 422:5d1cc7366d04 | 423:9c9c442b5f2e | 
|---|---|
| 15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com | 
| 16 */ | 16 */ | 
| 17 package org.tmatesoft.hg.internal; | 17 package org.tmatesoft.hg.internal; | 
| 18 | 18 | 
| 19 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; | 19 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; | 
| 20 import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION; | |
| 21 import static org.tmatesoft.hg.repo.HgRepository.TIP; | |
| 22 import static org.tmatesoft.hg.repo.HgRepository.WORKING_COPY; | |
| 20 | 23 | 
| 21 import java.io.File; | 24 import java.io.File; | 
| 22 | 25 | 
| 23 import org.tmatesoft.hg.core.Nodeid; | 26 import org.tmatesoft.hg.core.Nodeid; | 
| 24 import org.tmatesoft.hg.repo.HgRepository; | 27 import org.tmatesoft.hg.repo.HgRepository; | 
| 31 * @author Artem Tikhomirov | 34 * @author Artem Tikhomirov | 
| 32 * @author TMate Software Ltd. | 35 * @author TMate Software Ltd. | 
| 33 */ | 36 */ | 
| 34 public class ExceptionInfo<T> { | 37 public class ExceptionInfo<T> { | 
| 35 protected final T owner; | 38 protected final T owner; | 
| 36 protected int revNumber = BAD_REVISION; | 39 protected Integer revNumber = null; | 
| 37 protected Nodeid revision; | 40 protected Nodeid revision; | 
| 38 protected Path filename; | 41 protected Path filename; | 
| 39 protected File localFile; | 42 protected File localFile; | 
| 43 // next two make sense only when revNumber was set | |
| 44 private int rangeLeftBoundary = BAD_REVISION, rangeRightBoundary = BAD_REVISION; | |
| 40 | 45 | 
| 41 /** | 46 /** | 
| 42 * @param owner instance to return from setters | 47 * @param owner instance to return from setters | 
| 43 */ | 48 */ | 
| 44 public ExceptionInfo(T owner) { | 49 public ExceptionInfo(T owner) { | 
| 47 | 52 | 
| 48 /** | 53 /** | 
| 49 * @return not {@link HgRepository#BAD_REVISION} only when revision index was supplied at the construction time | 54 * @return not {@link HgRepository#BAD_REVISION} only when revision index was supplied at the construction time | 
| 50 */ | 55 */ | 
| 51 public int getRevisionIndex() { | 56 public int getRevisionIndex() { | 
| 52 return revNumber; | 57 return revNumber == null ? HgRepository.BAD_REVISION : revNumber; | 
| 53 } | 58 } | 
| 54 | 59 | 
| 55 public T setRevisionIndex(int rev) { | 60 public T setRevisionIndex(int rev) { | 
| 56 revNumber = rev; | 61 revNumber = rev; | 
| 57 return owner; | 62 return owner; | 
| 58 } | 63 } | 
| 59 | 64 | 
| 60 public boolean isRevisionIndexSet() { | 65 public boolean isRevisionIndexSet() { | 
| 61 return revNumber != BAD_REVISION; | 66 return revNumber != null; | 
| 62 } | 67 } | 
| 63 | 68 | 
| 64 /** | 69 /** | 
| 65 * @return non-null only when revision was supplied at construction time | 70 * @return non-null only when revision was supplied at construction time | 
| 66 */ | 71 */ | 
| 98 * @return file object that causes troubles, or <code>null</code> if specific file is unknown | 103 * @return file object that causes troubles, or <code>null</code> if specific file is unknown | 
| 99 */ | 104 */ | 
| 100 public File getFile() { | 105 public File getFile() { | 
| 101 return localFile; | 106 return localFile; | 
| 102 } | 107 } | 
| 108 | |
| 109 public T setRevisionIndexBoundary(int revisionIndex, int rangeLeft, int rangeRight) { | |
| 110 setRevisionIndex(revisionIndex); | |
| 111 rangeLeftBoundary = rangeLeft; | |
| 112 rangeRightBoundary = rangeRight; | |
| 113 return owner; | |
| 114 } | |
| 103 | 115 | 
| 104 public StringBuilder appendDetails(StringBuilder sb) { | 116 public StringBuilder appendDetails(StringBuilder sb) { | 
| 105 if (filename != null) { | 117 if (filename != null) { | 
| 106 sb.append("path:'"); | 118 sb.append("path:'"); | 
| 107 sb.append(filename); | 119 sb.append(filename); | 
| 108 sb.append('\''); | 120 sb.append('\''); | 
| 109 sb.append(';'); | 121 sb.append(';'); | 
| 110 sb.append(' '); | 122 sb.append(' '); | 
| 111 } | 123 } | 
| 112 sb.append("rev:"); | 124 sb.append("rev:"); | 
| 113 if (revNumber != BAD_REVISION) { | 125 boolean needNodeid = true; | 
| 114 sb.append(revNumber); | 126 if (isRevisionIndexSet()) { | 
| 115 if (revision != null) { | 127 if (rangeLeftBoundary != BAD_REVISION || rangeRightBoundary != BAD_REVISION) { | 
| 116 sb.append(':'); | 128 String sr; | 
| 129 switch (getRevisionIndex()) { | |
| 130 case BAD_REVISION: | |
| 131 sr = "UNKNOWN"; break; | |
| 132 case TIP: | |
| 133 sr = "TIP"; break; | |
| 134 case WORKING_COPY: | |
| 135 sr = "WORKING-COPY"; break; | |
| 136 case NO_REVISION: | |
| 137 sr = "NO REVISION"; break; | |
| 138 default: | |
| 139 sr = String.valueOf(getRevisionIndex()); | |
| 140 } | |
| 141 sb.append(String.format("%s is not from [%d..%d]", sr, rangeLeftBoundary, rangeRightBoundary)); | |
| 142 } else { | |
| 143 sb.append(getRevisionIndex()); | |
| 144 if (isRevisionIndexSet()) { | |
| 145 sb.append(':'); | |
| 146 sb.append(getRevision().shortNotation()); | |
| 147 needNodeid = false; | |
| 148 } | |
| 117 } | 149 } | 
| 118 } | 150 } | 
| 119 if (revision != null) { | 151 if (isRevisionSet() && needNodeid) { | 
| 120 sb.append(revision.shortNotation()); | 152 sb.append(getRevision().shortNotation()); | 
| 121 } | 153 } | 
| 122 if (localFile != null) { | 154 if (localFile != null) { | 
| 123 sb.append(';'); | 155 sb.append(';'); | 
| 124 sb.append(' '); | 156 sb.append(' '); | 
| 125 sb.append(" file:"); | 157 sb.append(" file:"); | 
