package com.lassekoskela.maven; import static org.apache.commons.lang3.StringUtils.deleteWhitespace; import static org.apache.commons.lang3.StringUtils.isBlank; import static org.apache.commons.lang3.StringUtils.split; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.maven.AbstractMavenLifecycleParticipant; import org.apache.maven.execution.ExecutionListener; import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Profile; import com.lassekoskela.maven.buildevents.BuildEventListener; import com.lassekoskela.maven.buildevents.BuildEventLog; import com.lassekoskela.maven.buildevents.ExecutionListenerChain; import com.lassekoskela.maven.logging.Log; public class MavenExtension extends AbstractMavenLifecycleParticipant { public boolean shouldBeActive(MavenSession session, String activationPropertyKey, String activationProfileKey) { boolean shouldBeActive = Boolean.valueOf(getActivationProperty(session, activationPropertyKey)); if (shouldBeActive) { return shouldBeActive; } List<String> activationProfiles = listActivationProfiles(session, activationProfileKey); for (String currentlyActive : getAllActiveProfileNames(session)) if (activationProfiles.contains(currentlyActive)) shouldBeActive = true; return shouldBeActive; } protected List<String> listActivationProfiles(MavenSession session, String activationProfileKey) { return Arrays.asList(split(deleteWhitespace(getActivationProfilesProperty(session, activationProfileKey)), ',')); } protected static String getActivationProfilesProperty(MavenSession session, String activationProfileKey) { return session.getCurrentProject().getProperties().getProperty(activationProfileKey, "default"); } private String getActivationProperty(MavenSession session, String activationPropertyKey) { return session.getCurrentProject().getProperties().getProperty(activationPropertyKey, Boolean.FALSE.toString()); } public boolean isActivationProfilesPropertySet(MavenSession session, String activationProfileKey) { return !isBlank(session.getCurrentProject().getProperties().getProperty(activationProfileKey)); } protected List<String> getAllActiveProfileNames(MavenSession session) { List<String> names = new ArrayList<String>(); for (Profile profile : session.getCurrentProject().getActiveProfiles()) { names.add(profile.getId()); } return names; } protected BuildEventListener createListener(Log log) { return new BuildEventListener(new BuildEventLog(log)); } public String getProperty(MavenSession s, String key, String defaultValue) { return s.getUserProperties().getProperty(key, defaultValue); } protected void registerExecutionListener(MavenSession session, ExecutionListener listener) { MavenExecutionRequest request = session.getRequest(); ExecutionListener original = request.getExecutionListener(); ExecutionListener chain = new ExecutionListenerChain(original, listener); request.setExecutionListener(chain); } }