/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
package org.ebayopensource.turmeric.eclipse.mavenapi.internal.collections;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
import org.apache.commons.lang.ObjectUtils;
/**
* The Class ListUtil.
*
* @author James Ervin
*/
public class ListUtil {
/**
* Transformed.
*
* @param <T> the generic type
* @param transformer the transformer
* @param list the list
* @return the list
*/
public static <T> List<T> transformed(final Transformer<T> transformer,
final List<?> list) {
return transformed(transformer, list.toArray());
}
/**
* Transformed.
*
* @param <T> the generic type
* @param transformer the transformer
* @param objects the objects
* @return the list
*/
public static <T> List<T> transformed(final Transformer<T> transformer,
final Object... objects) {
final List<T> list = new ArrayList<T>() {
private static final long serialVersionUID = 4888742388896207408L;
private final Transformer<T> trans = transformer;
@Override
public void add(int index, T element) {
super.add(index, trans.transform(element));
}
@Override
public boolean add(T o) {
return super.add(trans.transform(o));
}
@Override
public boolean addAll(Collection<? extends T> c) {
final List<T> list = new ArrayList<T>();
for (final T t : c)
list.add(trans.transform(t));
return super.addAll(list);
}
@Override
public boolean addAll(int index, Collection<? extends T> c) {
final List<T> list = new ArrayList<T>();
for (final T t : c)
list.add(trans.transform(t));
return super.addAll(index, list);
}
@Override
public boolean contains(Object elem) {
return super.contains(trans.transform(elem));
}
@Override
public int indexOf(Object elem) {
return super.indexOf(trans.transform(elem));
}
@Override
public int lastIndexOf(Object elem) {
return super.lastIndexOf(trans.transform(elem));
}
@Override
public boolean remove(Object o) {
return super.remove(trans.transform(o));
}
@Override
public T set(int index, T element) {
return super.set(index, trans.transform(element));
}
@Override
public boolean containsAll(Collection<?> c) {
final List<T> list = new ArrayList<T>();
for (final Object t : c)
list.add(trans.transform(t));
return super.containsAll(list);
}
@Override
public boolean removeAll(Collection<?> c) {
final List<T> list = new ArrayList<T>();
for (final Object t : c)
list.add(trans.transform(t));
return super.removeAll(list);
}
@Override
public boolean retainAll(Collection<?> c) {
final List<T> list = new ArrayList<T>();
for (final Object t : c)
list.add(trans.transform(t));
return super.retainAll(list);
}
};
for (final Object object : objects)
list.add(transformer.transform(object));
return list;
}
/**
* Array.
*
* @param <T> the generic type
* @param objects the objects
* @return the list
*/
public static <T> List<T> array(final T... objects) {
final List<T> list = new ArrayList<T>();
add(list, objects);
return list;
}
/**
* Array.
*
* @param <T> the generic type
* @param collection the collection
* @return the list
*/
public static <T> List<T> array(final Collection<T> collection) {
final List<T> list = new ArrayList<T>();
if (collection != null && collection.size() > 0)
list.addAll(collection);
return list;
}
/**
* Linked.
*
* @param <T> the generic type
* @param objects the objects
* @return the list
*/
public static <T> List<T> linked(final T... objects) {
final List<T> list = new LinkedList<T>();
add(list, objects);
return list;
}
/**
* Linked.
*
* @param <T> the generic type
* @param collection the collection
* @return the list
*/
public static <T> List<T> linked(final Collection<T> collection) {
final List<T> list = new LinkedList<T>();
if (collection != null && collection.size() > 0)
list.addAll(collection);
return list;
}
/**
* New list.
*
* @param <T> the generic type
* @param objects the objects
* @return the list
*/
public static <T> List<T> newList(final T... objects) {
return array(objects);
}
/**
* New list.
*
* @param <T> the generic type
* @param objects the objects
* @return the list
*/
public static <T> List<T> newList(final Collection<T> objects) {
return array(objects);
}
/**
* List.
*
* @param <T> the generic type
* @param objects the objects
* @return the list
*/
public static <T> List<T> list(final T... objects) {
return array(objects);
}
/**
* List.
*
* @param <T> the generic type
* @param collection the collection
* @return the list
*/
public static <T> List<T> list(final Collection<T> collection) {
final List<T> list = new ArrayList<T>();
if (collection != null && collection.size() > 0)
list.addAll(collection);
return list;
}
/**
* Adds the.
*
* @param <T> the generic type
* @param list the list
* @param objects the objects
* @return the list
*/
public static <T> List<T> add(final List<T> list, final T... objects) {
if (objects == null)
return list;
for (final T object : objects)
list.add(object);
return list;
}
/**
* Adds the ignore null.
*
* @param <T> the generic type
* @param list the list
* @param objects the objects
* @return the list
*/
public static <T> List<T> addIgnoreNull(final List<T> list,
final T... objects) {
if (objects == null)
return list;
for (final T object : objects)
if (object != null)
list.add(object);
return list;
}
/**
* List add.
*
* @param <T> the generic type
* @param list the list
* @param objects the objects
* @return the list
*/
public static <T> List<T> listAdd(final List<T> list, final T... objects) {
return add(list, objects);
}
/**
* Removes the.
*
* @param <T> the generic type
* @param list the list
* @param objects the objects
* @return the list
*/
public static <T> List<T> remove(final List<T> list, final T... objects) {
for (final T object : objects)
list.remove(object);
return list;
}
/**
* List remove.
*
* @param <T> the generic type
* @param list the list
* @param objects the objects
* @return the list
*/
public static <T> List<T> listRemove(final List<T> list, final T... objects) {
return remove(list, objects);
}
/**
* Caseless.
*
* @param <E> the element type
* @param objects the objects
* @return the list
*/
public static <E extends Object> List<String> caseless(final E... objects) {
final Transformer<String> transformer = new Transformer<String>() {
private static final long serialVersionUID = 1631027078150099602L;
@Override
public String transform(final Object input) {
return ObjectUtils.toString(input).toLowerCase();
}
};
return transformed(transformer, objects);
}
/**
* Caseless.
*
* @param list the list
* @return the list
*/
public static List<String> caseless(final List<?> list) {
return caseless(list.toArray());
}
/**
* Vector.
*
* @param <T> the generic type
* @param objects the objects
* @return the list
*/
public static <T> List<T> vector(final T... objects) {
final List<T> vector = new Vector<T>();
add(vector, objects);
return vector;
}
/**
* Vector.
*
* @param <T> the generic type
* @param collection the collection
* @return the list
*/
public static <T> List<T> vector(final Collection<T> collection) {
final List<T> vector = new Vector<T>();
if (collection != null && collection.size() > 0)
vector.addAll(collection);
return vector;
}
}