All Downloads are FREE. Search and download functionalities are using the official Maven repository.

flair.gradle.structures.fdt.FdtRunDebugConfigurationsStructure.groovy Maven / Gradle / Ivy

package flair.gradle.structures.fdt

import flair.gradle.cli.Adl
import flair.gradle.cli.ICli
import flair.gradle.dependencies.Config
import flair.gradle.extensions.FlairProperty
import flair.gradle.extensions.IExtensionManager
import flair.gradle.plugins.PluginManager
import flair.gradle.structures.IStructure
import flair.gradle.utils.Platform
import org.gradle.api.Project
import org.gradle.api.file.FileTree

/**
 * @author SamYStudiO ( [email protected] )
 */
public class FdtRunDebugConfigurationsStructure implements IStructure
{
	private Project project

	@Override
	public void create( Project project , File source )
	{
		this.project = project

		IExtensionManager extensionManager = project.flair as IExtensionManager

		project.file( ".settings/launch" ).mkdirs( )

		List list = new ArrayList<>( )

		project.file( ".settings/launch" ).listFiles( ).each { list.add( it.name ) }

		String template = project.file( "${ source.path }/fdt/run_debug_template.xml" ).text
		//String gradleTemplate = project.file( "${ source.path }/fdt/gradle_launch_template.xml" ).text

		IExtensionManager flair = project.flair as IExtensionManager

		flair.allActivePlatformVariants.each { variant ->

			String name = "flair_" + variant.name

			if( list.indexOf( name + ".launch" ) < 0 )
			{
				String platform = ""

				switch( variant.platform )
				{
					case Platform.IOS:
						platform = "iOS"
						break

					case Platform.ANDROID:
						platform = "Android"
						break

					case Platform.DESKTOP:
						platform = "AirDesktop"
						break
				}

				String app = buildPathFromRoot( project.file( "${ project.buildDir.path }/${ variant.name }/app_descriptor.xml" ).path )
				String mainClassName = ( extensionManager.getFlairProperty( variant , FlairProperty.COMPILER_MAIN_CLASS ) as String ).split( "\\." ).last( ) + ".as"
				String mainClass

				project.configurations.findAll { it.name.toLowerCase( ).contains( Config.SOURCE.name ) }.each {

					it.files.each { file ->

						FileTree tree = project.fileTree( file )

						tree.each { classFile ->

							if( classFile.name == mainClassName ) mainClass = buildPathFromRoot( classFile.path )
						}
					}
				}

				//String mainClass = buildPathFromRoot( project.file( "${ project.buildDir.path }/${ variant.name }/classes/${ ( extensionManager.getFlairProperty( variant , FlairProperty.COMPILER_MAIN_CLASS ) as String ).split( "\\." ).join( "/" ) }.as" ).path )
				String sdk = extensionManager.getFlairProperty( variant , FlairProperty.PACKAGE_PLATFORM_SDK ) as String ?: ""
				String screenSize = flair.getFlairProperty( variant , FlairProperty.ADL_SCREEN_SIZE ) ?: ""
				String adlArguments = flair.getFlairProperty( variant , FlairProperty.ADL_PARAMETERS ) ?: ""
				String profileName = variant.name
				String sampler = flair.getFlairProperty( variant , FlairProperty.PACKAGE_SAMPLER )
				//String gradlePrepareTask = TaskDefinition.PREPARE_PACKAGE.name + variant.getName( NamingType.CAPITALIZE )

				/*String content = gradleTemplate.replaceAll( "\\{gradlePrepareTask\\}" , gradlePrepareTask )
						.replaceAll( "\\{projectName\\}" , project.name )

				File f = project.file( ".settings/launch/${ gradlePrepareTask }.launch" )
				f.createNewFile( )
				f.write( content )*/

				List constants = new ArrayList( )

				PluginManager.getCurrentPlatforms( project ).each {

					constants.add( "" )
				}

				extensionManager.allActivePlatformProductFlavors.each {

					constants.add( "= 0 }\"/>" )
				}

				extensionManager.allActivePlatformBuildTypes.each {

					constants.add( "" )
				}

				String pubId = extensionManager.getFlairProperty( variant , FlairProperty.ADL_PUB_ID )
				boolean noDebug = extensionManager.getFlairProperty( variant , FlairProperty.ADL_NO_DEBUG )
				boolean atLogin = extensionManager.getFlairProperty( variant , FlairProperty.ADL_AT_LOGIN )
				List parameters = extensionManager.getFlairProperty( variant , FlairProperty.ADL_PARAMETERS ) as List

				ICli cli = new Adl( )
				cli.addArgument( "-profile" )
				cli.addArgument( variant.platform == Platform.DESKTOP ? "extendedDesktop" : "mobileDevice" )

				if( pubId ) cli.addArgument( "-pubid ${ pubId }" )
				if( noDebug ) cli.addArgument( "-noDebug" )
				if( atLogin ) cli.addArgument( "-atlogin" )

				if( variant.platform != Platform.DESKTOP )
				{
					cli.addArgument( "-screensize" )
					cli.addArgument( extensionManager.getFlairProperty( variant , FlairProperty.ADL_SCREEN_SIZE ).toString( ) )
					cli.addArgument( "-XscreenDPI" )
					cli.addArgument( extensionManager.getFlairProperty( variant , FlairProperty.ADL_SCREEN_DPI ).toString( ) )
					cli.addArgument( "-XversionPlatform" )
					cli.addArgument( variant.platform == Platform.IOS ? "IOS" : "AND" )
				}

				cli.addArgument( "-extdir" )
				cli.addArgument( project.file( "${ project.buildDir.path }/${ variant.name }/extracted_extensions" ).path )

				cli.addArgument( "${ project.buildDir.path }/${ variant.name }/package/app_descriptor.xml" )
				cli.addArgument( project.file( "${ project.buildDir.path }/${ variant.name }/package" ).path )

				if( parameters.size( ) )
				{
					cli.addArgument( "--" )
					cli.addArguments( parameters )
				}

				String content = template.replaceAll( "\\{app\\}" , app )
						.replaceAll( "\\{screenSize\\}" , screenSize )
						.replaceAll( "\\{adlArguments\\}" , adlArguments )
						.replaceAll( "\\{adl\\}" , cli.arguments.join( " " ).replaceAll( "\\\\" , "/" ) )
						.replaceAll( "\\{constants\\}" , constants.join( System.lineSeparator( ) ) )
						.replaceAll( "\\{mainClass\\}" , mainClass )
						.replaceAll( "\\{sdk\\}" , sdk )
						.replaceAll( "\\{projectName\\}" , project.name )
						.replaceAll( "\\{sampler\\}" , sampler )
						.replaceAll( "\\{platform\\}" , platform )
						.replaceAll( "\\{profileName\\}" , profileName )
				//.replaceAll( "\\{gradlePrepareTask\\}" , gradlePrepareTask )

				File f = project.file( ".settings/launch/${ name }.launch" )
				f.createNewFile( )
				f.write( content )
			}
			else
			{
				//need to update compiler constants

				List constants = new ArrayList( )


				PluginManager.getCurrentPlatforms( project ).each {

					constants.add( "" )
				}

				extensionManager.allActivePlatformProductFlavors.each {

					constants.add( "= 0 }\"/>" )
				}

				extensionManager.allActivePlatformBuildTypes.each {

					constants.add( "" )
				}

				File f = project.file( ".settings/launch/${ name }.launch" )

				String content = f.text
				content = content.replaceAll( /[\s\S]*<\/listAttribute>[\s]*${ System.lineSeparator( ) }${ constants.join( System.lineSeparator( ) ) }${ System.lineSeparator( ) }${ System.lineSeparator( ) }= 0 ) it.delete( ) }
	}

	private String buildPathFromRoot( String path )
	{
		path = path.replaceAll( "\\\\" , "/" )
		String rootPath = project.rootDir.path.replaceAll( "\\\\" , "/" ) + "/"

		if( path.startsWith( rootPath ) )
		{
			return path.replace( rootPath , "" )
		}
		else
		{
			int count = 0

			while( !path.startsWith( rootPath ) && rootPath.indexOf( "/" ) > 0 )
			{
				List a = rootPath.split( "/" ).toList( )

				a.pop( )

				rootPath = a.join( "/" )

				count++
			}

			if( path.startsWith( rootPath ) )
			{
				String up = ""

				for( int i = 0; i < count; i++ ) up += "../"

				return up + path.replace( rootPath + "/" , "" )
			}
		}

		return path.replaceAll( "\\\\" , "/" )
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy