Newer
Older
org.ntlab.traceDebugger / src / org / ntlab / traceDebugger / VariableLabelProvider.java
package org.ntlab.traceDebugger;

import org.eclipse.jface.viewers.ITableColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.Trace;
import org.ntlab.traceDebugger.analyzerProvider.DeltaMarkerManager;

public class VariableLabelProvider extends LabelProvider implements ITableLabelProvider, ITableColorProvider {
	@Override
	public String getColumnText(Object element, int columnIndex) {
		if (element instanceof TreeNode) {
			Object value = ((TreeNode)element).getValue();
			if (value instanceof String) {
				String name = (String)value;
				switch (columnIndex) {
				case 0:
					return name.substring(0, name.indexOf(":"));
				case 1:
					String valueName = name.substring(name.indexOf(":") + 1);
					valueName = valueName.substring(valueName.lastIndexOf(" ") + 1);
					boolean isConstructor = name.contains("Constructor");
					return getReadableName(valueName, isConstructor);
				}
			}
			if (value instanceof Variable) {
				Variable variableData = (Variable)value;
				String variableName = variableData.getVariableName();
				switch (columnIndex) {
				case 0:
					if (variableName.contains("[")) {
						return variableName.substring(variableName.lastIndexOf("["));
					} else if (variableName.contains(".")) {
						return variableName.substring(variableName.lastIndexOf(".") + 1);	
					}
					return variableName;
				case 1:
					String simpleName;
					String id;
					if (variableData.getVariableType().isContainerSide()) {
						simpleName = variableData.getContainerClassName();
						id = variableData.getContainerId();
					} else {
						simpleName = variableData.getValueClassName();
						id = variableData.getValueId();
					}
					simpleName = simpleName.substring(simpleName.lastIndexOf(".") + 1);
					if (simpleName.equals(Variable.NULL_VALUE)) {
						return simpleName;
					} else {
						return simpleName + " (" + "id = " + id + ")";	
					}
				}
			}
		}
		return "テスト用テキスト" + columnIndex;
	}
	
	@Override
	public Image getColumnImage(Object element, int columnIndex) {
		return getImage(element);
	}
	
	@Override
	public Image getImage(Object element) {
		return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
	}

	@Override
	public Color getForeground(Object element, int columnIndex) {
		return null;
	}

	@Override
	public Color getBackground(Object element, int columnIndex) {
		if (element instanceof TreeNode) {
			Object value = ((TreeNode)element).getValue();
			if (value instanceof Variable) {
				Variable variable = (Variable)value;
				Object markerId = variable.getAdditionalAttribute("markerId");
				if (!(markerId instanceof String)) return null;
				switch ((String)markerId) {
				case DeltaMarkerManager.SRC_SIDE_DELTA_MARKER:
					return new Color(Display.getDefault(), 255, 128, 0);
				case DeltaMarkerManager.DST_SIDE_DELTA_MARKER:
					return Display.getDefault().getSystemColor(SWT.COLOR_CYAN);
				case DeltaMarkerManager.COORDINATOR_DELTA_MARKER:
					return Display.getDefault().getSystemColor(SWT.COLOR_GREEN);
				}
			}
		}
		return null;
	}
	
	private String getReadableName(String name, boolean isConstrutor) {
		if (!(name.contains("("))) {
			String[] splits = name.split("\\.");
			if (splits.length < 2) return name;
			return splits[splits.length - 2] + "." + splits[splits.length - 1];
		}
		StringBuilder sb = new StringBuilder();	
		String receiverTypeAndMethodName = name.substring(0, name.indexOf("("));
		String[] receiverTypeAndMethodNameSplits = receiverTypeAndMethodName.split("\\."); 
		if (receiverTypeAndMethodNameSplits.length < 2) {
			sb.append(receiverTypeAndMethodName);
		} else {
			if (!isConstrutor) {
				sb.append(receiverTypeAndMethodNameSplits[receiverTypeAndMethodNameSplits.length - 2]);
				sb.append(".");
			}
			sb.append(receiverTypeAndMethodNameSplits[receiverTypeAndMethodNameSplits.length - 1]);
		}
		sb.append("(");
		String argsName = name.substring(name.indexOf("(") + 1, name.lastIndexOf(")"));
		String delimiter = "";
		for (String argName : argsName.split(",")) {
			String[] argNameSplits = argName.split("\\.");
			if (argNameSplits.length < 1) {
				sb.append(delimiter + argName);
			} else {
				sb.append(delimiter + argNameSplits[argNameSplits.length - 1]);
			}
			delimiter = ",";
		}
		sb.append(")");
		return sb.toString();		
	}
}