/*
* #%~
* org.overture.ide.debug
* %%
* Copyright (C) 2008 - 2014 Overture
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #~%
*/
package org.overture.ide.debug.core.dbgp.internal;
import java.util.Map;
import java.util.TreeMap;
import org.overture.ide.debug.core.dbgp.IDbgpStatus;
import org.overture.ide.debug.core.dbgp.IDbgpStatusInterpreterThreadState;
public class DbgpStatus implements IDbgpStatus
{
// Reasons
public static final Integer REASON_OK = new Integer(0);
public static final Integer REASON_ERROR = new Integer(1);
public static final Integer REASON_ABORTED = new Integer(2);
public static final Integer REASON_EXCEPTION = new Integer(3);
// Status
public static final Integer STATUS_STARTING = new Integer(0);
public static final Integer STATUS_STOPPING = new Integer(1);
public static final Integer STATUS_STOPPED = new Integer(2);
public static final Integer STATUS_RUNNING = new Integer(3);
public static final Integer STATUS_BREAK = new Integer(4);
private static final Map<String, Integer> statusParser = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
private static final Map<String, Integer> reasonParser = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
static
{
statusParser.put("starting", STATUS_STARTING); //$NON-NLS-1$
statusParser.put("stopping", STATUS_STOPPING); //$NON-NLS-1$
statusParser.put("stopped", STATUS_STOPPED); //$NON-NLS-1$
statusParser.put("running", STATUS_RUNNING); //$NON-NLS-1$
statusParser.put("break", STATUS_BREAK); //$NON-NLS-1$
reasonParser.put("ok", REASON_OK); //$NON-NLS-1$
reasonParser.put("error", REASON_ERROR); //$NON-NLS-1$
reasonParser.put("aborted", REASON_ABORTED); //$NON-NLS-1$
reasonParser.put("exception", REASON_EXCEPTION); //$NON-NLS-1$
}
public static IDbgpStatus parse(String status, String reason,
IDbgpStatusInterpreterThreadState interpreterThreadStatus)
{
return new DbgpStatus((Integer) statusParser.get(status), (Integer) reasonParser.get(reason), interpreterThreadStatus);
}
private final Integer status;
private final Integer reason;
private final IDbgpStatusInterpreterThreadState interpreterThreadState;
public DbgpStatus(Integer status, Integer reason,
IDbgpStatusInterpreterThreadState interpreterThreadState)
{
if (status == null)
{
throw new IllegalArgumentException();
}
if (reason == null)
{
throw new IllegalArgumentException();
}
this.status = status;
this.reason = reason;
this.interpreterThreadState = interpreterThreadState;
}
public IDbgpStatusInterpreterThreadState getInterpreterThreadState()
{
return interpreterThreadState;
}
public boolean reasonAborred()
{
return REASON_ABORTED == reason;
}
public boolean reasonError()
{
return REASON_ERROR == reason;
}
public boolean reasonException()
{
return REASON_EXCEPTION == reason;
}
public boolean reasonOk()
{
return REASON_OK == reason;
}
public boolean isRunning()
{
return STATUS_RUNNING == status;
}
public boolean isStarting()
{
return STATUS_STARTING == status;
}
public boolean isStopped()
{
return STATUS_STOPPED == status;
}
public boolean isStopping()
{
return STATUS_STOPPING == status;
}
public boolean isBreak()
{
return STATUS_BREAK == status;
}
public boolean equals(Object obj)
{
if (obj instanceof DbgpStatus)
{
DbgpStatus s = (DbgpStatus) obj;
return this.status == s.status && this.reason == s.reason;
}
return false;
}
public int hashCode()
{
return status.hashCode() << 8 | reason.hashCode();
}
public String toString()
{
return "Status: " + status.toString() + "; Reason: " //$NON-NLS-1$ //$NON-NLS-2$
+ reason.toString();
}
}