/** * Copyright 2007-2008 University Of Southern California * * Licensed 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 edu.isi.pegasus.common.logging.format; import edu.isi.pegasus.common.logging.*; import java.util.Collection; import java.util.Stack; /** * The abstract formatter that implements all of the functions except * the addEvent function * * * @author Karan Vahi * @author Gaurang Mehta * * @version $Revision$ */ public abstract class AbstractLogFormatter implements LogFormatter { /** * The default key to use for logging messages */ private static String DEFAULT_KEY = "msg"; /** * The name of the program. */ protected String mProgram; /** * The Stack of event objects maintained internally */ protected Stack<Event> mStack; /** * The default constructor. */ public AbstractLogFormatter(){ mStack = new Stack<Event>(); } /** * Sets the program name for the software whose log statement are logged. * * @param name */ public void setProgramName( String name ){ mProgram = name; } /** * Returns the program name for the software whose log statement are logged. * * @param name * * @return name of the program */ public String getProgramName( String name ){ return mProgram; } /** * Adds the event that is to be associated with the log messages onto an * internal stack * * @param name the name of the event to be associated * @param entityName the primary entity that is associated with the event e.g. workflow * @param entityID the id of that entity. */ public abstract void addEvent( String name, String entityName, String entityID ); /** * Pop the event on top of the internal stack. * * @return event on top , else null */ public Event popEvent(){ return mStack.pop(); } /** * Returns the name of event that is currently associated with the log messages * and is on the top of the stack * * @return name of the event. */ public String getEventName( ){ return mStack.peek().getEventName(); } /** * Creates the start message for the event on top of the internal stack * * @return start event message */ public String getStartEventMessage(){ return mStack.peek().getStartEventMessage(); } /** * Creates the end message for the event on top of the stack. * * @return end event message */ public String getEndEventMessage(){ return mStack.peek().getEndEventMessage(); } /** * Add to the log message with just a value. * * @param value * * @return self-reference */ public LogFormatter add( String value ){ return this.add( AbstractLogFormatter.DEFAULT_KEY, value ); } /** * Add to the log message for the event on the top. * * @param key * @param value * * @return Self-reference, so calls can be chained */ public LogFormatter add( String key, String value ){ mStack.peek().add( key, value ); return this; } /** * Creates a log message with the contents of the internal log buffer. * * @return the log message */ public String createLogMessage(){ return mStack.peek().createLogMessage(); } /** * Creates a log message with the contents of the internal log buffer. * It then resets the buffer before returning the log message * * @return log message. */ public String createLogMessageAndReset(){ return mStack.peek().createLogMessageAndReset(); } /** * Creates a log message that connects the parent entities with the * children. For e.g. can we use to create the log messages connecting the * jobs with the workflow they are part of. * * @param parentType the type of parent entity * @param parentID the id of the parent entity * @param childIdType the type of children entities * @param childIDs Collection of children id's * * @return the entity hierarchy message */ public String createEntityHierarchyMessage( String parentType, String parentID, String childIdType, Collection<String> childIDs ){ return mStack.peek().createEntityHierarchyMessage(parentType, parentID, childIdType, childIDs); } }