blob: c21df3ca31175202d2b4884a91db8c89c9e52913 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.listener;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.NoBannerLogger;
import org.apache.tools.ant.SubBuildListener;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.util.StringUtils;
import java.io.File;
/**
* This is a special logger that is designed to make it easier to work
* with big projects, those that use imports and
* subant to build complex systems.
*
* @since Ant1.7.1
*/
public class BigProjectLogger extends NoBannerLogger implements SubBuildListener {
/**
* Header string for the log.
* {@value}
*/
public static final String HEADER
= "======================================================================";
/**
* Footer string for the log.
* {@value}
*/
public static final String FOOTER = HEADER;
/**
* This is an override point: the message that indicates whether
* a build failed. Subclasses can change/enhance the
* message.
*
* @return The classic "BUILD FAILED" plus a timestamp
*/
protected String getBuildFailedMessage() {
return super.getBuildFailedMessage() + TimestampedLogger.SPACER + getTimestamp();
}
/**
* This is an override point: the message that indicates that
* a build succeeded. Subclasses can change/enhance the
* message.
*
* @return The classic "BUILD SUCCESSFUL" plus a timestamp
*/
protected String getBuildSuccessfulMessage() {
return super.getBuildSuccessfulMessage() + TimestampedLogger.SPACER + getTimestamp();
}
/**
* {@inheritDoc}
*
* @param event
*/
public void buildStarted(BuildEvent event) {
super.buildStarted(event);
subBuildStarted(event);
}
/**
* {@inheritDoc}
*
* @param event
*/
public void buildFinished(BuildEvent event) {
subBuildFinished(event);
super.buildFinished(event);
}
/**
* Override point, extract the target name
*
* @param event the event to work on
* @return the target name -including the owning project name (if non-null)
*/
protected String extractTargetName(BuildEvent event) {
String targetName = event.getTarget().getName();
String projectName = extractProjectName(event);
if (projectName != null && targetName != null) {
return projectName + '.' + targetName;
} else {
return targetName;
}
}
/**
* {@inheritDoc}
*
* @param event An event with any relevant extra information. Must not be <code>null</code>.
*/
public void subBuildStarted(BuildEvent event) {
String name = extractNameOrDefault(event);
Project project = event.getProject();
File base = project == null ? null : project.getBaseDir();
String path =
(base == null)
? "With no base directory"
: "In " + base.getAbsolutePath();
printMessage(StringUtils.LINE_SEP + getHeader()
+ StringUtils.LINE_SEP + "Entering project " + name
+ StringUtils.LINE_SEP + path
+ StringUtils.LINE_SEP + getFooter(),
out,
event.getPriority());
}
/**
* Get the name of an event
*
* @param event the event name
* @return the name or a default string
*/
protected String extractNameOrDefault(BuildEvent event) {
String name = extractProjectName(event);
if (name == null) {
name = "";
} else {
name = '"' + name + '"';
}
return name;
}
/** {@inheritDoc} */
public void subBuildFinished(BuildEvent event) {
String name = extractNameOrDefault(event);
String failed = event.getException() != null ? "failing " : "";
printMessage(StringUtils.LINE_SEP + getHeader()
+ StringUtils.LINE_SEP + "Exiting " + failed + "project "
+ name
+ StringUtils.LINE_SEP + getFooter(),
out,
event.getPriority());
}
/**
* Override point: return the header string for the entry/exit message
* @return the header string
*/
protected String getHeader() {
return HEADER;
}
/**
* Override point: return the footer string for the entry/exit message
* @return the footer string
*/
protected String getFooter() {
return FOOTER;
}
}