Mercurial > jhg
comparison src/org/tmatesoft/hg/util/Path.java @ 229:1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 31 May 2011 05:23:07 +0200 |
| parents | 1a7a9a20e1f9 |
| children | a415fe296a50 |
comparison
equal
deleted
inserted
replaced
| 228:fffe4f882248 | 229:1ec6b327a6ac |
|---|---|
| 13 * For information on how to redistribute this software under | 13 * For information on how to redistribute this software under |
| 14 * the terms of a license other than GNU General Public License | 14 * the terms of a license other than GNU General Public License |
| 15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
| 16 */ | 16 */ |
| 17 package org.tmatesoft.hg.util; | 17 package org.tmatesoft.hg.util; |
| 18 | |
| 19 import java.util.Collection; | |
| 18 | 20 |
| 19 /** | 21 /** |
| 20 * Identify repository files (not String nor io.File). Convenient for pattern matching. Memory-friendly. | 22 * Identify repository files (not String nor io.File). Convenient for pattern matching. Memory-friendly. |
| 21 * | 23 * |
| 22 * @author Artem Tikhomirov | 24 * @author Artem Tikhomirov |
| 73 } | 75 } |
| 74 @Override | 76 @Override |
| 75 public int hashCode() { | 77 public int hashCode() { |
| 76 return path.hashCode(); | 78 return path.hashCode(); |
| 77 } | 79 } |
| 80 | |
| 81 public enum CompareResult { | |
| 82 Same, Unrelated, Nested, Parent, /* perhaps, also ImmediateParent, DirectChild? */ | |
| 83 } | |
| 84 | |
| 85 /* | |
| 86 * a/file and a/dir ? | |
| 87 */ | |
| 88 public CompareResult compareWith(Path another) { | |
| 89 if (another == null) { | |
| 90 return CompareResult.Unrelated; // XXX perhaps, IAE? | |
| 91 } | |
| 92 if (another == this || (another.length() == length() && equals(another))) { | |
| 93 return CompareResult.Same; | |
| 94 } | |
| 95 if (path.startsWith(another.path)) { | |
| 96 return CompareResult.Nested; | |
| 97 } | |
| 98 if (another.path.startsWith(path)) { | |
| 99 return CompareResult.Parent; | |
| 100 } | |
| 101 return CompareResult.Unrelated; | |
| 102 } | |
| 78 | 103 |
| 79 public static Path create(String path) { | 104 public static Path create(String path) { |
| 80 if (path == null) { | 105 if (path == null) { |
| 81 throw new IllegalArgumentException(); | 106 throw new IllegalArgumentException(); |
| 82 } | 107 } |
| 90 /** | 115 /** |
| 91 * Path filter. | 116 * Path filter. |
| 92 */ | 117 */ |
| 93 public interface Matcher { | 118 public interface Matcher { |
| 94 boolean accept(Path path); | 119 boolean accept(Path path); |
| 120 | |
| 121 final class Any implements Matcher { | |
| 122 public boolean accept(Path path) { return true; } | |
| 123 } | |
| 124 class Composite implements Matcher { | |
| 125 private final Path.Matcher[] elements; | |
| 126 | |
| 127 public Composite(Collection<Path.Matcher> matchers) { | |
| 128 elements = matchers.toArray(new Path.Matcher[matchers.size()]); | |
| 129 } | |
| 130 | |
| 131 public boolean accept(Path path) { | |
| 132 for (Path.Matcher m : elements) { | |
| 133 if (m.accept(path)) { | |
| 134 return true; | |
| 135 } | |
| 136 } | |
| 137 return false; | |
| 138 } | |
| 139 } | |
| 95 } | 140 } |
| 96 | 141 |
| 97 /** | 142 /** |
| 98 * Factory for paths | 143 * Factory for paths |
| 99 */ | 144 */ |
