/*******************************************************************************
* Copyright (c) 2015, 2016 EfficiOS Inc., Alexandre Montplaisir
*
* 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
*******************************************************************************/
package org.eclipse.tracecompass.internal.provisional.analysis.lami.core.types;
import java.util.StringJoiner;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
/**
* Class defining a LAMI 'process' type.
*
* This is the representation of an operating system process.
*
* @author Alexandre Montplaisir
*/
public class LamiProcess extends LamiData {
private final @Nullable String fName;
private final @Nullable Long fPid;
private final @Nullable Long fTid;
private final String fString;
/**
* Constructor
*
* All parameters are optional, but realistically at least one should be
* provided!
*
* @param name
* The process name
* @param pid
* The process's PID
* @param tid
* The process's TID
*/
public LamiProcess(@Nullable String name, @Nullable Long pid, @Nullable Long tid) {
fName = name;
fPid = pid;
fTid = tid;
fString = generateString();
}
/**
* Get this process's name, null if unavailable.
*
* @return The process name
*/
public @Nullable String getName() {
return fName;
}
/**
* Get this process's PID, null if unavailable.
*
* @return The process PID
*/
public @Nullable Long getPID() {
return fPid;
}
/**
* Get this process's TID, null if unavailable.
*
* @return The process TID
*/
public @Nullable Long getTID() {
return fTid;
}
private String generateString() {
Long pid = fPid;
Long tid = fTid;
StringBuilder sb = new StringBuilder();
if (fName != null) {
sb.append(fName);
}
if (pid != null || tid != null) {
sb.append(' ');
StringJoiner sj = new StringJoiner(", ", "(", ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if (pid != null) {
sj.add("pid=" + pid.toString()); //$NON-NLS-1$
}
if (tid != null) {
sj.add("tid=" + tid.toString()); //$NON-NLS-1$
}
sb.append(sj.toString());
}
return sb.toString();
}
@Override
public @NonNull String toString() {
return fString;
}
}