package com.lassekoskela.maven;
import java.io.File;
import org.apache.maven.AbstractMavenLifecycleParticipant;
import org.apache.maven.MavenExecutionException;
import org.apache.maven.execution.MavenSession;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import com.lassekoskela.maven.buildevents.BuildEventListener;
import com.lassekoskela.maven.buildevents.BuildEventLog;
import com.lassekoskela.maven.logging.ConsoleLog;
import com.lassekoskela.maven.logging.FileLog;
import com.lassekoskela.maven.logging.Log;
@Component(role = AbstractMavenLifecycleParticipant.class, hint = "buildevents")
public class BuildEventsExtension extends MavenExtension {
static final String OUTPUT_MODE = "duration.output";
static final String OUTPUT_FILE = "duration.output.file";
static final String DEFAULT_FILE_DESTINATION = "target/durations.log";
static final String ACTIVATION_PROFILE_KEY = "maven-build-utils.activationProfiles";
static final String ACTIVATION_PROPERTY_KEY = "maven-build-utils.activate";
@Requirement
Logger logger;
@Override
public void afterProjectsRead(MavenSession session) throws MavenExecutionException {
Log log = resolveLogDestination(session);
if (!isActivationProfilesPropertySet(session, ACTIVATION_PROFILE_KEY))
log.info("Use " + ACTIVATION_PROFILE_KEY + " property to set in which profiles to run maven-build-utils.");
if (shouldBeActive(session, ACTIVATION_PROPERTY_KEY, ACTIVATION_PROFILE_KEY)) {
BuildEventListener listener = createListener(log);
registerExecutionListener(session, listener);
}
}
protected BuildEventListener createListener(Log log) {
return new BuildEventListener(new BuildEventLog(log));
}
protected Log resolveLogDestination(MavenSession session) {
String output = getProperty(session, OUTPUT_MODE, "console");
if (output.equals("file")) {
return createFileLog(session);
}
if (output.equals("console")) {
return new ConsoleLog(logger);
}
logger.error("Invalid configuration: " + output);
return new ConsoleLog(logger);
}
protected Log createFileLog(MavenSession session) {
String file = getProperty(session, OUTPUT_FILE,
DEFAULT_FILE_DESTINATION);
if (new File(file).isAbsolute()) {
return new FileLog(new File(file));
}
String buildDir = session.getExecutionRootDirectory();
return new FileLog(new File(buildDir, file));
}
}