
net.sf.jagg.msd.Discriminators Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jagg-core Show documentation
Show all versions of jagg-core Show documentation
jAgg is a Java 5.0 API that supports “group by” operations on Lists of Java objects: aggregate operations such as count, sum, max, min, avg, and many more. It also allows custom aggregate operations.
The newest version!
package net.sf.jagg.msd;
import java.math.BigInteger;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.RandomAccess;
/**
* The Discriminators
utility class supplies utility functionality
* for Discriminators
.
*
* @author Randy Gettman
* @since 0.5.0
*/
public class Discriminators
{
/**
* Do not instantiate the Discriminators
class.
*/
private Discriminators() {}
/**
* Gets the proper Discriminator
for a particular object.
* @param object The object representing the type to be discriminated.
* @param The type of the object to be discriminated.
* @return A Discriminator
capable of discriminating objects of
* type T
, or null
if one couldn't be found.
*/
@SuppressWarnings("unchecked")
public static Discriminator getDiscriminator(T object)
{
Discriminator discriminator;
// Try for decreasing order of popularity.
if (object instanceof Integer)
discriminator = (Discriminator) new IntegerDiscriminator();
else if (object instanceof Double)
discriminator = (Discriminator) new DoubleDiscriminator();
else if (object instanceof CharSequence)
discriminator = (Discriminator) new CharSequenceDiscriminator();
else if (object instanceof Enum)
discriminator = (Discriminator) new EnumDiscriminator();
else if (object instanceof Long)
discriminator = (Discriminator) new LongDiscriminator();
else if (object instanceof Date)
discriminator = (Discriminator) new DateDiscriminator();
else if (object instanceof Calendar)
discriminator = (Discriminator) new CalendarDiscriminator();
else if (object instanceof Float)
discriminator = (Discriminator) new FloatDiscriminator();
else if (object instanceof Short)
discriminator = (Discriminator) new ShortDiscriminator();
else if (object instanceof Byte)
discriminator = (Discriminator) new ByteDiscriminator();
else if (object instanceof Boolean)
discriminator = (Discriminator) new BooleanDiscriminator();
else if (object instanceof Character)
discriminator = (Discriminator) new CharacterDiscriminator();
else if (object instanceof BigInteger)
discriminator = (Discriminator) new BigIntegerDiscriminator();
else if (object instanceof BigDecimal)
discriminator = (Discriminator) new BigDecimalDiscriminator();
else if (object instanceof RandomAccess && object instanceof List)
discriminator = (Discriminator) new RandomAccessListDiscriminator();
else if (object instanceof Collection)
discriminator = (Discriminator) new CollectionDiscriminator();
else if (object instanceof Class)
discriminator = new ClassDiscriminator();
else if (object instanceof Object[])
discriminator = (Discriminator) new ArrayDiscriminator();
else if (object instanceof Discriminable)
discriminator = new DiscriminableDiscriminator();
else
return null;
return new NullDiscriminator(discriminator);
}
/**
* Gets the proper Discriminator
for a particular object's
* class.
* @param c The Class
object representing the type to be
* discriminated.
* @param The type of the object to be discriminated.
* @return A Discriminator
capable of discriminating objects of
* type T
, or null
if one couldn't be found.
*/
@SuppressWarnings("unchecked")
public static Discriminator getDiscriminator(Class c)
{
Discriminator discriminator;
// Try for decreasing order of popularity.
if (Integer.class == c || Integer.TYPE == c)
discriminator = (Discriminator) new IntegerDiscriminator();
else if (Double.class == c || Double.TYPE == c)
discriminator = (Discriminator) new DoubleDiscriminator();
else if (CharSequence.class.isAssignableFrom(c))
discriminator = (Discriminator) new CharSequenceDiscriminator();
else if (Enum.class.isAssignableFrom(c))
discriminator = (Discriminator) new EnumDiscriminator();
else if (Long.class == c || Long.TYPE == c)
discriminator = (Discriminator) new LongDiscriminator();
else if (Date.class.isAssignableFrom(c))
discriminator = (Discriminator) new DateDiscriminator();
else if (Calendar.class.isAssignableFrom(c))
discriminator = (Discriminator) new CalendarDiscriminator();
else if (Float.class == c || Float.TYPE == c)
discriminator = (Discriminator) new FloatDiscriminator();
else if (Short.class == c || Short.TYPE == c)
discriminator = (Discriminator) new ShortDiscriminator();
else if (Byte.class == c || Byte.TYPE == c)
discriminator = (Discriminator) new ByteDiscriminator();
else if (Boolean.class == c || Boolean.TYPE == c)
discriminator = (Discriminator) new BooleanDiscriminator();
else if (Character.class == c || Character.TYPE == c)
discriminator = (Discriminator) new CharacterDiscriminator();
else if (BigInteger.class == c)
discriminator = (Discriminator) new BigIntegerDiscriminator();
else if (BigDecimal.class == c)
discriminator = (Discriminator) new BigDecimalDiscriminator();
else if (RandomAccess.class.isAssignableFrom(c) && List.class.isAssignableFrom(c))
discriminator = (Discriminator) new RandomAccessListDiscriminator();
else if (Collection.class.isAssignableFrom(c))
discriminator = (Discriminator) new CollectionDiscriminator();
else if (Class.class.isAssignableFrom(c))
discriminator = new ClassDiscriminator();
else if (Object[].class.isAssignableFrom(c))
discriminator = (Discriminator) new ArrayDiscriminator();
else if (Discriminable.class.isAssignableFrom(c))
discriminator = new DiscriminableDiscriminator();
else
return null;
return new NullDiscriminator(discriminator);
}
/**
* "Flattens" a List
of Lists
into a new
* List
of T objects.
* @param listOfLists A List
of Lists
.
* @param The type of object.
* @return A flattened List
that contains only the elements
* of each of the internal lists, in the order found.
*/
@SuppressWarnings("ForLoopReplaceableByForEach")
public static List getFlattenedList(List> listOfLists)
{
// Get size first to avoid ArrayList re-allocation of the internal array.
int size = 0;
int numLists = listOfLists.size();
for (int i = 0; i < numLists; i++)
size += listOfLists.get(i).size();
List flatList = new ArrayList(size);
// Avoid Iterator creation overhead.
for (int i = 0; i < numLists; i++)
{
List internalList = listOfLists.get(i);
for (int j = 0; j < internalList.size(); j++)
flatList.add(internalList.get(j));
}
return flatList;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy