/**
* 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 edu.isi.ikcap.workflows.util.logging.LogEvent;
import edu.isi.ikcap.workflows.util.logging.EventLogMessage;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* The netlogger event.
*
* @author Karan Vahi
* @version $Revision$
*/
public class NetloggerEvent implements Event{
/**
* The name of the program.
*/
private String mProgram;
/**
* The current event object.
*/
private LogEvent mLogEvent;
/**
* The current log event message.
*/
private EventLogMessage mMessage;
/**
* The default constructor.
*/
public NetloggerEvent(){
}
/**
* 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 the name of the program
*/
public String getProgramName( String name ){
return mProgram;
}
/**
* Set the event that is to be associated with the log messages.
*
* @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 void setEvent( String name, String entityName, String entityID ){
mLogEvent = new LogEvent( name, mProgram, entityName, entityID );
reset();
}
/**
* 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 map Map of Entity Names with the entity identifiers.
*/
public void setEvent( String name, Map<String,String> map ){
mLogEvent = new LogEvent( name, mProgram, map );
reset();
}
/**
* Returns the name of event that is currently associated with the log messages.
*
* @return the event to be associated
*/
public String getEventName( ){
return null;
}
/**
* Creates the start message for the event.
*
* @return start event message
*/
public String getStartEventMessage(){
return mLogEvent.createStartLogMsg().toString();
}
/**
* Creates the end message for the event.
*
* @return end event message
*/
public String getEndEventMessage(){
return mLogEvent.createEndLogMsg().toString();
}
/**
* Reset the internal log message buffer associated with the event
*
*/
public void reset(){
mMessage = mLogEvent.createLogMsg();
}
/**
* Add to the log message.
*
* @param key
* @param value
*
* @return Self-reference, so calls can be chained
*/
public Event add( String key, String value ){
mMessage = mMessage.addWQ( key, value );
return this;
}
/**
* Creates a log message with the contents of the internal log buffer.
*
* @return the log message
*/
public String createLogMessage(){
return mMessage.toString();
}
/**
* Creates a log message with the contents of the internal log buffer.
* It then resets the buffer before returning the log message
*
* @return the log message
*/
public String createLogMessageAndReset(){
String result = mMessage.toString();
this.reset();
return result;
}
/**
* 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 entity hierarch message.
*/
public String createEntityHierarchyMessage( String parentType,
String parentID,
String childIdType,
Collection<String> childIDs ){
return LogEvent.createIdHierarchyLogMsg( parentType, parentID, childIdType, childIDs.iterator() ).toString();
}
}