sbt/util/io/PathMapper.scala

49 lines
1.6 KiB
Scala
Raw Normal View History

/* sbt -- Simple Build Tool
* Copyright 2008, 2009 Mark Harrah
*/
2010-06-09 06:56:07 +02:00
package sbt
import java.io.File
trait PathMapper extends NotNull
{
def apply(file: File): String
2010-06-09 06:56:07 +02:00
def apply(files: Set[File]): Iterable[(File,String)] = files.view.map(f => (f,apply(f)))
}
2010-06-09 06:56:07 +02:00
final case class RelativePathMapper(base: File) extends PMapper(file => IO.relativize(base, file).getOrElse(file.getPath))
final case object BasicPathMapper extends PMapper(_.getPath)
final case object FlatPathMapper extends PMapper(_.getName)
class PMapper(val f: File => String) extends PathMapper
{
def apply(file: File): String = f(file)
}
object PathMapper
{
val basic: PathMapper = BasicPathMapper
def relativeTo(base: File): PathMapper = RelativePathMapper(base)
2009-12-05 16:31:06 +01:00
def rebase(oldBase: File, newBase: File): PathMapper =
2010-06-09 06:56:07 +02:00
new PMapper(file => if(file == oldBase) "." else IO.relativize(oldBase, file).getOrElse(error(file + " not a descendent of " + oldBase)))
val flat = FlatPathMapper
def apply(f: File => String): PathMapper = new PMapper(f)
}
trait FileMapper extends NotNull
{
def apply(file: File): File
2010-06-09 06:56:07 +02:00
def apply(files: Set[File]): Iterable[(File,File)] = files.view.map(f => (f,apply(f)))
}
class FMapper(f: File => File) extends FileMapper
{
def apply(file: File) = f(file)
}
object FileMapper
{
def basic(newDirectory: File) = new FMapper(file => new File(newDirectory, file.getPath))
2009-12-05 16:31:06 +01:00
def rebase(oldBase: File, newBase: File): FileMapper =
{
val paths = PathMapper.rebase(oldBase, newBase)
new FMapper(file => new File(newBase, paths(file)))
}
def flat(newDirectory: File) = new FMapper(file => new File(newDirectory, file.getName))
def apply(f: File => File) = new FMapper(f)
}