All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alee.demo.content.SampleData Maven / Gradle / Ivy

There is a newer version: 1.2.8
Show newest version
/*
 * This file is part of WebLookAndFeel library.
 *
 * WebLookAndFeel library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * WebLookAndFeel library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with WebLookAndFeel library.  If not, see .
 */

package com.alee.demo.content;

import com.alee.api.annotations.NotNull;
import com.alee.api.annotations.Nullable;
import com.alee.api.ui.TextBridge;
import com.alee.demo.content.data.tree.model.SampleAsyncDataProvider;
import com.alee.demo.content.data.tree.model.SampleCustomizedExDataProvider;
import com.alee.demo.content.data.tree.model.SampleExDataProvider;
import com.alee.demo.content.data.tree.model.SampleNode;
import com.alee.extended.tree.AbstractExTreeDataProvider;
import com.alee.extended.tree.AsyncTreeDataProvider;
import com.alee.extended.tree.ExTreeDataProvider;
import com.alee.laf.combobox.WebComboBoxModel;
import com.alee.laf.list.ListCellParameters;
import com.alee.laf.list.WebListModel;
import com.alee.laf.tree.WebTreeModel;
import com.alee.managers.language.LM;
import com.alee.managers.language.LanguageSensitive;
import com.alee.utils.CollectionUtils;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import java.io.Serializable;
import java.util.List;

/**
 * Utility class providing various sample data for {@link com.alee.demo.DemoApplication} examples.
 *
 * @author Mikle Garin
 */
public final class SampleData
{
    /**
     * Returns sample short table model.
     *
     * @param editable whether or not model data should be editable
     * @return sample short table model
     */
    @NotNull
    public static TableModel createShortTableModel ( final boolean editable )
    {
        return new SampleTableModel ( editable, 5 );
    }

    /**
     * Returns sample long table model.
     *
     * @param editable whether or not model data should be editable
     * @return sample long table model
     */
    @NotNull
    public static TableModel createLongTableModel ( final boolean editable )
    {
        return new SampleTableModel ( editable, 12 );
    }

    /**
     * Sample model for example tables.
     */
    private static class SampleTableModel extends AbstractTableModel implements LanguageSensitive
    {
        /**
         * Whether or not model data should be editable.
         */
        private final boolean editable;

        /**
         * Amount of rows.
         */
        private final int rows;

        /**
         * Table data.
         */
        @NotNull
        private final Serializable[][] data;

        /**
         * Constructs new {@link SampleTableModel}.
         *
         * @param editable whether or not model data should be editable
         * @param rows     rows
         */
        public SampleTableModel ( final boolean editable, final int rows )
        {
            this.editable = editable;
            if ( rows > 12 )
            {
                throw new RuntimeException ( "Unsupported amount of rows: " + rows );
            }
            this.rows = rows;
            this.data = new Serializable[ rows ][ 5 ];
            for ( int row = 0; row < rows; row++ )
            {
                this.data[ row ][ 0 ] = LM.getState ( "demo.sample.data.grid.row." + row, "first.name" );
                this.data[ row ][ 1 ] = LM.getState ( "demo.sample.data.grid.row." + row, "last.name" );
                this.data[ row ][ 2 ] = LM.getState ( "demo.sample.data.grid.row." + row, "hobby" );
                this.data[ row ][ 3 ] = Integer.parseInt ( LM.getState ( "demo.sample.data.grid.row." + row, "age" ) );
                this.data[ row ][ 4 ] = Boolean.parseBoolean ( LM.getState ( "demo.sample.data.grid.row." + row, "vegeterian" ) );
            }
        }

        @NotNull
        @Override
        public Class getColumnClass ( final int column )
        {
            final Class columnClass;
            switch ( column )
            {
                case 3:
                    columnClass = Integer.class;
                    break;

                case 4:
                    columnClass = Boolean.class;
                    break;

                default:
                    columnClass = String.class;
                    break;
            }
            return columnClass;
        }

        @Override
        public int getColumnCount ()
        {
            return 5;
        }

        @NotNull
        @Override
        public String getColumnName ( final int column )
        {
            final String columnName;
            switch ( column )
            {
                case 0:
                    columnName = LM.get ( "demo.sample.data.grid.column.first.name" );
                    break;

                case 1:
                    columnName = LM.get ( "demo.sample.data.grid.column.last.name" );
                    break;

                case 2:
                    columnName = LM.get ( "demo.sample.data.grid.column.hobby" );
                    break;

                case 3:
                    columnName = LM.get ( "demo.sample.data.grid.column.age" );
                    break;

                case 4:
                    columnName = LM.get ( "demo.sample.data.grid.column.vegeterian" );
                    break;

                default:
                    throw new RuntimeException ( "There is no column for index: " + column );
            }
            return columnName;
        }

        @Override
        public int getRowCount ()
        {
            return rows;
        }

        @NotNull
        @Override
        public Object getValueAt ( final int rowIndex, final int columnIndex )
        {
            switch ( columnIndex )
            {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                    return data[ rowIndex ][ columnIndex ];

                default:
                    throw new RuntimeException ( "There is no column data for index: " + columnIndex );
            }
        }

        @Override
        public boolean isCellEditable ( final int rowIndex, final int columnIndex )
        {
            return editable;
        }

        @Override
        public void setValueAt ( @NotNull final Object aValue, final int rowIndex, final int columnIndex )
        {
            data[ rowIndex ][ columnIndex ] = ( Serializable ) aValue;
        }
    }

    /**
     * Returns sample {@link WebListModel}.
     *
     * @return sample {@link WebListModel}
     */
    @NotNull
    public static WebListModel createListModel ()
    {
        return new WebListModel ( createListData () );
    }

    /**
     * Returns sample {@link WebComboBoxModel}.
     *
     * @return sample {@link WebComboBoxModel}
     */
    @NotNull
    public static WebComboBoxModel createComboBoxModel ()
    {
        return new WebComboBoxModel ( createListData () );
    }

    /**
     * Returns {@link List} of sample data.
     *
     * @return {@link List} of sample data
     */
    @NotNull
    private static List createListData ()
    {
        return CollectionUtils.asList (
                new ListItem ( "item1" ),
                new ListItem ( "item2" ),
                new ListItem ( "item3" )
        );
    }

    /**
     * Sample list item object.
     * It supports translation based on the provided language key in combination with example key.
     */
    public static class ListItem implements TextBridge>
    {
        /**
         * Item language key.
         */
        @NotNull
        private final String key;

        /**
         * Constructs new {@link ListItem}.
         *
         * @param key item language key
         */
        public ListItem ( @NotNull final String key )
        {
            this.key = key;
        }

        @Nullable
        @Override
        public String getText ( @NotNull final ListCellParameters parameters )
        {
            return LM.get ( "demo.sample.data.list." + key );
        }
    }

    /**
     * Returns sample {@link AsyncTreeDataProvider} that delays child nodes loading by random (but reasonable) amount of time.
     *
     * @return sample {@link AsyncTreeDataProvider} that delays child nodes loading by random (but reasonable) amount of time
     */
    @NotNull
    public static AsyncTreeDataProvider createDelayingAsyncDataProvider ()
    {
        return new SampleAsyncDataProvider ();
    }

    /**
     * Returns sample {@link WebTreeModel} for checkbox tree.
     *
     * @return sample {@link WebTreeModel} for checkbox tree
     */
    @NotNull
    public static WebTreeModel createCheckBoxTreeModel ()
    {
        return createExTreeDataProvider ().createPlainModel ();
    }

    /**
     * Returns sample {@link ExTreeDataProvider}.
     *
     * @return sample {@link ExTreeDataProvider}
     */
    @NotNull
    public static AbstractExTreeDataProvider createExTreeDataProvider ()
    {
        return new SampleExDataProvider ();
    }

    /**
     * Returns sample {@link WebTreeModel} for checkbox tree.
     *
     * @return sample {@link WebTreeModel} for checkbox tree
     */
    @NotNull
    public static WebTreeModel createCustomizedCheckBoxTreeModel ()
    {
        return createCustomizedExCheckBoxTreeDataProvider ().createPlainModel ();
    }

    /**
     * Returns sample {@link ExTreeDataProvider} for checkbox tree.
     *
     * @return sample {@link ExTreeDataProvider} for checkbox tree
     */
    @NotNull
    public static AbstractExTreeDataProvider createCustomizedExCheckBoxTreeDataProvider ()
    {
        return new SampleCustomizedExDataProvider ();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy