Mercurial > hg4j
diff src/org/tmatesoft/hg/util/Path.java @ 431:12f668401613
FIXMEs: awkward API refactored, what need to be internal got hidden; public aspects got captured in slim interfaces
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 29 Mar 2012 20:54:04 +0200 |
parents | 863356c2847e |
children | 072b5f3ed0c8 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/util/Path.java Thu Mar 29 18:48:23 2012 +0200 +++ b/src/org/tmatesoft/hg/util/Path.java Thu Mar 29 20:54:04 2012 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011 TMate Software Ltd + * Copyright (c) 2011-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 @@ -187,24 +187,36 @@ * Factory for paths */ public interface Source { - Path path(String p); + Path path(CharSequence p); } - + /** * Straightforward {@link Source} implementation that creates new Path instance for each supplied string + * and optionally piping through a converter to get e.g. cached instance */ public static class SimpleSource implements Source { private final PathRewrite normalizer; + private final Convertor<Path> convertor; + + public SimpleSource() { + this(new PathRewrite.Empty(), null); + } public SimpleSource(PathRewrite pathRewrite) { - if (pathRewrite == null) { - throw new IllegalArgumentException(); - } - normalizer = pathRewrite; + this(pathRewrite, null); } - public Path path(String p) { - return Path.create(normalizer.rewrite(p)); + public SimpleSource(PathRewrite pathRewrite, Convertor<Path> pathConvertor) { + normalizer = pathRewrite; + convertor = pathConvertor; + } + + public Path path(CharSequence p) { + Path rv = Path.create(normalizer.rewrite(p)); + if (convertor != null) { + return convertor.mangle(rv); + } + return rv; } } }