WepsMessageLog.java [tools/WepsSoilsIfcCreator/src/usda/weru/util] Revision: 0963adc11caf5d7616128736008ebbc7f276df4c  Date: Wed Sep 02 15:16:53 MDT 2015
/*
 * WepsMessageLog.java
 *
 * Created on January 17, 2006, 3:57 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package usda.weru.util;
import java.util.*;
/**
 *
 * @author joelevin
 */
public class WepsMessageLog {
    private Vector <WepsMessage> c_messages;
    /** Creates a new instance of WepsMessageLog */
    public WepsMessageLog() {
        c_messages = new Vector <WepsMessage> ();
    }
    
    public WepsMessageLog(Vector <WepsMessage> messages) {
        c_messages = messages;
    }
  
    /**
     * Logs the passed message object
     * @param message WepsMessage object to be place in the log.
     */
    public synchronized void logMessage(WepsMessage message){
        c_messages.add(message);
        switch(message.getSeverity()){
            case ERROR:
                //System.err.println(message.toString());
                break;
            case WARNING:
                //System.out.println(message.toString());
                break;
            case INFORMATION:
                //System.out.println(message.toString());
                break;
        }
    }
    
    /**
     * Logs a message with the given severity and text.
     * @param severity WepsMessage.MessageSeverity indicating how serious the text is.  
     * @param text The string message to store.
     */
    public void logMessage(WepsMessage.MessageSeverity severity, String text){
        logMessage(new WepsMessage(severity, text));
        
    }
    
    /**
     * Clears the message log.
     */
    public void clear(){
        c_messages.clear();
        
        
    }
    

    /**
     * Returns all the messages in the log.
     */
    public Vector <WepsMessage> getMessages(){
        return c_messages;
        
    }
    
    /**
     * Returns messages in the log matching the given severities
     * @param broadInclude If true the method will return messages with equal or lesser severity than the severities in the passed array.
     */
    public Vector <WepsMessage> getMessages(boolean broadInclude, WepsMessage.MessageSeverity... severities){
        Vector <WepsMessage> filteredMessages = new Vector <WepsMessage> ();
        for (WepsMessage message : c_messages){
            for (WepsMessage.MessageSeverity severity : severities){
                if (broadInclude){ //Lesser and equal severities.
                    if (message.getSeverity().isAsSevere(severity) || message.getSeverity().isLessSevereThan(severity)){
                        filteredMessages.add(message);
                        break;
                    }
                }
                else{//Only what is asked for.
                    if (message.getSeverity() == severity){
                        filteredMessages.add(message);
                        break;
                    }
                }
            }            
        }
        
        return filteredMessages;
    }
    
    public Vector <WepsMessage> getMessages(WepsMessage.MessageSeverity... severities){
        return getMessages(false, severities);
    }
    
    public Vector <WepsMessage.MessageSeverity> getSortedSeverites(){
        Vector <WepsMessage.MessageSeverity> sortedSeverities = new Vector <WepsMessage.MessageSeverity> ();
        for (WepsMessage message : c_messages){
            if (sortedSeverities.contains(message.getSeverity()) == false){
                sortedSeverities.add(message.getSeverity());
            }
        }
        
        Collections.sort(sortedSeverities, WepsMessage.MessageSeverity.INFORMATION);
        return sortedSeverities;
    }
    
    public int getCount(){
        return c_messages.size();
    }
    
    public int getCount(boolean broadInclude, WepsMessage.MessageSeverity... severities){
        return getMessages(broadInclude, severities).size();
    }
    
    public int getCount(WepsMessage.MessageSeverity... severities){
        return getCount(false, severities);
    }
    
    public boolean hasMessage(boolean broadInclude, WepsMessage.MessageSeverity... severities){
        return (getMessages(broadInclude, severities).size() > 0);
    }
    
    public boolean hasMessage(WepsMessage.MessageSeverity... severities){
        return hasMessage(false, severities);
    }
    
    public boolean hasMessage(){
        return (c_messages.size() > 0);
    }
    
    public void mergeLog(WepsMessageLog log){
        for(WepsMessage message : log.getMessages()){
            logMessage(message);
        }
    }
}