package org.eclipse.dltk.internal.debug.core.model;

import java.util.Comparator;

import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IVariable;

public class VariableNameComparator implements Comparator<IVariable> {

	@Override
	public int compare(IVariable v1, IVariable v2) {
		int result = 0;
		try {
			String v1Str = (v1 != null) ? v1.getName() : ""; //$NON-NLS-1$
			v1Str = v1Str.replaceAll("\\[", "").replaceAll("\\]", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
			int v1Int = 0;
			boolean v1IsInt;
			String v2Str = (v2 != null) ? v2.getName() : ""; //$NON-NLS-1$
			v2Str = v2Str.replaceAll("\\[", "").replaceAll("\\]", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
			int v2Int = 0;
			boolean v2IsInt;

			try {
				v1Int = Integer.parseInt(v1Str);
				v1IsInt = true;
			} catch (NumberFormatException nxcn) {
				v1IsInt = false;
			}

			try {
				v2Int = Integer.parseInt(v2Str);
				v2IsInt = true;
			} catch (NumberFormatException nxcn) {
				v2IsInt = false;
			}

			if (v1IsInt != v2IsInt) {
				return v1IsInt ? -1 : +1;
			} else if (v1IsInt) {
				if (v1Int > v2Int) {
					result = 1;
				} else if (v1Int < v2Int) {
					result = -1;
				} else {
					result = 0;
				}
			} else {
				result = v1Str.compareTo(v2Str);
			}
		} catch (DebugException e) {
		}

		return result;
	}

}
