Skip to content

Commit

Permalink
feat(gradle): Use BuildServices for displaying the banner
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmiray committed Dec 29, 2022
1 parent fd38afe commit 29e24c9
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 60 deletions.
Expand Up @@ -18,67 +18,69 @@
package org.jreleaser.jdks.gradle.plugin

import groovy.transform.CompileStatic
import org.gradle.BuildAdapter
import org.gradle.BuildResult
import org.gradle.api.Project
import org.gradle.api.services.BuildService
import org.gradle.api.services.BuildServiceParameters

import java.text.MessageFormat

/**
*
* @author Andres Almiray
* @since 0.3.0
*/
@CompileStatic
final class Banner {
private final ResourceBundle bundle = ResourceBundle.getBundle(Banner.name)
private final String productVersion = bundle.getString('product.version')
private final String productId = bundle.getString('product.id')
private final String productName = bundle.getString('product.name')
private final String banner = MessageFormat.format(bundle.getString('product.banner'), productName, productVersion)
private final List<String> visited = []
abstract class Banner implements BuildService<Params> {
private static final String ORG_KORDAMP_BANNER = 'org.kordamp.banner'

private static final Banner BANNER = new Banner()
private String productVersion
private String productId
private final List<String> projectNames = []

private Banner() {
// noop
interface Params extends BuildServiceParameters {
}

static void display(Project project) {
if (BANNER.visited.contains(project.rootProject.name)) {
return
}
BANNER.visited.add(project.rootProject.name)
project.gradle.addBuildListener(new BuildAdapter() {
@Override
void buildFinished(BuildResult result) {
BANNER.visited.clear()
}
})
void display(Project project) {
if (checkIfVisited(project)) return

ResourceBundle bundle = ResourceBundle.getBundle(Banner.name)
productVersion = bundle.getString('product.version')
productId = bundle.getString('product.id')
String productName = bundle.getString('product.name')
String banner = MessageFormat.format(bundle.getString('product.banner'), productName, productVersion)

boolean printBanner = null == System.getProperty(ORG_KORDAMP_BANNER) || Boolean.getBoolean(ORG_KORDAMP_BANNER)

File parent = new File(project.gradle.gradleUserHomeDir, 'caches')
File markerFile = BANNER.getMarkerFile(parent)
File markerFile = getMarkerFile(parent)
if (!markerFile.exists()) {
markerFile.parentFile.mkdirs()
markerFile.text = '1'
println(BANNER.banner)
if (printBanner) println(banner)
} else {
try {
int count = Integer.parseInt(markerFile.text)
if (count < 3) {
println(BANNER.banner)
if (printBanner) println(banner)
}
markerFile.text = (count + 1) + ''
} catch (NumberFormatException e) {
markerFile.text = '1'
println(BANNER.banner)
if (printBanner) println(banner)
}
}
}

private boolean checkIfVisited(Project project) {
if (projectNames.contains(project.rootProject.name)) {
return true
}
projectNames.add(project.rootProject.name)
return false
}

private File getMarkerFile(File parent) {
new File(parent,
'jreleaser' +
'kordamp' +
File.separator +
productId +
File.separator +
Expand Down
Expand Up @@ -28,6 +28,7 @@ import org.gradle.api.NamedDomainObjectFactory
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.Directory
import org.gradle.api.logging.LogLevel
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.Delete
Expand All @@ -50,7 +51,11 @@ class JdksPlugin implements Plugin<Project> {

@Override
void apply(Project project) {
Banner.display(project)
if (project.gradle.startParameter.logLevel != LogLevel.QUIET) {
project.gradle.sharedServices
.registerIfAbsent('jdks-banner', Banner, { spec -> })
.get().display(project)
}

NamedDomainObjectContainer<JdkImpl> jdkContainer = project.objects.domainObjectContainer(JdkImpl,
new NamedDomainObjectFactory<JdkImpl>() {
Expand Down
Expand Up @@ -18,67 +18,69 @@
package org.jreleaser.gradle.plugin

import groovy.transform.CompileStatic
import org.gradle.BuildAdapter
import org.gradle.BuildResult
import org.gradle.api.Project
import org.gradle.api.services.BuildService
import org.gradle.api.services.BuildServiceParameters

import java.text.MessageFormat

/**
*
* @author Andres Almiray
* @since 0.1.0
*/
@CompileStatic
final class Banner {
private final ResourceBundle bundle = ResourceBundle.getBundle(Banner.name)
private final String productVersion = bundle.getString('product.version')
private final String productId = bundle.getString('product.id')
private final String productName = bundle.getString('product.name')
private final String banner = MessageFormat.format(bundle.getString('product.banner'), productName, productVersion)
private final List<String> visited = []
abstract class Banner implements BuildService<Params> {
private static final String ORG_KORDAMP_BANNER = 'org.kordamp.banner'

private static final Banner BANNER = new Banner()
private String productVersion
private String productId
private final List<String> projectNames = []

private Banner() {
// noop
interface Params extends BuildServiceParameters {
}

static void display(Project project) {
if (BANNER.visited.contains(project.rootProject.name)) {
return
}
BANNER.visited.add(project.rootProject.name)
project.gradle.addBuildListener(new BuildAdapter() {
@Override
void buildFinished(BuildResult result) {
BANNER.visited.clear()
}
})
void display(Project project) {
if (checkIfVisited(project)) return

ResourceBundle bundle = ResourceBundle.getBundle(Banner.name)
productVersion = bundle.getString('product.version')
productId = bundle.getString('product.id')
String productName = bundle.getString('product.name')
String banner = MessageFormat.format(bundle.getString('product.banner'), productName, productVersion)

boolean printBanner = null == System.getProperty(ORG_KORDAMP_BANNER) || Boolean.getBoolean(ORG_KORDAMP_BANNER)

File parent = new File(project.gradle.gradleUserHomeDir, 'caches')
File markerFile = BANNER.getMarkerFile(parent)
File markerFile = getMarkerFile(parent)
if (!markerFile.exists()) {
markerFile.parentFile.mkdirs()
markerFile.text = '1'
println(BANNER.banner)
if (printBanner) println(banner)
} else {
try {
int count = Integer.parseInt(markerFile.text)
if (count < 3) {
println(BANNER.banner)
if (printBanner) println(banner)
}
markerFile.text = (count + 1) + ''
} catch (NumberFormatException e) {
markerFile.text = '1'
println(BANNER.banner)
if (printBanner) println(banner)
}
}
}

private boolean checkIfVisited(Project project) {
if (projectNames.contains(project.rootProject.name)) {
return true
}
projectNames.add(project.rootProject.name)
return false
}

private File getMarkerFile(File parent) {
new File(parent,
'jreleaser' +
'kordamp' +
File.separator +
productId +
File.separator +
Expand Down
Expand Up @@ -39,7 +39,9 @@ class JReleaserPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
if (project.gradle.startParameter.logLevel != LogLevel.QUIET) {
Banner.display(project)
project.gradle.sharedServices
.registerIfAbsent('jreleaser-banner', Banner, { spec -> })
.get().display(project)
} else {
System.setProperty(JRELEASER_QUIET, 'true')
}
Expand Down

0 comments on commit 29e24c9

Please sign in to comment.