private void constructColumns()

in tapestry-contrib/src/org/apache/tapestry/contrib/palette/Palette.java [392:471]


    private void constructColumns()
    {
        // Build a Set around the list of selected items.

        List selected = getSelected();

        if (selected == null)
            selected = Collections.EMPTY_LIST;

        SortMode sortMode = getSort();

        boolean sortUser = sortMode == SortMode.USER;

        List selectedOptions = null;

        if (sortUser)
        {
            int count = selected.size();
            selectedOptions = new ArrayList(count);

            for (int i = 0; i < count; i++)
                selectedOptions.add(null);
        }

        PaletteColumn availableColumn =
            new PaletteColumn((String) _symbols.get("availableName"), getRows());
        PaletteColumn selectedColumn = new PaletteColumn(getName(), getRows());

        // Each value specified in the model will go into either the selected or available
        // lists.

        IPropertySelectionModel model = getModel();

        int count = model.getOptionCount();

        for (int i = 0; i < count; i++)
        {
            Object optionValue = model.getOption(i);

            PaletteOption o = new PaletteOption(model.getValue(i), model.getLabel(i));

            int index = selected.indexOf(optionValue);
            boolean isSelected = index >= 0;

            if (sortUser && isSelected)
            {
                selectedOptions.set(index, o);
                continue;
            }

            PaletteColumn c = isSelected ? selectedColumn : availableColumn;

            c.addOption(o);
        }

        if (sortUser)
        {
            Iterator i = selectedOptions.iterator();
            while (i.hasNext())
            {
                PaletteOption o = (PaletteOption) i.next();
                selectedColumn.addOption(o);
            }
        }

        if (sortMode == SortMode.VALUE)
        {
            availableColumn.sortByValue();
            selectedColumn.sortByValue();
        }
        else
            if (sortMode == SortMode.LABEL)
            {
                availableColumn.sortByLabel();
                selectedColumn.sortByLabel();
            }

        setAvailableColumn(availableColumn);
        setSelectedColumn(selectedColumn);
    }