import groovy.util.logging.Slf4j
import org.commonjava.maven.ext.common.model.Project
import org.commonjava.maven.ext.core.groovy.PMEBaseScript
import org.commonjava.maven.ext.core.groovy.PMEInvocationPoint
import org.commonjava.maven.ext.core.groovy.InvocationStage
import org.commonjava.maven.ext.core.groovy.BaseScript

import java.util.regex.Matcher
import java.util.regex.Pattern

@PMEInvocationPoint(invocationPoint = InvocationStage.LAST)
@PMEBaseScript BaseScript pme

@Slf4j
public class ForceComRedhatBaVersionLast {

    Project project

    def execute() {
        def String newPropertyValue = project.getVersion()
        def String versionComRedhatBaProperty = 'version.com.redhat.ba'
        def String microVersionComRedhatBaProperty = 'micro.version.com.redhat.ba'

        project.getModel().addProperty(versionComRedhatBaProperty, newPropertyValue)
        log.info("property {} set to {} ", versionComRedhatBaProperty, newPropertyValue)

        def Pattern versionPattern = Pattern.compile("^(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)");
        def Matcher matcher = versionPattern.matcher(project.getVersion());
        while (matcher.find()) {
            def String versionWithoutSuffix = matcher.group()
            project.getModel().addProperty(microVersionComRedhatBaProperty, versionWithoutSuffix)
            log.info("property {} set to {} ", microVersionComRedhatBaProperty, versionWithoutSuffix)
        }
    }
}

def ForceComRedhatBaVersionLast forceComRedhatBaVersionLast = new ForceComRedhatBaVersionLast(project: pme.getProject())
forceComRedhatBaVersionLast.execute()