/* sbt -- Simple Build Tool * Copyright 2009,2010 Mark Harrah */ package sbt package impl import StringUtilities.nonEmpty trait DependencyBuilders { final implicit def toGroupID(groupID: String): GroupID = { nonEmpty(groupID, "Group ID") new GroupID(groupID) } final implicit def toRepositoryName(name: String): RepositoryName = { nonEmpty(name, "Repository name") new RepositoryName(name) } final implicit def moduleIDConfigurable(m: ModuleID): ModuleIDConfigurable = { require(m.configurations.isEmpty, "Configurations already specified for module " + m) new ModuleIDConfigurable(m) } } final class GroupID private[sbt] (groupID: String) { def % (artifactID: String) = groupArtifact(artifactID, CrossVersion.Disabled) def %% (artifactID: String): GroupArtifactID = groupArtifact(artifactID, CrossVersion.binary) @deprecated(deprecationMessage, "0.12.0") def %% (artifactID: String, crossVersion: String => String) = groupArtifact(artifactID, CrossVersion.binaryMapped(crossVersion)) @deprecated(deprecationMessage, "0.12.0") def %% (artifactID: String, alternatives: (String, String)*) = groupArtifact(artifactID, CrossVersion.binaryMapped(Map(alternatives: _*) orElse { case s => s })) private def groupArtifact(artifactID: String, cross: CrossVersion) = { nonEmpty(artifactID, "Artifact ID") new GroupArtifactID(groupID, artifactID, cross) } private[this] def deprecationMessage = """Use the cross method on the constructed ModuleID. For example: ("a" % "b" % "1").cross(...)""" } final class GroupArtifactID private[sbt] (groupID: String, artifactID: String, crossVersion: CrossVersion) { def % (revision: String): ModuleID = { nonEmpty(revision, "Revision") ModuleID(groupID, artifactID, revision).cross(crossVersion) } } final class ModuleIDConfigurable private[sbt] (moduleID: ModuleID) { def % (configuration: Configuration): ModuleID = %(configuration.name) def % (configurations: String): ModuleID = { nonEmpty(configurations, "Configurations") val c = configurations moduleID.copy(configurations = Some(c)) } } final class RepositoryName private[sbt] (name: String) { def at (location: String) = { nonEmpty(location, "Repository location") new MavenRepository(name, location) } }