DEV Community

Query Filter
Query Filter

Posted on

path10

apply plugin: 'java'

// --- Validate JAVA_HOME ---
def javaHome = System.getenv('JAVA_HOME')
if (!javaHome) {
    throw new GradleException("JAVA_HOME environment variable not set.")
}
def toolsJarFile = file("$javaHome/lib/tools.jar")
if (!toolsJarFile.exists()) {
    throw new GradleException("JAVA_HOME does not point to a JDK, couldn't find tools.jar: $toolsJarFile")
    logger.warn("JAVA_HOME is not pointing to JDK, couldn't find tools.jar $toolsJarFile.absolutePath")
}

// --- CPLS instances definition ---
def cpls_instances_apac = [

    global_refdata: [
        asset: 'cash', region: 'APAC', country: 'HNK', env: 'dev',
        instance: 'global_refdata_cpls', appName: 'GLOBAL.HNK.GLOBAL.REFDATA.CPLS',
        temp: 'global_refdata_cpls', debugPort: 8890
    ],

    cash_cpls_mys_sales: [
        asset: 'cash', region: 'APAC', country: 'MYS', env: 'dev',
        instance: 'cash_cpls_mys_sales', appName: 'GLOBAL.MYS.COMET.CPLS.CASH_CPLS.SALES',
        temp: 'cash_cpls_mys_sales', debugPort: 8890
    ],

    cash_cpls_jpn_trdr1: [
        asset: 'cash', region: 'APAC', country: 'JPN', env: 'dev',
        instance: 'cash_cpls_jpn_trdr1', appName: 'GLOBAL.JPN.COMET.CPLS.CASH_CPLS.TRDR',
        temp: 'cash_cpls_jpn_trdr1', debugPort: 8890
    ],

    deriv_cpls_jpn_prop1: [
        asset: 'derivatives', region: 'APAC', country: 'JPN', env: 'dev',
        instance: 'deriv_cpls_jpn_prop1', appName: 'GLOBAL.JPN.COMET.CPLS.DERIV_PROP_CPLS1',
        temp: 'deriv_cpls_jpn_prop1', debugPort: 8890
    ],

    cash_cpls_sls1: [
        app: 'CPLS', asset: 'cash', region: 'US', env: 'dev',
        instance: 'cash_cpls_sls1', appName: 'GLOBAL.NA.US.COMET.CPLS.CPLS_CASH.CASH_CPLS_INSTANCE1',
        temp: 'cash_cpls_sls1', debugPort: 9797
    ],

    emea_local_dev_cpls: [
        app: 'CPLS', asset: 'multi', region: 'EMEA', env: 'dev',
        instance: 'emea_cpls_sls102', appName: 'GLOBAL.COMET.EMEA.CASHSLS.CPLS',
        temp: 'emea_cpls_sls102', topic_instance: 'local_dev_100',
        instance_id: 201110100, isDevLocal: true, debugPort: 8741
    ],

    cash_position_1_qa: [
        app: 'CPLS', asset: 'cash', region: 'US', env: 'qa',
        instance: 'cash_position_1', appName: 'GLOBAL.US.COMET.POSITION.POSITIONINSTANCE1',
        temp: 'cash_position_1', isDevLocal: false, debugPort: 9798
    ],

    cash_position_1_dev: [
        app: 'CPLS', asset: 'cash', region: 'US', env: 'dev',
        instance: 'cash_position_1', appName: 'GLOBAL.US.COMET.POSITION.POSITIONINSTANCE1',
        temp: 'cash_position_1', isDevLocal: true, debugPort: 9799
    ]
]

// --- Prepare library directory ---
task prepareLibDir(type: Copy) {
    from configurations.sharedlib
    into 'lib'
    rename('libZeusCcDt.*.so', 'libZeusCcDt.so')
    rename('libCcDt.*.so', 'libCcDt.so')
}

// --- Apply library path to all JavaExec tasks ---
tasks.withType(JavaExec) {
    systemProperty "java.library.path", file("lib").absolutePath
    environment "LD_LIBRARY_PATH", file("lib").absolutePath
}

// --- Dynamic CPLS JavaExec tasks ---
cpls_instances_apac.each { task_name, instance_options ->

    if (!tasks.findByName(task_name)) {

        task(task_name, type: JavaExec, dependsOn: [prepareLibDir, classes]) {

            // --- Task-local variables ---
            def asset        = instance_options.asset
            def region       = instance_options.region
            def country      = instance_options.country ?: ''
            def env          = instance_options.env
            def instanceName = instance_options.instance
            def tempDir      = instance_options.temp
            def appName      = instance_options.appName
            def isDevLocal   = instance_options.isDevLocal?.toString()?.toBoolean() ?: false
            def app          = instance_options.app ?: 'CPLS_ASIA'
            def debugPort    = instance_options.debugPort
            def topic_instance = instance_options.topic_instance ?: '102'
            def instance_id    = instance_options.instance_id ?: null

            logger.info "task:$task_name started execution"

            // --- File paths ---
            def cfgFileName = 'CFG.' + appName + '.xml'
            def devConfigServiceFile = "devConfigService.xml"
            def cplsConfigFile = file("src/main/config/quantum/$asset/$region/$country/$env/cplsConfig.xml")
            def cplsFile = file("src/main/config/dds/$asset/$region/$country/$env/$instanceName/$cfgFileName")
            def cplsDir = file("src/main/config/quantum/$asset/$region/$country/$env/$instanceName")
            def loggingConfig = file("src/main/config/quantum/$asset/$region/$country/$env/logging.properties.txt")
            def cpacs = files(
                "src/main/config/quantum/$asset/$region/$country/$env/cpacs/cpacs.xml",
                "src/main/config/quantum/$asset/$region/$country/$env/cpacs.xml"
            )
            def cpacsFile = cpacs.find { it.exists() }
            def aleConfig = file("src/main/config/quantum/$asset/$region/$country/$env/alefcg")
            def securityFile = file("src/main/config/resources/security.dat")

            // --- Tmp dir setup ---
            def setTmpDir = {
                if (System.properties['os.name'].toLowerCase().contains('linux')) {
                    System.properties['java.io.tmpdir'] = '/opt/lgohome'
                    logger.info "Setting [java.io.tmpdir] to [${System.properties['java.io.tmpdir']}]"
                } else if (System.properties['os.name'].toLowerCase().contains('windows')) {
                    System.properties['java.io.tmpdir'] = 'C:/temp'
                    logger.info "Setting [java.io.tmpdir] to [${System.properties['java.io.tmpdir']}]"
                }
            }

            def buildFileSystem = { param ->
                ['dds', 'log', 'store'].each { dir ->
                    new File("${System.properties['java.io.tmpdir']}/$param/$dir").mkdirs()
                    println "Created directory: ${System.properties['java.io.tmpdir']}/$param/$dir"
                }
            }

            def prepareJvmArgs = {
                def argsList = [
                    "-Xms256M",
                    "-Xmx512M",
                    "-Xss256k",
                    "-Djava.library.path=${file('lib').absolutePath}",
                    "-Dinstance=$instanceName",
                    "-Dapplication=$appName",
                    "-Ddds.tmpdir=${System.properties['java.io.tmpdir']}/$tempDir/dds/",
                    "-Dcpls.path.store.dir=${System.properties['java.io.tmpdir']}/$tempDir/store/",
                    "-Djava.io.tmpdir=${System.properties['java.io.tmpdir']}/$tempDir/log/"
                ]
                if (isDevLocal) {
                    argsList += "-Ddev_local=true"
                    logger.info "Adding -Ddev_local=true"
                }
                return argsList
            }

            def setupDevConfig = {
                copy {
                    def fromFile = "src/main/config/quantum/$asset/$region/$env/$instanceName/configService.xml"
                    def toFile = "${System.properties['java.io.tmpdir']}/$tempDir/dds/"
                    from fromFile
                    into toFile
                    filter { line ->
                        line.replaceAll('<file-cache location="[/-a-zA-Z0-9_]*\\/>',
                                        "<file-cache location=\"$toFile\"/>")
                    }
                    rename('configService.xml', 'devConfigService.xml')
                    println "Copied and filtered configService.xml to devConfigService.xml"
                }
            }

            // --- Classpath ---
            def instanceClasspath = files(
                "src/main/config/quantum/$asset/$region/$country/$env",
                "src/main/config/quantum/$asset/$region/$country/",
                "src/main/config/quantum/$asset/$region/$country/$env/$instanceName",
                "src/main/config/dds/$asset/$region/$country/$env/$instanceName",
                "src/main/config",
                toolsJarFile
            )

            def quantumJarFile = sourceSets.main.runtimeClasspath.findAll {
                it.toPath().fileName.toString().endsWith('.jar') &&
                it.toPath().fileName.toString().contains("quantum")
            }

            classpath = files(instanceClasspath) + files(quantumJarFile) + files(sourceSets.main.runtimeClasspath + files("${System.properties['java.io.tmpdir']}/$tempDir/dds") - files(quantumJarFile))

            // --- doFirst ---
            doFirst {
                setTmpDir()
                buildFileSystem(tempDir)
                jvmArgs += prepareJvmArgs()
                if (isDevLocal) {
                    setupDevConfig()
                }

                // Print classpath exactly as original
                classpath.each { println "classpath: $it" }

                // Print JVM args exactly as original
                jvmArgs.each { println "arg -> $it" }
            }

            // --- Main class ---
            main = 'com.citi.DebugLauncher'

            // --- Application args ---
            args 'file://' + file("src/main/config/quantum/$asset/$region/$country/$env"),
                 instanceName,
                 'dummy'

            workingDir = file('src/main/config')
            standardInput = System.in

            logger.info "task:$task_name completes execution"
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

Top comments (0)