com.jaspersoft.studio.server.properties.ListOfValuesSection.java Source code

Java tutorial

Introduction

Here is the source code for com.jaspersoft.studio.server.properties.ListOfValuesSection.java

Source

/*******************************************************************************
 * Copyright (C) 2005 - 2014 TIBCO Software Inc. All rights reserved.
 * http://www.jaspersoft.com.
 * 
 * Unless you have purchased  a commercial license agreement from Jaspersoft,
 * the following license terms  apply:
 * 
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 ******************************************************************************/
package com.jaspersoft.studio.server.properties;

import java.util.List;

import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ListItem;
import com.jaspersoft.studio.properties.view.TabbedPropertySheetPage;
import com.jaspersoft.studio.swt.widgets.table.DeleteButton;
import com.jaspersoft.studio.swt.widgets.table.INewElement;
import com.jaspersoft.studio.swt.widgets.table.ListContentProvider;
import com.jaspersoft.studio.swt.widgets.table.ListOrderButtons;
import com.jaspersoft.studio.swt.widgets.table.NewButton;
import com.jaspersoft.studio.utils.Misc;

public class ListOfValuesSection extends ASection {
    private final class TLabelProvider extends LabelProvider implements ITableLabelProvider {

        public String getColumnText(Object element, int columnIndex) {
            ListItem dto = (ListItem) element;
            if (dto != null)
                switch (columnIndex) {
                case 0:
                    return dto.getLabel();
                case 1:
                    if (dto.getValue() != null)
                        return dto.getValue().toString();
                }
            return ""; //$NON-NLS-1$
        }

        public Image getColumnImage(Object element, int columnIndex) {
            return null;
        }
    }

    private Table table;
    private TableViewer tableViewer;
    private NewButton bnew;
    private DeleteButton bdel;
    private ListOrderButtons border;

    @Override
    protected void createSectionControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
        buildTable(parent);

        Composite bGroup = new Composite(parent, SWT.NONE);
        bGroup.setLayout(new GridLayout(1, false));
        bGroup.setLayoutData(new GridData(GridData.FILL_VERTICAL));
        bGroup.setBackground(parent.getBackground());

        bnew = new NewButton();
        bnew.createNewButtons(bGroup, tableViewer, new INewElement() {

            public Object newElement(List<?> input, int pos) {
                return new ListItem();
            }

        });

        bdel = new DeleteButton();
        bdel.createDeleteButton(bGroup, tableViewer);
        border = new ListOrderButtons();
        border.createOrderButtons(bGroup, tableViewer);
    }

    private void buildTable(Composite composite) {
        table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.minimumHeight = 200;
        table.setLayoutData(gd);
        table.setHeaderVisible(true);
        table.setLinesVisible(true);

        tableViewer = new TableViewer(table);
        attachContentProvider(tableViewer);
        attachLabelProvider(tableViewer);
        attachCellEditors(tableViewer, table);

        TableLayout tlayout = new TableLayout();
        tlayout.addColumnData(new ColumnWeightData(50));
        tlayout.addColumnData(new ColumnWeightData(50));
        table.setLayout(tlayout);

        TableColumn[] column = new TableColumn[2];
        column[0] = new TableColumn(table, SWT.NONE);
        column[0].setText("Name");

        column[1] = new TableColumn(table, SWT.NONE);
        column[1].setText("Value");

        for (int i = 0, n = column.length; i < n; i++)
            column[i].pack();

    }

    private void attachLabelProvider(TableViewer viewer) {
        viewer.setLabelProvider(new TLabelProvider());
    }

    private void attachContentProvider(TableViewer viewer) {
        viewer.setContentProvider(new ListContentProvider());
    }

    private void attachCellEditors(final TableViewer viewer, Composite parent) {
        viewer.setCellModifier(new ICellModifier() {
            public boolean canModify(Object element, String property) {
                if (property.equals("KEY")) //$NON-NLS-1$
                    return true;
                if (property.equals("VALUE")) //$NON-NLS-1$
                    return true;
                return false;
            }

            public Object getValue(Object element, String property) {
                ListItem mi = (ListItem) element;
                if (property.equals("KEY"))//$NON-NLS-1$
                    return Misc.nvl(mi.getLabel());
                if (property.equals("VALUE"))//$NON-NLS-1$
                    return Misc.nvl(mi.getValue(), "");
                return null;
            }

            public void modify(Object element, String property, Object value) {
                TableItem ti = (TableItem) element;
                ListItem mi = (ListItem) ti.getData();

                if (property.equals("KEY")) //$NON-NLS-1$
                    mi.setLabel((String) value);
                if (property.equals("VALUE")) //$NON-NLS-1$
                    mi.setValue((String) value);

                tableViewer.update(element, new String[] { property });
                tableViewer.refresh();
            }
        });

        viewer.setCellEditors(new CellEditor[] { new TextCellEditor(parent), new TextCellEditor(parent) });
        viewer.setColumnProperties(new String[] { "KEY", "VALUE" }); //$NON-NLS-1$  
    }

    @Override
    public void enableFields(boolean enable) {
        table.setEnabled(enable);
        bnew.setEnabled(enable);
        border.setEnabled(enable);
        bdel.setEnabled(enable);
    }

    @Override
    protected void bind() {
        // IObservableList observableList = Observables.staticObservableList(res
        // .getValue().getListOfValues());
        // ObservableListContentProvider contentProvider = new
        // ObservableListContentProvider();
        //
        // tableViewer.setContentProvider(contentProvider);
        tableViewer.setInput(res.getValue().getListOfValues());
    }

}