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

import java.io.{File, Writer}

object object sbt.DotGraphDotGraph
{
	def (sbt.CompileAnalysis,sbt.Path,sbt.Logger)Option[String]apply(sbt.CompileAnalysisanalysis: sbt.CompileAnalysisCompileAnalysis, sbt.PathoutputDirectory: sbt.PathPath, sbt.Loggerlog: sbt.LoggerLogger) =
	{
		val java.io.FileoutputDir = sbt.PathoutputDirectory.=> java.io.FileasFile
		
		def [Key, Value](String,String,Iterable[(Key, scala.collection.Set[Value])],(Key) => String,(Value) => String)Option[String]generateGraph[>: Nothing <: AnyKey, >: Nothing <: AnyValue](StringfileName: StringString, StringgraphName: StringString, Iterable[(Key, scala.collection.Set[Value])]graph: Iterable[(Key, scala.collection.Set[Value])]Iterable[(Key, scala.collection.Set[Value])],
			(Key) => StringkeyToString: Key => String, (Value) => StringvalueToString: Value => String) =
		{
			object sbt.FileUtilitiesFileUtilities.(java.io.File,sbt.Logger)((java.io.Writer) => Option[String])Option[String]write((java.io.File,java.lang.String)java.io.Filenew java.io.FileFile(java.io.FileoutputDir, StringfileName), sbt.Loggerlog)
			{
				(java.io.Writerwriter: java.io.WriterWriter) =>
				{
					def (String)UnitwriteLine(Stringline: StringString) = object sbt.FileUtilitiesFileUtilities.(java.io.Writer,String)UnitwriteLine(java.io.Writerwriter, Stringline)
					(String)UnitwriteLine(java.lang.String("digraph ")"digraph " (Any)java.lang.String+ StringgraphName (Any)java.lang.String+ java.lang.String(" {")" {")
					for( (((Key, scala.collection.Set[Value])) => Unit)Unit(KeydependsOn, scala.collection.Set[Value]dependants) <- Iterable[(Key, scala.collection.Set[Value])]graph; ((Value) => Unit)Unitdependant <- scala.collection.Set[Value]dependants)
						(String)UnitwriteLine((Value)StringvalueToString(Valuedependant) (Any)java.lang.String+ java.lang.String(" -> ")" -> " (Any)java.lang.String+ (Key)StringkeyToString(KeydependsOn))
					(String)UnitwriteLine(java.lang.String("}")"}")
					object NoneNone
				}
			}
		}
		object sbt.FileUtilitiesFileUtilities.(java.io.File,sbt.Logger)Option[String]createDirectory(java.io.FileoutputDir, sbt.Loggerlog) (=> Option[String])Option[String]orElse
		(String,String,Iterable[(sbt.Path, scala.collection.Set[sbt.Path])],(sbt.Path) => String,(sbt.Path) => String)Option[String]generateGraph(object sbt.BasicAnalysisBasicAnalysis.=> java.lang.StringDependenciesFileName, java.lang.String("dependencies")"dependencies", sbt.CompileAnalysisanalysis.=> Iterable[(sbt.Path, scala.collection.Set[sbt.Path])]allDependencies,
			(sbt.Path)java.lang.StringsourceToString, (sbt.Path)java.lang.StringsourceToString) (=> Option[String])Option[String]orElse
		(String,String,Iterable[(java.io.File, scala.collection.Set[sbt.Path])],(java.io.File) => String,(sbt.Path) => String)Option[String]generateGraph(object sbt.BasicAnalysisBasicAnalysis.=> java.lang.StringExternalDependenciesFileName, java.lang.String("externalDependencies")"externalDependencies", sbt.CompileAnalysisanalysis.=> Iterable[(java.io.File, scala.collection.Set[sbt.Path])]allExternalDependencies,
			(java.io.File)java.lang.StringfileToString, (sbt.Path)java.lang.StringsourceToString)
	}
	private def (sbt.Path)java.lang.StringsourceToString(sbt.Pathsource: sbt.PathPath) = (java.io.File)java.lang.StringfileToString(sbt.Pathsource.=> java.io.FileasFile)
	private def (java.io.File)java.lang.StringfileToString(java.io.Filefile: java.io.FileFile) =
	{
		val java.lang.StringrawName = java.io.Filefile.()java.lang.StringgetName
		val java.lang.Stringname =
			java.lang.Stringif(java.lang.StringrawName.(java.lang.String)BooleanendsWith(java.lang.String(".scala")".scala"))
				java.lang.StringrawName.(Int,Int)java.lang.Stringsubstring(Int(0)0, java.lang.StringrawName.()Intlength (Int)Int- java.lang.String(".scala")".scala".()Intlength)
			else
				java.lang.StringrawName
		java.lang.String(""")"\"" (Any)java.lang.String+ java.lang.Stringname (Any)java.lang.String+ java.lang.String(""")"\""
	}
}