/*******************************************************************************
 * Copyright (c) 2009 Wind River Systems and others.
 * 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:
 *     Wind River Systems - initial API and implementation
 *******************************************************************************/
package org.eclipse.debug.examples.core.protocol;

/**
 * Base class for PDA events.
 */
public class PDAEvent {
    public final String fMessage;
    public final String fName;
    
    public PDAEvent(String message) {
        fMessage = message;
        fName = getName(message);
    }
    
    protected String getName(String message) {
        int nameEnd = message.indexOf(' ');
        nameEnd = nameEnd == -1 ? message.length() : nameEnd;
        return message.substring(0, nameEnd);
    }
    
    public static PDAEvent parseEvent(String message) {
        if (PDAEvalResultEvent.isEventMessage(message)) {
            return new PDAEvalResultEvent(message);
        } 
        else if (PDAExitedEvent.isEventMessage(message)) {
            return new PDAExitedEvent(message);
        } 
        else if (PDANoSuchLabelEvent.isEventMessage(message)) {
            return new PDANoSuchLabelEvent(message);
        } 
        else if (PDARegistersEvent.isEventMessage(message)) {
            return new PDARegistersEvent(message);
        } 
        else if (PDAResumedEvent.isEventMessage(message)) {
            return new PDAResumedEvent(message);
        } 
        else if (PDAStartedEvent.isEventMessage(message)) {
            return new PDAStartedEvent(message);
        } 
        else if (PDASuspendedEvent.isEventMessage(message)) {
            return new PDASuspendedEvent(message);
        } 
        else if (PDATerminatedEvent.isEventMessage(message)) {
            return new PDATerminatedEvent(message);
        } 
        else if (PDAUnimplementedInstructionEvent.isEventMessage(message)) {
            return new PDAUnimplementedInstructionEvent(message);
        } 
        else if (PDAVMResumedEvent.isEventMessage(message)) {
            return new PDAVMResumedEvent(message);
        } 
        else if (PDAVMStartedEvent.isEventMessage(message)) {
            return new PDAVMStartedEvent(message);
        } 
        else if (PDAVMSuspendedEvent.isEventMessage(message)) {
            return new PDAVMSuspendedEvent(message);
        } 
        else if (PDAExitedEvent.isEventMessage(message)) {
            return new PDAExitedEvent(message);
        } 
        else {
            return new PDAEvent(message);
        } 
    }
}
