// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.tools; //import java.awt.Color; //import java.io.File; //import java.io.IOException; //import java.io.InputStream; //import java.io.OutputStream; //import java.io.Reader; //import java.text.MessageFormat; import java.util.Collection; /** * GWT * * changelog * commented out the stuff that does not work in client code */ /** * Basic utils, that can be useful in different parts of the program. */ public class Utils { public static <T> boolean exists(Iterable<? extends T> collection, Predicate<? super T> predicate) { for (T item : collection) { if (predicate.evaluate(item)) return true; } return false; } // public static <T> boolean exists(Iterable<T> collection, Class<? extends T> klass) { // for (Object item : collection) { // if (klass.isInstance(item)) // return true; // } // return false; // } public static <T> T find(Iterable<? extends T> collection, Predicate<? super T> predicate) { for (T item : collection) { if (predicate.evaluate(item)) return item; } return null; } // @SuppressWarnings("unchecked") // public static <T> T find(Iterable<? super T> collection, Class<? extends T> klass) { // for (Object item : collection) { // if (klass.isInstance(item)) // return (T) item; // } // return null; // } // // /** // * Filter a collection by (sub)class. // * This is an efficient read-only implementation. // */ // public static <S, T extends S> SubclassFilteredCollection<S, T> filteredCollection(Collection<S> collection, final Class<T> klass) { // return new SubclassFilteredCollection<S, T>(collection, new Predicate<S>() { // @Override // public boolean evaluate(S o) { // return klass.isInstance(o); // } // }); // } public static <T> int indexOf(Iterable<? extends T> collection, Predicate<? super T> predicate) { int i = 0; for (T item : collection) { if (predicate.evaluate(item)) return i; i++; } return -1; } /** * Get minimum of 3 values */ public static int min(int a, int b, int c) { if (b < c) { if (a < b) return a; return b; } else { if (a < c) return a; return c; } } public static int max(int a, int b, int c, int d) { return Math.max(Math.max(a, b), Math.max(c, d)); } /** * for convenience: test whether 2 objects are either both null or a.equals(b) */ public static <T> boolean equal(T a, T b) { if (a == b) return true; return (a != null && a.equals(b)); } // public static void ensure(boolean condition, String message, Object...data) { // if (!condition) // throw new AssertionError( // MessageFormat.format(message,data) // ); // } /** * return the modulus in the range [0, n) */ public static int mod(int a, int n) { if (n <= 0) throw new IllegalArgumentException(); int res = a % n; if (res < 0) { res += n; } return res; } /** * Joins a list of strings (or objects that can be converted to string via * Object.toString()) into a single string with fields separated by sep. * @param sep the separator * @param values collection of objects, null is converted to the * empty string * @return null if values is null. The joined string otherwise. */ public static String join(String sep, Collection<?> values) { if (sep == null) throw new IllegalArgumentException(); if (values == null) return null; if (values.isEmpty()) return ""; StringBuilder s = null; for (Object a : values) { if (a == null) { a = ""; } if(s != null) { s.append(sep).append(a.toString()); } else { s = new StringBuilder(a.toString()); } } return s.toString(); } // /** // * convert Color to String // * (Color.toString() omits alpha value) // */ // public static String toString(Color c) { // if (c == null) // return "null"; // if (c.getAlpha() == 255) // return String.format("#%06x", c.getRGB() & 0x00ffffff); // else // return String.format("#%06x(alpha=%d)", c.getRGB() & 0x00ffffff, c.getAlpha()); // } // // /** // * convert float range 0 <= x <= 1 to integer range 0..255 // * when dealing with colors and color alpha value // * @return null if val is null, the corresponding int if val is in the // * range 0...1. If val is outside that range, return 255 // */ // public static Integer color_float2int(Float val) { // if (val == null) // return null; // if (val < 0 || val > 1) // return 255; // return (int) (255f * val + 0.5f); // } // // /** // * convert back // */ // public static Float color_int2float(Integer val) { // if (val == null) // return null; // if (val < 0 || val > 255) // return 1f; // return ((float) val) / 255f; // } // // public static Color complement(Color clr) { // return new Color(255 - clr.getRed(), 255 - clr.getGreen(), 255 - clr.getBlue(), clr.getAlpha()); // } // // public static int copyStream(InputStream source, OutputStream destination) throws IOException { // int count = 0; // byte[] b = new byte[512]; // int read; // while ((read = source.read(b)) != -1) { // count += read; // destination.write(b, 0, read); // } // return count; // } // // public static boolean deleteDirectory(File path) { // if( path.exists() ) { // File[] files = path.listFiles(); // for(int i=0; i<files.length; i++) { // if(files[i].isDirectory()) { // deleteDirectory(files[i]); // } // else { // files[i].delete(); // } // } // } // return( path.delete() ); // } // // /** // * <p>Utility method for closing an input stream.</p> // * // * @param is the input stream. May be null. // */ // public static void close(InputStream is){ // if (is == null) return; // try { // is.close(); // } catch(IOException e){ // // ignore // } // } // // /** // * <p>Utility method for closing an output stream.</p> // * // * @param os the output stream. May be null. // */ // public static void close(OutputStream os){ // if (os == null) return; // try { // os.close(); // } catch(IOException e){ // // ignore // } // } // // /** // * <p>Utility method for closing a reader.</p> // * // * @param reader the reader. May be null. // */ // public static void close(Reader reader){ // if (reader == null) return; // try { // reader.close(); // } catch(IOException e){ // // ignore // } // } }