/*******************************************************************************
 * 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.pda.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);
        } 
    }
}
