/* sbt -- Simple Build Tool
 * Copyright 2008 Mark Harrah
 */
package sbt

import java.io.File
import FileUtilities._

final case class class ProjectInfo extends java.lang.Object with NotNull with ScalaObject with ProductProjectInfo(java.io.FileprojectDirectory: java.io.FileFile, Iterable[sbt.Project]dependencies: Iterable[sbt.Project]Iterable[Project], Option[sbt.Project]parent: Option[sbt.Project]Option[Project]) extends NotNullNotNull
{
	val sbt.ProjectDirectoryprojectPath = sbt.ProjectDirectorynew sbt.ProjectDirectoryProjectDirectory(=> java.io.FileprojectDirectory)
	val sbt.PathbuilderPath = => sbt.ProjectDirectoryprojectPath (String)sbt.Path/ object sbt.ProjectInfoProjectInfo.=> java.lang.StringMetadataDirectoryName
}

private[sbt] sealed trait trait SetupResult extends java.lang.Object with NotNullSetupResult extends NotNullNotNull
private[sbt] final object object sbt.SetupDeclinedSetupDeclined extends sbt.SetupResultSetupResult
private[sbt] final class class SetupError extends java.lang.Object with sbt.SetupResult with ScalaObjectSetupError(val Stringmessage: StringString) extends sbt.SetupResultSetupResult
private[sbt] final object object sbt.AlreadySetupAlreadySetup extends sbt.SetupResultSetupResult
private[sbt] final class class SetupInfo extends java.lang.Object with sbt.SetupResult with ScalaObjectSetupInfo(val Stringname: StringString, val Option[sbt.Version]version: Option[sbt.Version]Option[Version], val Option[String]organization: Option[String]Option[String], val BooleaninitializeDirectories: BooleanBoolean) extends sbt.SetupResultSetupResult

object object sbt.ProjectInfoProjectInfo
{
	val java.lang.StringMetadataDirectoryName = java.lang.String("project")"project"
	private val java.lang.StringDefaultOrganization = java.lang.String("empty")"empty"
	
	def (sbt.ProjectInfo,sbt.Logger)sbt.SetupResultsetup(sbt.ProjectInfoinfo: sbt.ProjectInfoProjectInfo, sbt.Loggerlog: sbt.LoggerLogger): sbt.SetupResultSetupResult =
	{
		val java.io.FilebuilderDirectory = sbt.ProjectInfoinfo.=> sbt.PathbuilderPath.=> java.io.FileasFile
		sbt.SetupResultif(java.io.FilebuilderDirectory.()Booleanexists)
		{
			sbt.SetupResultif(java.io.FilebuilderDirectory.()BooleanisDirectory)
				object sbt.AlreadySetupAlreadySetup
			else
				sbt.SetupErrornew sbt.SetupErrorSetupError(java.lang.String("'")"'" (Any)java.lang.String+ java.io.FilebuilderDirectory.()java.lang.StringgetAbsolutePath (Any)java.lang.String+ java.lang.String("' is not a directory.")"' is not a directory.")
		}
		else
			(java.io.File,sbt.Logger)sbt.SetupResultsetupProject(sbt.ProjectInfoinfo.=> java.io.FileprojectDirectory, sbt.Loggerlog)
	}
	private def (java.io.File,sbt.Logger)sbt.SetupResultsetupProject(java.io.FileprojectDirectory: java.io.FileFile, sbt.Loggerlog: sbt.LoggerLogger): sbt.SetupResultSetupResult =
	{
		sbt.SetupResultif((String,Boolean)BooleanconfirmPrompt(java.lang.String("No project found. Create new project?")"No project found. Create new project?", Boolean(false)false))
		{
			val java.lang.Stringname = (String)java.lang.Stringtrim(object ConsoleConsole.(String,Any*)StringreadLine(java.lang.String("Project Name: ")"Project Name: "))
			sbt.SetupResultif(implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStringname.=> BooleanisEmpty)
				sbt.SetupErrornew sbt.SetupErrorSetupError(java.lang.String("Project not created: no name specified.")"Project not created: no name specified.")
			else
			{
				val java.lang.Stringorganization =
				{
					val java.lang.Stringorg = (String)java.lang.Stringtrim(object ConsoleConsole.(String,Any*)StringreadLine(java.lang.String("Organization [")"Organization [" (Any)java.lang.String+ => java.lang.StringDefaultOrganization (Any)java.lang.String+ java.lang.String("]: ")"]: "))
					java.lang.Stringif(implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStringorg.=> BooleanisEmpty)
						=> java.lang.StringDefaultOrganization
					else
						java.lang.Stringorg
				}
				(java.io.File,sbt.Logger)Option[sbt.Version]readVersion(java.io.FileprojectDirectory, sbt.Loggerlog) sbt.SetupResultmatch
				{
					sbt.SetupErrorcase object NoneNone => sbt.SetupErrornew sbt.SetupErrorSetupError(java.lang.String("Project not created: no version specified.")"Project not created: no version specified.")
					sbt.SetupResultcase Some(sbt.Versionversion) =>
						sbt.SetupResultif((String,sbt.Version,String)BooleanverifyCreateProject(java.lang.Stringname, sbt.Versionversion, java.lang.Stringorganization))
							sbt.SetupInfonew sbt.SetupInfoSetupInfo(java.lang.Stringname, (sbt.Version)Some[sbt.Version]Some(sbt.Versionversion), (java.lang.String)Some[java.lang.String]Some(java.lang.Stringorganization), Boolean(true)true)
						else
							object sbt.SetupDeclinedSetupDeclined
				}
			}
		}
		else
			object sbt.SetupDeclinedSetupDeclined
	}
	private def (String,sbt.Version,String)BooleanverifyCreateProject(Stringname: StringString, sbt.Versionversion: sbt.VersionVersion, Stringorganization: StringString): BooleanBoolean =
		(String,Boolean)BooleanconfirmPrompt(java.lang.String("Create new project ")"Create new project " (Any)java.lang.String+ Stringname (Any)java.lang.String+ java.lang.String(" ")" " (Any)java.lang.String+ sbt.Versionversion (Any)java.lang.String+ java.lang.String(" with organization ")" with organization " (Any)java.lang.String+ Stringorganization (Any)java.lang.String+java.lang.String(" ?")" ?", Boolean(true)true)
	
	private def (String,Boolean)BooleanconfirmPrompt(Stringquestion: StringString, BooleandefaultYes: BooleanBoolean) =
	{
		val java.lang.Stringchoices = java.lang.Stringif(BooleandefaultYes) java.lang.String(" (Y/n) ")" (Y/n) " else java.lang.String(" (y/N) ")" (y/N) "
		val java.lang.Stringanswer = (String)java.lang.Stringtrim(object ConsoleConsole.(String,Any*)StringreadLine(Stringquestion (Any)java.lang.String+ java.lang.Stringchoices))
		val List[java.lang.String]yes = java.lang.String("y")"y" (java.lang.String)List[java.lang.String]:: java.lang.String("yes")"yes" (java.lang.String)List[java.lang.String]:: (List[java.lang.String]if(BooleandefaultYes) (java.lang.String*)List[java.lang.String]List(java.lang.String("")"") else object NilNil)
		List[java.lang.String]yes.(Any)Booleancontains(java.lang.Stringanswer.()java.lang.StringtoLowerCase)
	}
	
	private def (java.io.File,sbt.Logger)Option[sbt.Version]readVersion(java.io.FileprojectDirectory: java.io.FileFile, sbt.Loggerlog: sbt.LoggerLogger): Option[sbt.Version]Option[Version] =
	{
		val java.lang.Stringversion = (String)java.lang.Stringtrim(object ConsoleConsole.(String,Any*)StringreadLine(java.lang.String("Version: ")"Version: "))
		Option[sbt.Version]if(implicit scala.Predef.stringWrapper : (String)scala.runtime.RichStringversion.=> BooleanisEmpty)
			object NoneNone
		else
		{
			object sbt.VersionVersion.(String)Either[String,sbt.Version]fromString(java.lang.Stringversion) Option[sbt.Version]match
			{
				Option[sbt.Version]case Left(StringerrorMessage) =>
				{
					sbt.Loggerlog.(=> String)Uniterror(java.lang.String("Invalid version: ")"Invalid version: " (Any)java.lang.String+ StringerrorMessage)
					(java.io.File,sbt.Logger)Option[sbt.Version]readVersion(java.io.FileprojectDirectory, sbt.Loggerlog)
				}
				Some[sbt.Version]case Right(sbt.Versionv) => (sbt.Version)Some[sbt.Version]Some(sbt.Versionv)
			}
		}
	}
	private def (String)java.lang.Stringtrim(Strings: StringString) = java.lang.Stringif(Strings (AnyRef)Boolean== Null(null)null) java.lang.String("")"" else Strings.()java.lang.Stringtrim
}