001 /* 002 * Created on Oct 7, 2009 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 005 * the License. You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 010 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 011 * specific language governing permissions and limitations under the License. 012 * 013 * Copyright @2009-2011-2010 the original author or authors. 014 */ 015 package org.fest.util; 016 017 import static org.fest.util.Arrays.isArray; 018 import static org.fest.util.Strings.quote; 019 020 import java.awt.Dimension; 021 import java.io.File; 022 import java.util.Calendar; 023 import java.util.Collection; 024 import java.util.Comparator; 025 import java.util.Date; 026 import java.util.Map; 027 028 /** 029 * Obtains the {@code toString} representation of an object. 030 * 031 * @author Alex Ruiz 032 * @author Joel Costigliola 033 * @author Yvonne Wang 034 */ 035 public final class ToString { 036 037 /** 038 * Returns the {@code toString} representation of the given object. It may or not the object's own implementation of 039 * {@code toString}. 040 * @param o the given object. 041 * @return the {@code toString} representation of the given object. 042 */ 043 public static String toStringOf(Object o) { 044 if (isArray(o)) return Arrays.format(o); 045 if (o instanceof Calendar) return toStringOf((Calendar) o); 046 if (o instanceof Class<?>) return toStringOf((Class<?>) o); 047 if (o instanceof Collection<?>) return toStringOf((Collection<?>) o); 048 if (o instanceof Date) return toStringOf((Date) o); 049 if (o instanceof Float) return toStringOf((Float) o); 050 if (o instanceof Long) return toStringOf((Long) o); 051 if (o instanceof Dimension) return toStringOf((Dimension) o); 052 if (o instanceof File) return toStringOf((File) o); 053 if (o instanceof Map<?, ?>) return toStringOf((Map<?, ?>) o); 054 if (o instanceof String) return quote((String) o); 055 if (o instanceof Comparator) return toStringOf((Comparator<?>) o); 056 return o == null ? null : o.toString(); 057 } 058 059 private static String toStringOf(Comparator<?> comparator) { 060 String comparatorSimpleClassName = comparator.getClass().getSimpleName(); 061 return quote(comparatorSimpleClassName.length() > 0 ? comparatorSimpleClassName : "anonymous comparator class"); 062 } 063 064 private static String toStringOf(Calendar c) { 065 return Dates.formatAsDatetime(c); 066 } 067 068 private static String toStringOf(Class<?> c) { 069 return c.getName(); 070 } 071 072 private static String toStringOf(Collection<?> c) { 073 return Collections.format(c); 074 } 075 076 private static String toStringOf(Date d) { 077 return Dates.formatAsDatetime(d); 078 } 079 080 private static String toStringOf(Float f) { 081 return String.format("%sf", f); 082 } 083 084 private static String toStringOf(Long l) { 085 return String.format("%sL", l); 086 } 087 088 private static String toStringOf(Dimension d) { 089 return String.format("(w=%s, h=%s)", d.width, d.height); 090 } 091 092 private static String toStringOf(File f) { 093 return f.getAbsolutePath(); 094 } 095 096 private static String toStringOf(Map<?, ?> m) { 097 return Maps.format(m); 098 } 099 100 private ToString() {} 101 }