001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.apache.tools.ant.module.spi;
043:
044: import java.io.File;
045: import java.util.Set;
046: import org.apache.tools.ant.module.run.LoggerTrampoline;
047:
048: /**
049: * One event delivered to an {@link AntLogger}.
050: * <p>
051: * Note that one event is shared across all listeners.
052: * </p>
053: * <p>
054: * The information available from the event represents a best effort to gather
055: * information from the Ant run. Some versions of Ant may not support all of
056: * these capabilities, in which case the event method will simply return null
057: * or whatever the documented fallback value is. For example, Ant 1.5 does
058: * not permit details of task structure to be introspected, but 1.6 does.
059: * </p>
060: * @author Jesse Glick
061: * @since org.apache.tools.ant.module/3 3.12
062: */
063: public final class AntEvent {
064:
065: static {
066: LoggerTrampoline.ANT_EVENT_CREATOR = new LoggerTrampoline.Creator() {
067: public AntSession makeAntSession(
068: LoggerTrampoline.AntSessionImpl impl) {
069: throw new AssertionError();
070: }
071:
072: public AntEvent makeAntEvent(
073: LoggerTrampoline.AntEventImpl impl) {
074: return new AntEvent(impl);
075: }
076:
077: public TaskStructure makeTaskStructure(
078: LoggerTrampoline.TaskStructureImpl impl) {
079: throw new AssertionError();
080: }
081: };
082: }
083:
084: private final LoggerTrampoline.AntEventImpl impl;
085:
086: private AntEvent(LoggerTrampoline.AntEventImpl impl) {
087: this .impl = impl;
088: }
089:
090: /**
091: * Error log level.
092: */
093: public static final int LOG_ERR = 0;
094:
095: /**
096: * Warning log level.
097: */
098: public static final int LOG_WARN = 1;
099:
100: /**
101: * Information log level.
102: */
103: public static final int LOG_INFO = 2;
104:
105: /**
106: * Verbose log level.
107: */
108: public static final int LOG_VERBOSE = 3;
109:
110: /**
111: * Debugging log level.
112: */
113: public static final int LOG_DEBUG = 4;
114:
115: /**
116: * Get the associated session.
117: * @return the session object
118: */
119: public AntSession getSession() {
120: return impl.getSession();
121: }
122:
123: /**
124: * Mark an event as consumed to advise other loggers not to handle it.
125: * @throws IllegalStateException if it was already consumed
126: */
127: public void consume() throws IllegalStateException {
128: impl.consume();
129: }
130:
131: /**
132: * Test whether this event has already been consumed by some other logger.
133: * @return true if it has already been consumed
134: */
135: public boolean isConsumed() {
136: return impl.isConsumed();
137: }
138:
139: /**
140: * Get the location of the Ant script producing this event.
141: * @return the script location, or null if unknown
142: */
143: public File getScriptLocation() {
144: return impl.getScriptLocation();
145: }
146:
147: /**
148: * Get the line number in {@link #getScriptLocation} corresponding to this event.
149: * Line numbers start at one.
150: * @return the line number, or -1 if unknown
151: */
152: public int getLine() {
153: return impl.getLine();
154: }
155:
156: /**
157: * Get the name of the target in {@link #getScriptLocation} producing this event.
158: * Some events occur outside targets and so there will be no target name.
159: * @return the target name (never empty), or null if unknown or inapplicable
160: */
161: public String getTargetName() {
162: return impl.getTargetName();
163: }
164:
165: /**
166: * Get the name of the task producing this event.
167: * XXX semantics w.r.t. namespaces, taskdefs, etc.?
168: * Some events occur outside of tasks and so there will be no name.
169: * @return the task name (never empty), or null if unknown or inapplicable
170: */
171: public String getTaskName() {
172: return impl.getTaskName();
173: }
174:
175: /**
176: * Get the configured XML structure of the task producing this event.
177: * Some events occur outside of tasks and so there will be no information.
178: * @return the task structure, or null if unknown or inapplicable
179: */
180: public TaskStructure getTaskStructure() {
181: return impl.getTaskStructure();
182: }
183:
184: /**
185: * Get the name of the message being logged.
186: * Applies only to {@link AntLogger#messageLogged}.
187: * @return the message, or null if inapplicable
188: */
189: public String getMessage() {
190: return impl.getMessage();
191: }
192:
193: /**
194: * Get the log level of the message.
195: * Applies only to {@link AntLogger#messageLogged}.
196: * Note that lower numbers are higher priority.
197: * @return the log level (e.g. LOG_INFO), or -1 if inapplicable
198: */
199: public int getLogLevel() {
200: return impl.getLogLevel();
201: }
202:
203: /**
204: * Get a terminating exception.
205: * Applies only to {@link AntLogger#buildFinished}
206: * and {@link AntLogger#buildInitializationFailed}.
207: * @return an exception ending the build, or null for normal completion or if inapplicable
208: */
209: public Throwable getException() {
210: return impl.getException();
211: }
212:
213: /**
214: * Get a property set on the current Ant project.
215: * @param name the property name
216: * @return its value, or null
217: */
218: public String getProperty(String name) {
219: return impl.getProperty(name);
220: }
221:
222: /**
223: * Get a set of property names defined on the current Ant project.
224: * @return a set of property names; may be empty but not null
225: */
226: public Set<String> getPropertyNames() {
227: return impl.getPropertyNames();
228: }
229:
230: /**
231: * Evaluate a string with possible substitutions according to defined properties.
232: * @param text the text to evaluate
233: * @return its value (may be the same as the incoming text), never null
234: * @see TaskStructure#getAttribute
235: * @see TaskStructure#getText
236: */
237: public String evaluate(String text) {
238: return impl.evaluate(text);
239: }
240:
241: @Override
242: public String toString() {
243: return impl.toString();
244: }
245:
246: }
|