/*******************************************************************************
* Copyright (c) 2008, 2010 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.cdt.dsf.debug.ui.viewmodel.launch;
import java.util.Map;
import org.eclipse.cdt.dsf.debug.service.IRunControl.StateChangeReason;
import org.eclipse.cdt.dsf.ui.viewmodel.properties.IElementPropertiesProvider;
import org.eclipse.cdt.dsf.ui.viewmodel.properties.LabelText;
import org.eclipse.core.runtime.IStatus;
/**
* @since 2.0
*/
public class ExecutionContextLabelText extends LabelText {
/**
* Value <code>0</code> means it's not known. Value <code>1</code>, means it's known.
*/
public static final String PROP_STATE_CHANGE_REASON_KNOWN = "state_change_reason_known"; //$NON-NLS-1$
/**
* Value <code>0</code> means it's not known. Value <code>1</code>, means it's known.
* @since 2.1
*/
public static final String PROP_STATE_CHANGE_DETAILS_KNOWN = "state_change_details_known"; //$NON-NLS-1$
/**
* Value <code>0</code> means it's not known. Value <code>1</code>, means it's known.
*/
public static final String PROP_ID_KNOWN = "id_known"; //$NON-NLS-1$
/**
* Value <code>0</code> means it's not known. Value <code>1</code>, means it's known.
*/
public static final String PROP_NAME_KNOWN = "name_known"; //$NON-NLS-1$
public ExecutionContextLabelText(String formatPattern, String[] propertyNames) {
super(formatPattern, propertyNames);
}
@Override
protected Object getPropertyValue(String propertyName, IStatus status, Map<String, Object> properties) {
if ( ILaunchVMConstants.PROP_STATE_CHANGE_REASON.equals(propertyName) ) {
String reason = (String)properties.get(ILaunchVMConstants.PROP_STATE_CHANGE_REASON);
String reasonLabel = "invalid reason"; //$NON-NLS-1$
if (reason == null) {
// In non-stop mode threads that are running have no state change reason
reasonLabel = ""; //$NON-NLS-1$
} else if (StateChangeReason.BREAKPOINT.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Breakpoint__label;
} else if (StateChangeReason.CONTAINER.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Container__label;
} else if (StateChangeReason.ERROR.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Error__label;
} else if (StateChangeReason.EVALUATION.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Evaluation__label;
} else if (StateChangeReason.EXCEPTION.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Exception__label;
} else if (StateChangeReason.SHAREDLIB.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Shared_lib__label;
} else if (StateChangeReason.SIGNAL.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Signal__label;
} else if (StateChangeReason.STEP.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Step__label;
} else if (StateChangeReason.USER_REQUEST.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__User_request__label;
} else if (StateChangeReason.WATCHPOINT.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Watchpoint__label;
} else if (StateChangeReason.EVENT_BREAKPOINT.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__EventBreakpoint__label;
} else if (StateChangeReason.UNKNOWN.name().equals(reason)) {
reasonLabel = MessagesForLaunchVM.State_change_reason__Unknown__label;
} else {
assert false : "unexpected state change reason: " + reason; //$NON-NLS-1$
}
return reasonLabel;
} else if ( ILaunchVMConstants.PROP_STATE_CHANGE_DETAILS.equals(propertyName) ) {
return properties.get(propertyName);
} else if ( ILaunchVMConstants.PROP_IS_SUSPENDED.equals(propertyName) ) {
Boolean suspended = (Boolean)properties.get(propertyName);
return suspended ? 1 : 0;
} else if ( PROP_STATE_CHANGE_REASON_KNOWN.equals(propertyName) ) {
String reason = (String)properties.get(ILaunchVMConstants.PROP_STATE_CHANGE_REASON);
return (reason != null && !StateChangeReason.UNKNOWN.name().equals(reason)) ? 1 : 0;
} else if ( PROP_STATE_CHANGE_DETAILS_KNOWN.equals(propertyName) ) {
String details = (String)properties.get(ILaunchVMConstants.PROP_STATE_CHANGE_DETAILS);
return (details != null) ? 1 : 0;
} else if (PROP_NAME_KNOWN.equals(propertyName)) {
return properties.get(IElementPropertiesProvider.PROP_NAME) != null ? 1 : 0;
} else if (IElementPropertiesProvider.PROP_NAME.equals(propertyName)) {
Object val = properties.get(IElementPropertiesProvider.PROP_NAME);
return val != null ? val : ""; //$NON-NLS-1$
} else if (PROP_ID_KNOWN.equals(propertyName)) {
return properties.get(ILaunchVMConstants.PROP_ID) != null ? 1 : 0;
} else if (ILaunchVMConstants.PROP_ID.equals(propertyName)) {
Object val = properties.get(ILaunchVMConstants.PROP_ID);
return val != null ? val : ""; //$NON-NLS-1$
}
return super.getPropertyValue(propertyName, status, properties);
}
@Override
protected boolean checkProperty(String propertyName, IStatus status, Map<String, Object> properties) {
if (PROP_NAME_KNOWN.equals(propertyName) ||
IElementPropertiesProvider.PROP_NAME.equals(propertyName) ||
PROP_STATE_CHANGE_REASON_KNOWN.equals(propertyName) ||
ILaunchVMConstants.PROP_STATE_CHANGE_REASON.equals(propertyName) ||
PROP_STATE_CHANGE_DETAILS_KNOWN.equals(propertyName) ||
ILaunchVMConstants.PROP_STATE_CHANGE_DETAILS.equals(propertyName) ||
PROP_ID_KNOWN.equals(propertyName) ||
ILaunchVMConstants.PROP_ID.equals(propertyName))
{
return true;
}
return super.checkProperty(propertyName, status, properties);
}
}