/******************************************************************************* * Copyright (c) 2006 Jeff Mesnil * 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 net.jmesnil.jmx.ui.internal; import java.lang.reflect.Array; import org.eclipse.core.runtime.Assert; public class StringUtils { public static final String NULL = "null"; //$NON-NLS-1$ public static String toString(Object obj, boolean detailed) { if (obj == null) { return NULL; } if (!obj.getClass().isArray()) { return obj.toString(); } if (detailed) { return toDetailedString(obj); } else { return toSimpleString(obj); } } private static final String toSimpleString(Object arrayObj) { Assert.isNotNull(arrayObj); Assert.isLegal(arrayObj.getClass().isArray()); String type = arrayObj.getClass().getComponentType().getName(); int length = Array.getLength(arrayObj); return type + '[' + length + ']'; } private static final String toDetailedString(Object arrayObj) { Assert.isNotNull(arrayObj); Assert.isLegal(arrayObj.getClass().isArray()); Object element; StringBuffer buff = new StringBuffer(); int length = Array.getLength(arrayObj); for (int i = 0; i < length; i++) { if (i > 0) { buff.append(", "); //$NON-NLS-1$ } element = Array.get(arrayObj, i); if (element == null) { buff.append(NULL); } else { buff.append(element.toString()); } } return buff.toString(); } public static String toString(String type) { return toString(type, true); } /* * this function is be called recursively to display multi-dimensional * arrays, e.g. int[][] */ @SuppressWarnings("unchecked") //$NON-NLS-1$ public static String toString(String type, boolean detailed) { Assert.isNotNull(type); Assert.isLegal(type.length() > 0); if (!isArray(type)) { return type; } try { Class clazz = StringUtils.class.getClassLoader().loadClass(type); if (clazz.isArray()) { if (detailed) { return toString(clazz.getComponentType().getName(), detailed) + "[]"; //$NON-NLS-1$ } else { return toString(clazz.getComponentType().getSimpleName(), detailed) + "[]"; //$NON-NLS-1$ } } } catch (ClassNotFoundException e) { // we do not know the class but we can still display a user-friendly // representation // of the array if (type.startsWith("[L") && type.endsWith(";")) { //$NON-NLS-1$ //$NON-NLS-2$ return toString(type.substring(2, type.length() - 1), detailed) + "[]"; //$NON-NLS-1$ } } return type; } private static boolean isArray(String type) { return type.startsWith("["); //$NON-NLS-1$ } }