package org.ntlab.traceanalyzer;

import java.util.ArrayList;
import java.util.HashSet;

public class MarkedThread {
	private String id;
	private ArrayList<MarkedMethodExecution> methodExecutions;
	private int uniqueMethodInvokedFrom = 0;

	public MarkedThread(String id, ArrayList<MarkedMethodExecution> methodExecutions) {
		this.id = id;
		this.methodExecutions = methodExecutions;
	}

	public String getId() {
		return id;
	}

	public ArrayList<MarkedMethodExecution> getChildren() {
		return methodExecutions;
	}

	/**
	 * マーク固有のメソッドが呼び出されたかどうかを調べる
	 * @param commonMethodSignatures マーク外で呼び出された全メソッドのシグニチャ
	 */
	public void searchUniqueMethodInvocation(HashSet<String> commonMethodSignatures) {
		if (uniqueMethodInvokedFrom > 0) return;
		for (int i = 0; i < methodExecutions.size(); i++) {
			int h = methodExecutions.get(i).searchUniqueMethodInvocation(commonMethodSignatures);
			if (h > 0) uniqueMethodInvokedFrom = 1;
		}
	}
	
	/**
	 * マーク固有のメソッド実行をすべて取得する
	 * @param unmarkedMethodSignatures マーク外で実行された全メソッドのシグニチャ
	 * @return このスレッド内のマーク固有の全メソッド実行
	 */
	public ArrayList<MarkedMethodExecution> getUniqueMethodExecutions(HashSet<String> unmarkedMethodSignatures) {
		ArrayList<MarkedMethodExecution> uniqueMethodExecutions = new ArrayList<MarkedMethodExecution>();
		for (int i = 0; i < methodExecutions.size(); i++) {
			methodExecutions.get(i).getUniqueMethodExecutions(unmarkedMethodSignatures, uniqueMethodExecutions);
		}
		return null;
	}

	/**
	 * このスレッドからマーク固有のメソッドが呼び出されたか?
	 * @return 0: 呼び出されていない, 1: 呼び出された
	 */
	public int isUniqueMethodInvokedFrom() {
		return uniqueMethodInvokedFrom;
	}
}
