com.microsoft.tfs.client.common.ui.wit.qe.DisplayFieldsResultOptionsControl.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.tfs.client.common.ui.wit.qe.DisplayFieldsResultOptionsControl.java

Source

// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See License.txt in the repository root.

package com.microsoft.tfs.client.common.ui.wit.qe;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;

import com.microsoft.tfs.client.common.ui.Messages;
import com.microsoft.tfs.client.common.ui.framework.helper.MessageBoxHelpers;
import com.microsoft.tfs.client.common.ui.framework.sizing.ControlSize;
import com.microsoft.tfs.core.clients.workitem.fields.FieldDefinition;
import com.microsoft.tfs.core.clients.workitem.fields.FieldDefinitionCollection;
import com.microsoft.tfs.core.clients.workitem.fields.FieldUsages;
import com.microsoft.tfs.core.clients.workitem.query.qe.DisplayField;
import com.microsoft.tfs.core.clients.workitem.query.qe.ResultOptions;

public class DisplayFieldsResultOptionsControl extends BaseResultOptionsControl {
    private Label widthLabel;
    private Text widthText;
    private DisplayField selectedDisplayField;
    private final Map nameToWidth = new HashMap();

    public DisplayFieldsResultOptionsControl(final Composite parent, final int style,
            final FieldDefinitionCollection fieldDefinitions, final ResultOptions resultOptions) {
        super(parent, style, fieldDefinitions, resultOptions);
    }

    @Override
    protected void setupTable(final Table table) {
        super.setupTable(table);

        final TableLayout tableLayout = new TableLayout();
        table.setLayout(tableLayout);

        TableColumn column = new TableColumn(table, SWT.NONE);
        column.setText(Messages.getString("DisplayFieldsResultOptionsControl.ColumnNameName")); //$NON-NLS-1$
        tableLayout.addColumnData(new ColumnWeightData(3, 100, true));

        column = new TableColumn(table, SWT.NONE);
        column.setText(Messages.getString("DisplayFieldsResultOptionsControl.ColumnNameWidth")); //$NON-NLS-1$
        tableLayout.addColumnData(new ColumnWeightData(1, 40, true));
    }

    @Override
    protected Object[] getItemsForSelectedColumns(final ResultOptions resultOptions) {
        return resultOptions.getDisplayFields().toArray();
    }

    @Override
    protected String getTextForSelectedColumnItem(final Object selectedColumnItem, final int index) {
        final DisplayField displayField = (DisplayField) selectedColumnItem;
        if (index == 0) {
            return displayField.getFieldName();
        } else if (index == 1) {
            return String.valueOf(displayField.getWidth());
        } else {
            return ""; //$NON-NLS-1$
        }
    }

    @Override
    protected boolean isFieldDefinitionAvailable(final FieldDefinition fieldDefinition,
            final ResultOptions resultOptions) {
        if (fieldDefinition.getUsage() == FieldUsages.WORK_ITEM_LINK && !resultOptions.isLinkQuery()) {
            return false;
        }
        if (!fieldDefinition.isQueryable()) {
            return false;
        }
        return !resultOptions.getDisplayFields().contains(fieldDefinition.getName());
    }

    @Override
    protected Object[] select(final FieldDefinition[] fieldDefinitionArray, final ResultOptions resultOptions) {
        final DisplayField[] fields = new DisplayField[fieldDefinitionArray.length];

        for (int i = 0; i < fieldDefinitionArray.length; i++) {
            final String name = fieldDefinitionArray[i].getName();
            int width;
            if (nameToWidth.containsKey(name)) {
                width = ((Integer) nameToWidth.get(name)).intValue();
            } else {
                width = ResultOptions.getDefaultColumnWidth(fieldDefinitionArray[i]);
            }

            fields[i] = new DisplayField(name, width);

            resultOptions.getDisplayFields().add(fields[i]);
        }

        return fields;
    }

    @Override
    protected String[] deselect(final Object[] selectedColumnItems, final ResultOptions resultOptions) {
        final String[] fieldNames = new String[selectedColumnItems.length];

        for (int i = 0; i < selectedColumnItems.length; i++) {
            final DisplayField displayField = (DisplayField) selectedColumnItems[i];
            resultOptions.getDisplayFields().remove(displayField);
            fieldNames[i] = displayField.getFieldName();
            nameToWidth.put(displayField.getFieldName(), new Integer(displayField.getWidth()));
        }

        return fieldNames;
    }

    @Override
    protected void moveUp(final Object selectedColumnItem, final ResultOptions resultOptions) {
        final DisplayField displayField = (DisplayField) selectedColumnItem;

        final int index = resultOptions.getDisplayFields().indexOf(displayField);
        resultOptions.getDisplayFields().removeAt(index);
        resultOptions.getDisplayFields().insert(index - 1, displayField);
    }

    @Override
    protected void moveDown(final Object selectedColumnItem, final ResultOptions resultOptions) {
        final DisplayField displayField = (DisplayField) selectedColumnItem;

        final int index = resultOptions.getDisplayFields().indexOf(displayField);
        resultOptions.getDisplayFields().removeAt(index);
        resultOptions.getDisplayFields().insert(index + 1, displayField);
    }

    @Override
    protected void setEnablement(final IStructuredSelection availableColumnsSelection,
            final IStructuredSelection selectedColumnsSelection, final int[] selectedColumnsSelectionIndices,
            final int selectedColumnsSize) {
        super.setEnablement(availableColumnsSelection, selectedColumnsSelection, selectedColumnsSelectionIndices,
                selectedColumnsSize);

        if (selectedColumnsSelection.size() != 1) {
            selectedDisplayField = null;
            widthLabel.setEnabled(false);
            widthText.setEnabled(false);
            widthText.setText(""); //$NON-NLS-1$
        } else {
            selectedDisplayField = (DisplayField) selectedColumnsSelection.getFirstElement();
            widthLabel.setEnabled(true);
            widthText.setEnabled(true);
            widthText.setText(String.valueOf(selectedDisplayField.getWidth()));
        }
    }

    @Override
    protected Composite createUpDownComposite(final Composite parent) {
        final Composite outerComposite = new Composite(parent, SWT.NONE);

        final RowLayout layout = new RowLayout(SWT.VERTICAL);
        layout.spacing = 20;
        outerComposite.setLayout(layout);

        super.createUpDownComposite(outerComposite);

        final Composite innerComposite = new Composite(outerComposite, SWT.NONE);
        innerComposite.setLayout(new RowLayout(SWT.VERTICAL));

        widthLabel = new Label(innerComposite, SWT.NONE);
        widthLabel.setText(Messages.getString("DisplayFieldsResultOptionsControl.WidthLabelText")); //$NON-NLS-1$

        widthText = new Text(innerComposite, SWT.BORDER);

        ControlSize.setCharWidthHint(widthText, 5);

        widthText.addVerifyListener(new VerifyListener() {
            @Override
            public void verifyText(final VerifyEvent e) {
                final String text = e.text;
                for (int i = 0; i < text.length(); i++) {
                    if (!Character.isDigit(text.charAt(i))) {
                        e.doit = false;
                        break;
                    }
                }
            }
        });
        widthText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(final ModifyEvent e) {
                if (selectedDisplayField == null) {
                    return;
                }

                final String text = widthText.getText();
                if (text.trim().length() == 0) {
                    selectedDisplayField.setWidth(0);
                } else {
                    try {
                        selectedDisplayField.setWidth(Integer.parseInt(text));
                    } catch (final NumberFormatException ex) {
                        selectedDisplayField.setWidth(0);
                    }
                }
                updateSelectedItem(selectedDisplayField);
            }
        });
        widthText.addFocusListener(new FocusAdapter() {
            @Override
            public void focusLost(final FocusEvent e) {
                final String text = widthText.getText();
                boolean valid = true;
                if (text.trim().length() == 0) {
                    valid = false;
                } else {
                    try {
                        final int x = Integer.parseInt(text.trim());
                        valid = (x >= 1) && (x <= 32767);
                    } catch (final NumberFormatException ex) {
                        valid = false;
                    }
                }

                if (!valid) {
                    MessageBoxHelpers.errorMessageBox(getShell(),
                            Messages.getString("DisplayFieldsResultOptionsControl.InvalidWidthDialogTitle"), //$NON-NLS-1$
                            Messages.getString("DisplayFieldsResultOptionsControl.InvalidWidthDialogText")); //$NON-NLS-1$
                    widthText.setFocus();
                }
            }
        });

        return outerComposite;
    }
}