package org.chartsy.chatsy.chat.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public final class ModelUtil { private ModelUtil() { } public static boolean areEqual(Object o1, Object o2) { if (o1 == o2) { return true; } else if (o1 == null || o2 == null) { return false; } else { return o1.equals(o2); } } public static boolean areBooleansEqual(Boolean b1, Boolean b2) { return (b1 == Boolean.TRUE && b2 == Boolean.TRUE) || (b1 != Boolean.TRUE && b2 != Boolean.TRUE); } public static boolean areDifferent(Object o1, Object o2) { return !areEqual(o1, o2); } public static boolean areBooleansDifferent(Boolean b1, Boolean b2) { return !areBooleansEqual(b1, b2); } public static boolean hasNonNullElement(Object[] array) { if (array != null) { final int n = array.length; for (int i = 0; i < n; i++) if (array[i] != null) return true; } return false; } public static String concat(String[] strs) { return concat(strs, " "); } public static String concat(String[] strs, String delim) { if (strs != null) { final StringBuilder buf = new StringBuilder(); final int n = strs.length; for (int i = 0; i < n; i++) { final String str = strs[i]; if (str != null) buf.append(str).append(delim); } final int length = buf.length(); if (length > 0) buf.setLength(length - 1); return buf.toString(); } else { return ""; } } public static boolean hasLength(String s) { return (s != null && s.length() > 0); } public static String nullifyIfEmpty(String s) { return ModelUtil.hasLength(s) ? s : null; } public static String nullifyingToString(Object o) { return o != null ? nullifyIfEmpty(o.toString()) : null; } public static boolean hasStringChanged(String oldString, String newString) { if (oldString == null && newString == null) { return false; } else if (oldString == null || newString == null) { return true; } else { return !oldString.equals(newString); } } public static String getTimeFromLong(long diff) { final String HOURS = "h"; final String MINUTES = "min"; final long MS_IN_A_DAY = 1000 * 60 * 60 * 24; final long MS_IN_AN_HOUR = 1000 * 60 * 60; final long MS_IN_A_MINUTE = 1000 * 60; long numDays = diff / MS_IN_A_DAY; diff = diff % MS_IN_A_DAY; long numHours = diff / MS_IN_AN_HOUR; diff = diff % MS_IN_AN_HOUR; long numMinutes = diff / MS_IN_A_MINUTE; StringBuilder buf = new StringBuilder(); if (numDays > 0) buf.append(numDays).append(" d, "); if (numHours > 0) buf.append(numHours).append(" ").append(HOURS).append(", "); if (numMinutes > 0) buf.append(numMinutes).append(" ").append(MINUTES); String result = buf.toString(); if (numMinutes < 1) result = "< 1 min"; return result; } public static List<Object> iteratorAsList(Iterator i) { ArrayList<Object> list = new ArrayList<Object>(10); while (i.hasNext()) list.add(i.next()); return list; } public static Iterator reverseListIterator(ListIterator i) { return new ReverseListIterator(i); } } class ReverseListIterator<T> implements Iterator<T> { private ListIterator<T> _i; ReverseListIterator(ListIterator<T> i) { _i = i; while (_i.hasNext()) _i.next(); } @Override public boolean hasNext() { return _i.hasPrevious(); } @Override public T next() { return _i.previous(); } @Override public void remove() { _i.remove(); } }