com.nokia.tools.variant.views.errorview.ErrorsViewPage.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tools.variant.views.errorview.ErrorsViewPage.java

Source

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 * 
 * Initial Contributors:
 * Nokia Corporation - Initial contribution
 * 
 * Contributors:
 * 
 * Description: This file is part of com.nokia.tools.variant.views component.
 */

package com.nokia.tools.variant.views.errorview;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.Page;

import com.nokia.tools.variant.views.common.Column;
import com.nokia.tools.variant.views.common.ComboViewerFilter;
import com.nokia.tools.variant.views.common.GenericTableViewer;
import com.nokia.tools.variant.views.common.ViewsMessages;
import com.nokia.tools.variant.views.errormodel.Error;
import com.nokia.tools.variant.views.errormodel.ErrorsRoot;

/**
 * Errors view displays settings with validation error. Graphic user
 * interface(GUI) is represented by {@link TableViewer}, strictly speaking
 * {@link GenericTableViewer}, what is our component.
 * 
 */

public class ErrorsViewPage extends Page {

    private Label errorCount;
    private Label filterLbl;
    private Combo filterCombo;
    private ComboViewerFilter errorsViewerFilter;
    private int selectionIndex;

    private Composite topComposite;

    private GenericTableViewer errorTV;
    private ErrorsRoot errorsInput;

    private final int COLUMN_1_WIDTH = 200;
    private final int COLUMN_2_WIDTH = 350;
    private final int COLUMN_3_WIDTH = 350;

    private static final int MIN_FILTER_STEP = 20;

    private int currentFilterStep;

    private Adapter adapter = new Adapter() {

        public Notifier getTarget() {

            return null;
        }

        public boolean isAdapterForType(Object type) {

            return false;
        }

        public void notifyChanged(Notification notification) {
            if (notification.getEventType() == Notification.REMOVING_ADAPTER) {
                return;
            }

            if (notification.getEventType() == Notification.ADD
                    || notification.getEventType() == Notification.ADD_MANY
                    || notification.getEventType() == Notification.REMOVE
                    || notification.getEventType() == Notification.REMOVE_MANY) {

                filterCombo.removeAll();
                fillFilterCombo();

                if (selectionIndex < filterCombo.getItemCount()) {
                    filterCombo.select(selectionIndex);
                } else {
                    filterCombo.select(0);
                }

                errorTV.getTv().resetFilters();
                if (selectionIndex != 0 && selectionIndex < filterCombo.getItemCount()) {
                    errorsViewerFilter = new ComboViewerFilter(filterCombo.getItem(selectionIndex));
                    errorTV.getTv().addFilter(errorsViewerFilter);
                }
                if (errorsViewerFilter != null) {
                    errorsViewerFilter.setCounter(0);
                }
                errorTV.getTv().refresh();
            }

            if (notification.getEventType() == Notification.SET) {
                errorTV.getTv().update(notification.getNotifier(), null);
            }

            errorCount.setText(errorsInput.getErrors().size() + " " + ViewsMessages.ERRORS);

            errorCount.pack();
        }

        public void setTarget(Notifier newTarget) {

        }

    };

    public ErrorsViewPage(ErrorsRoot er) {
        this.errorsInput = er;
    }

    @Override
    public void init(IPageSite pageSite) {

        super.init(pageSite);
        contributeToActionBars();
    }

    @Override
    public void createControl(Composite parent) {
        topComposite = new Composite(parent, SWT.NONE);
        topComposite.setLayout(new GridLayout(3, false));

        errorCount = new Label(topComposite, SWT.NONE);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        errorCount.setLayoutData(gd);

        filterLbl = new Label(topComposite, SWT.NONE);
        filterLbl.setText("Show results:");

        filterCombo = new Combo(topComposite, SWT.READ_ONLY);

        fillFilterCombo();

        // default selection
        filterCombo.select(0);

        filterCombo.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {
                Combo combo = (Combo) e.widget;
                selectionIndex = combo.getSelectionIndex();
                errorTV.getTv().resetFilters();
                if (selectionIndex != 0) {
                    errorsViewerFilter = new ComboViewerFilter(combo.getItem(selectionIndex));
                    errorTV.getTv().addFilter(errorsViewerFilter);
                }
            }

            public void widgetDefaultSelected(SelectionEvent e) {

            }
        });

        errorTV = new GenericTableViewer(topComposite);

        GridData layoutData = (GridData) errorTV.getTv().getTable().getLayoutData();
        layoutData.horizontalSpan = 3;
        errorTV.getTv().getTable().setLayoutData(layoutData);

        errorTV.addColumn(new Column(ViewsMessages.ERROR_COLUMN_1_NAME, COLUMN_1_WIDTH));
        errorTV.addColumn(new Column(ViewsMessages.ERROR_COLUMN_2_NAME, COLUMN_2_WIDTH));
        errorTV.addColumn(new Column(ViewsMessages.ERROR_COLUMN_3_NAME, COLUMN_3_WIDTH));

        errorTV.setContentProvider(new ErrorsContentProvider());
        errorTV.setLabelProvider(new ErrorsLabelProvider());
        errorTV.setInput(errorsInput);

        errorsInput.eAdapters().add(adapter);
        errorTV.getTv().getTable().addDisposeListener(new DisposeListener() {

            public void widgetDisposed(DisposeEvent e) {
                errorsInput.eAdapters().remove(adapter);
                adapter = null;

            }

        });
        errorTV.populateTableViewer();
        errorTV.getTv().addDoubleClickListener(new IDoubleClickListener() {

            public void doubleClick(DoubleClickEvent event) {
                IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
                if (activePage != null) {
                    IEditorPart activeEditor = activePage.getActiveEditor();
                    if (activeEditor instanceof ISelectionProvider) {
                        StructuredSelection selection = (StructuredSelection) event.getSelection();
                        Error errorElement = (Error) selection.getFirstElement();
                        StructuredSelection structuredSelection = new StructuredSelection(
                                errorElement.getSetting());

                        ISelectionProvider provider = (ISelectionProvider) activeEditor;
                        provider.setSelection(structuredSelection);
                    }
                }

            }

        });

        errorCount.setText(errorsInput.getErrors().size() + " " + ViewsMessages.ERRORS);
    }

    private void fillFilterCombo() {
        filterCombo.add("All", 0);
        int size = errorsInput.getErrors().size();
        if (size <= 200) {
            currentFilterStep = MIN_FILTER_STEP;
        } else {
            currentFilterStep = size / 10;
            if (size % 10 != 0) {
                currentFilterStep += 1;
            }
        }
        for (int i = 1, x = 0; x < size; i++, x = x + currentFilterStep) {
            String range = x + 1 + "-" + (x + currentFilterStep);
            if (x + currentFilterStep >= size) {
                range = x + 1 + "-" + size;
            }
            filterCombo.add(range, i);
        }

    }

    @Override
    public Control getControl() {

        return topComposite;
    }

    @Override
    public void setFocus() {

    }

    /**
     * adding actions to main toolbar
     */
    private void contributeToActionBars() {

        IActionBars bars = getSite().getActionBars();
        /* set undo/redo handlers from parent editor */
        ActionRegistry registry = (ActionRegistry) (getSite().getWorkbenchWindow().getActivePage()
                .getActiveEditor()).getAdapter(ActionRegistry.class);
        bars.setGlobalActionHandler(ActionFactory.UNDO.getId(), registry.getAction(ActionFactory.UNDO.getId()));
        bars.setGlobalActionHandler(ActionFactory.REDO.getId(), registry.getAction(ActionFactory.REDO.getId()));

        bars.updateActionBars();

    }

}