
quarkus.narayana.narayana-to-quarkus.windup.groovy Maven / Gradle / Ivy
The newest version!
package quarkus.narayana
import org.jboss.windup.config.GraphRewrite
import org.jboss.windup.config.metadata.TechnologyReference
import org.jboss.windup.config.operation.iteration.AbstractIterationOperation
import org.jboss.windup.config.query.Query
import org.jboss.windup.config.query.QueryPropertyComparisonType
import org.jboss.windup.graph.model.FileLocationModel
import org.jboss.windup.graph.model.WindupConfigurationModel
import org.jboss.windup.graph.model.resource.FileModel
import org.jboss.windup.graph.service.GraphService
import org.jboss.windup.graph.service.WindupConfigurationService
import org.jboss.windup.reporting.category.IssueCategory
import org.jboss.windup.reporting.category.IssueCategoryRegistry
import org.jboss.windup.reporting.config.Hint
import org.jboss.windup.reporting.config.Link
import org.jboss.windup.rules.apps.java.condition.SourceMode
import org.ocpsoft.rewrite.context.EvaluationContext
final IssueCategory mandatoryIssueCategory = new IssueCategoryRegistry().getByID(IssueCategoryRegistry.MANDATORY)
ruleSet("narayana-to-quarkus-groovy")
.addSourceTechnology(new TechnologyReference("narayana", null))
.addTargetTechnology(new TechnologyReference("quarkus", null))
.addRule()
.when(SourceMode.isDisabled(),
Query.fromType(FileModel)
.withProperty(FileModel.IS_DIRECTORY, Boolean.TRUE)
.withProperty(FileModel.FILE_PATH, QueryPropertyComparisonType.REGEX, ".*/com/arjuna/ats/arjuna\$"))
.perform(new AbstractIterationOperation() {
void perform(GraphRewrite event, EvaluationContext context, FileModel payload) {
final String sourceBasePath = payload.getFilePath().replaceAll("/com/arjuna/ats/arjuna\$", "")
final String dependencyJarName = sourceBasePath.substring(sourceBasePath.lastIndexOf("/") + 1)
WindupConfigurationModel windupConfigurationModel = WindupConfigurationService.getConfigurationModel(event.getGraphContext())
boolean packageComesFromAnalyzedApplication = false
windupConfigurationModel.getInputPaths().each {
if (!packageComesFromAnalyzedApplication && it.filePath.endsWith(dependencyJarName)) packageComesFromAnalyzedApplication = true
}
if (!packageComesFromAnalyzedApplication) return
final String targetFolderPath = sourceBasePath +"/io/quarkus/narayana/jta/runtime"
final boolean foundQuarkusExtensionFolder = Query.fromType(FileModel)
.withProperty(FileModel.IS_DIRECTORY, Boolean.TRUE)
.withProperty(FileModel.FILE_PATH, targetFolderPath).as("target_folder").evaluate(event, context)
if (foundQuarkusExtensionFolder) return
final GraphService fileLocationService = new GraphService<>(event.getGraphContext(), FileLocationModel.class)
final FileLocationModel folderLocationModel = fileLocationService.create()
folderLocationModel.setFile(payload)
folderLocationModel.setColumnNumber(1)
folderLocationModel.setLineNumber(1)
folderLocationModel.setLength(1)
folderLocationModel.setSourceSnippit("Folder Match")
((Hint) Hint.titled("Replace the 'narayana-jta' dependency with Quarkus 'quarkus-narayana-jta' extension")
.withText("""A folder path related to a package from the `org.jboss.narayana.jta:narayana-jta` dependency has been found.
Replace the `org.jboss.narayana.jta:narayana-jta` dependency with the Quarkus dependency `io.quarkus:quarkus-narayana-jta` in the application's dependencies management system (Maven, Gradle).
Further information in the link below.""")
.withIssueCategory(mandatoryIssueCategory)
.with(Link.to("Quarkus - Guide", "https://quarkus.io/guides/transaction"))
.withEffort(1)
).performParameterized(event, context, folderLocationModel)
}
})
.withId("quarkus-narayana-jta-groovy-00000")
.addRule()
.when(SourceMode.isDisabled(),
Query.fromType(FileModel)
.withProperty(FileModel.IS_DIRECTORY, Boolean.TRUE)
.withProperty(FileModel.FILE_PATH, QueryPropertyComparisonType.REGEX, ".*/org/jboss/stm\$"))
.perform(new AbstractIterationOperation() {
void perform(GraphRewrite event, EvaluationContext context, FileModel payload) {
final String sourceBasePath = payload.getFilePath().replaceAll("/org/jboss/stm\$", "")
final String dependencyJarName = sourceBasePath.substring(sourceBasePath.lastIndexOf("/") + 1)
WindupConfigurationModel windupConfigurationModel = WindupConfigurationService.getConfigurationModel(event.getGraphContext())
boolean packageComesFromAnalyzedApplication = false
windupConfigurationModel.getInputPaths().each {
if (!packageComesFromAnalyzedApplication && it.filePath.endsWith(dependencyJarName)) packageComesFromAnalyzedApplication = true
}
if (!packageComesFromAnalyzedApplication) return
final String targetFolderPath = sourceBasePath +"/io/quarkus/narayana/stm/runtime"
final boolean foundQuarkusExtensionFolder = Query.fromType(FileModel)
.withProperty(FileModel.IS_DIRECTORY, Boolean.TRUE)
.withProperty(FileModel.FILE_PATH, targetFolderPath).as("target_folder").evaluate(event, context)
if (foundQuarkusExtensionFolder) return
final GraphService fileLocationService = new GraphService<>(event.getGraphContext(), FileLocationModel.class)
final FileLocationModel folderLocationModel = fileLocationService.create()
folderLocationModel.setFile(payload)
folderLocationModel.setColumnNumber(1)
folderLocationModel.setLineNumber(1)
folderLocationModel.setLength(1)
folderLocationModel.setSourceSnippit("Folder Match")
((Hint) Hint.titled("Replace the 'stm' dependency with Quarkus 'quarkus-narayana-stm' extension")
.withText("""A folder path related to a package from the `org.jboss.narayana.stm:stm` dependency has been found.
Replace the `org.jboss.narayana.stm:stm` dependency with the Quarkus dependency `io.quarkus:quarkus-narayana-stm` in the application's dependencies management system (Maven, Gradle).
Further information in the link below.""")
.withIssueCategory(mandatoryIssueCategory)
.with(Link.to("Quarkus - Guide", "https://quarkus.io/guides/software-transactional-memory"))
.withEffort(1)
).performParameterized(event, context, folderLocationModel)
}
})
.withId("quarkus-narayana-stm-groovy-00000")
© 2015 - 2025 Weber Informatics LLC | Privacy Policy