/*******************************************************************************
* Copyright (c) 2010 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Robert Fuhrer (rfuhrer@watson.ibm.com) - initial API and implementation
*******************************************************************************/
package org.eclipse.imp.utils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IMarker;
import org.eclipse.imp.parser.IMessageHandler;
/**
* An implementation of {@link IMessageHandler} that merely stores away the messages
* received in a list of {@link MessageInfo} objects, for later retrieval by clients.
* @author rfuhrer
*/
public final class SavingMessageHandler implements IMessageHandler {
private final List<MessageInfo> fMessages= new ArrayList<MessageInfo>();
public void clearMessages() {
fMessages.clear();
}
public void endMessageGroup() { }
public void startMessageGroup(String groupName) { }
public void endMessages() { }
public void handleSimpleMessage(String msg, int startOffset, int endOffset, int startCol, int endCol, int startLine, int endLine) {
fMessages.add(new MessageInfo(IMarker.SEVERITY_INFO, msg, startOffset, endOffset, startCol, endCol, startLine, endLine));
}
public void handleSimpleMessage(String msg, int startOffset, int endOffset, int startCol, int endCol, int startLine, int endLine, Map<String, Object> attributes) {
Object severityValue= attributes.get(IMessageHandler.SEVERITY_KEY);
int severity= (severityValue instanceof Integer) ? ((Integer) severityValue).intValue() : IMarker.SEVERITY_INFO;
fMessages.add(new MessageInfo(severity, msg, startOffset, endOffset, startCol, endCol, startLine, endLine));
}
public List<MessageInfo> getMessages() {
return Collections.unmodifiableList(fMessages);
}
public String getConcatenatedMessages() {
StringBuilder sb= new StringBuilder();
for(MessageInfo info: getMessages()) {
sb.append("Line " + info.fStartLine + ", column " + info.fStartCol + ": " + info.fMessage + "\n");
}
return sb.toString();
}
}