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

org.akhikhl.wuff.ModuleConfigurer.groovy Maven / Gradle / Ivy

/*
 * wuff
 *
 * Copyright 2014  Andrey Hihlovskiy.
 *
 * See the file "LICENSE" for copying and usage permission.
 */
package org.akhikhl.wuff

import org.gradle.api.Project
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.akhikhl.unpuzzle.PlatformConfig

/**
 *
 * @author akhikhl
 */
class ModuleConfigurer {

  protected static final Logger log = LoggerFactory.getLogger(ModuleConfigurer)

  private final Project project
  private final Expando delegate

  ModuleConfigurer(Project project) {
    this.project = project
    log.debug 'ModuleConfigurer {}: using eclipse version {}', project.name, project.effectiveWuff.selectedEclipseVersion
    delegate = new Expando()
    delegate.eclipseMavenGroup = project.eclipseMavenGroup
    delegate.supported_oses = PlatformConfig.supported_oses
    delegate.supported_archs = PlatformConfig.supported_archs
    delegate.supported_languages = PlatformConfig.supported_languages
    delegate.current_os = PlatformConfig.current_os
    delegate.current_arch = PlatformConfig.current_arch
    delegate.current_language = PlatformConfig.current_language
    delegate.supported_oses = PlatformConfig.supported_oses
    delegate.map_os_to_suffix = PlatformConfig.map_os_to_suffix
    delegate.map_os_to_filesystem_suffix = PlatformConfig.map_os_to_filesystem_suffix
    delegate.map_arch_to_suffix = PlatformConfig.map_arch_to_suffix
    delegate.current_os_suffix = PlatformConfig.current_os_suffix
    delegate.current_os_filesystem_suffix = PlatformConfig.current_os_filesystem_suffix
    delegate.current_arch_suffix = PlatformConfig.current_arch_suffix
    delegate.isLanguageFragment = PlatformConfig.&isLanguageFragment
    delegate.isPlatformFragment = PlatformConfig.&isPlatformFragment
    delegate.PluginUtils = PluginUtils
    delegate.project = project
  }

  private EclipseVersionConfig findVersionConfig(String versionString) {
    EclipseVersionConfig versionConfig = project.effectiveWuff.versionConfigs[versionString]
    if(versionConfig == null)
      log.error 'Eclipse version {} is not configured', versionString
    return versionConfig
  }

  void configureModules(Iterable modules) {
    EclipseVersionConfig versionConfig = findVersionConfig(project.effectiveWuff.selectedEclipseVersion)
    if(versionConfig != null)
      for(String moduleName in modules)
        configureModule(versionConfig, moduleName)
  }

  private void configureModule(EclipseVersionConfig versionConfig, String moduleName) {
    assert versionConfig != null
    for(String baseVersion in versionConfig.baseVersions) {
      EclipseVersionConfig baseVersionConfig = findVersionConfig(baseVersion)
      if(baseVersionConfig != null)
        configureModule(baseVersionConfig, moduleName)
    }
    List closureList = versionConfig.lazyModules[moduleName]
    for(Closure closure in closureList) {
      closure = closure.rehydrate(delegate, closure.owner, closure.thisObject)
      closure.resolveStrategy = Closure.DELEGATE_FIRST
      closure()
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy