/**
 * Licensed under the Artistic License; you may not use this file
 * except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://displaytag.sourceforge.net/license.html
 *
 * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */
package org.displaytag.sample;

import java.util.ArrayList;
import java.util.Random;


/**
 * Just a utility class for testing out the table and column tags. When this class is created, it loads itself with a
 * number of ListObjects that are shown throughout the various example pages that exercise the table object. If created
 * via the default constructor, this loads itself with 60 ListObjects.
 * @author epesh
 * @author Fabrizio Giustina
 * @version $Revision: 1.1 $ ($Author: clmg $)
 */
public class TestList extends ArrayList
{

    /**
     * D1597A17A6.
     */
    private static final long serialVersionUID = 899149338534L;

    /**
     * Creats a TestList that is filled with 60 ListObjects suitable for testing.
     */
    public TestList()
    {
        super();

        for (int j = 0; j < 60; j++)
        {
            add(new ListObject());
        }
    }

    /**
     * Creates a TestList that is filled with [size] ListObjects suitable for testing.
     * @param size int size of the list
     * @param duplicates boolean put duplicates in the list
     */
    public TestList(int size, boolean duplicates)
    {
        if (duplicates)
        {
            // generate a random number between 1 and 3 and duplicate that many number of times.
            for (int j = 0; j < size; j++)
            {

                ListObject object1 = new ListObject();
                ListObject object2 = new ListObject();
                ListObject object3 = new ListObject();

                int random = new Random().nextInt(3);
                for (int k = 0; k <= random; k++)
                {
                    add(object1);
                }

                object1.setId(object2.getId());

                random = new Random().nextInt(3);
                for (int k = 0; k <= random; k++)
                {
                    add(object1);
                    add(object2);
                }

                object1.setEmail(object3.getEmail());

                random = new java.util.Random().nextInt(3);
                for (int k = 0; k <= random; k++)
                {
                    add(object1);
                }
            }
        }
        else
        {
            for (int j = 0; j < size; j++)
            {
                add(new ListObject());
            }
        }
    }

    /**
     * Returns a ListObject using get(index) from the Array.
     * @param index int index of the List object into the array
     * @return ListObject
     */
    public ListObject getItem(int index)
    {
        return (ListObject) super.get(index);
    }

}
