/*******************************************************************************
 * Copyright (c) 2007 IBM Corporation 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:
 * IBM Corporation - Initial API and implementation
 *******************************************************************************/
package org.eclipse.ptp.core.elements.attributes;

import org.eclipse.ptp.core.attributes.EnumeratedAttributeDefinition;
import org.eclipse.ptp.core.attributes.IAttributeDefinition;
import org.eclipse.ptp.core.attributes.IntegerAttributeDefinition;
import org.eclipse.ptp.core.attributes.StringAttributeDefinition;


/**
 * Process attributes
 */
public class ProcessAttributes {
	public enum State {
		STARTING,
		RUNNING,
		EXITED,
		EXITED_SIGNALLED,
		SUSPENDED,
		ERROR,
		UNKNOWN
	};

	private static final String STATE_ATTR_ID = "processState";
	private static final String PID_ATTR_ID = "processPID";
	private static final String EXIT_CODE_ATTR_ID = "processExitCode";
	private static final String SIGNAL_NAME_ATTR_ID = "processSignalName";
	private static final String INDEX_ATTR_ID = "processIndex";
	private static final String STDOUT_ATTR_ID = "processStdout";
	private static final String STDERR_ATTR_ID = "processStderr";
	private static final String NODEID_ATTR_ID = "processNodeId";

	private final static EnumeratedAttributeDefinition<State> stateAttrDef = 
		new EnumeratedAttributeDefinition<State>(STATE_ATTR_ID, "State",
				"Execution state of a process", true, State.STARTING);
	
	private final static IntegerAttributeDefinition pidAttrDef = 
		new IntegerAttributeDefinition(PID_ATTR_ID, "PID", 
				"Operating system process ID", true, 0);
	
	private final static IntegerAttributeDefinition exitCodeAttrDef = 
		new IntegerAttributeDefinition(EXIT_CODE_ATTR_ID, "Exit Code", 
				"Operating system exit code", true, 0);
	
	private final static IntegerAttributeDefinition indexAttrDef = 
		new IntegerAttributeDefinition(INDEX_ATTR_ID, "Index", 
				"Zero-based index of process (e.g. MPI rank)", true, 0);
	
	private final static StringAttributeDefinition signalNameAttrDef = 
		new StringAttributeDefinition(SIGNAL_NAME_ATTR_ID, "Exit Signal", 
				"Name of signal that caused process termination", true, "");
	
	private final static StringAttributeDefinition stdoutAttrDef = 
		new StringAttributeDefinition(STDOUT_ATTR_ID, "Process Stdout", 
				"Standard output from process", false, "");
	
	private final static StringAttributeDefinition stderrAttrDef = 
		new StringAttributeDefinition(STDERR_ATTR_ID, "Process Stderr", 
				"Standard error from process", false, "");
	
	private final static StringAttributeDefinition nodeIdAttrDef = 
		new StringAttributeDefinition(NODEID_ATTR_ID, "Process Node ID", 
				"Node that this process is running on", true, "");
	
	public static EnumeratedAttributeDefinition<State> getStateAttributeDefinition() {
		return stateAttrDef;
	}
	
	public static IntegerAttributeDefinition getPIDAttributeDefinition() {
		return pidAttrDef;
	}
	
	public static IntegerAttributeDefinition getExitCodeAttributeDefinition() {
		return exitCodeAttrDef;
	}
	
	public static IntegerAttributeDefinition getIndexAttributeDefinition() {
		return indexAttrDef;
	}
	
	public static StringAttributeDefinition getSignalNameAttributeDefinition() {
		return signalNameAttrDef;
	}
	
	public static StringAttributeDefinition getStdoutAttributeDefinition() {
		return stdoutAttrDef;
	}
	
	public static StringAttributeDefinition getStderrAttributeDefinition() {
		return stderrAttrDef;
	}
	
	public static StringAttributeDefinition getNodeIdAttributeDefinition() {
		return nodeIdAttrDef;
	}
	
	public static IAttributeDefinition<?,?,?>[] getDefaultAttributeDefinitions() {
		return new IAttributeDefinition[]{
				stateAttrDef, 
				pidAttrDef, 
				exitCodeAttrDef, 
				indexAttrDef, 
				signalNameAttrDef, 
				stdoutAttrDef,
				stderrAttrDef,
				nodeIdAttrDef
			};
	}
}
