gda.gui.scriptcontroller.logging.ScriptControllerLogView.java Source code

Java tutorial

Introduction

Here is the source code for gda.gui.scriptcontroller.logging.ScriptControllerLogView.java

Source

/*-
 * Copyright  2012 Diamond Light Source Ltd.
 *
 * This file is part of GDA.
 *
 * GDA is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License version 3 as published by the Free
 * Software Foundation.
 *
 * GDA 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 GDA. If not, see <http://www.gnu.org/licenses/>.
 */

package gda.gui.scriptcontroller.logging;

import gda.rcp.GDAClientActivator;

import org.apache.commons.lang.ArrayUtils;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import uk.ac.gda.preferences.PreferenceConstants;

public class ScriptControllerLogView extends ViewPart implements SelectionListener {

    public static final String ID = "gda.gui.scriptcontroller.logging.scriptcontrollerlogview";
    private TreeViewer treeViewer;
    private ScriptControllerLogLabelProvider labelProvider;
    private ScriptControllerLogContentProvider contentProvider;
    private Combo cmbFilter;
    private String[] scriptTypes = new String[] { ScriptControllerLogFilter.ALL };
    private ScriptControllerLogFilter filter;

    @Override
    public void createPartControl(Composite parent) {
        GridLayoutFactory.fillDefaults().numColumns(3).applyTo(parent);

        filter = new ScriptControllerLogFilter();

        cmbFilter = new Combo(parent, SWT.NONE);
        cmbFilter.setItems(scriptTypes);
        cmbFilter.select(0);
        cmbFilter.addSelectionListener(this);

        treeViewer = new TreeViewer(parent);
        treeViewer.addFilter(filter);
        treeViewer.setComparer(new ScriptControllerLogComparer());

        String controllers = GDAClientActivator.getDefault().getPreferenceStore()
                .getString(PreferenceConstants.GDA_LOGGINGSCRIPTCONTROLLERS);
        contentProvider = new ScriptControllerLogContentProvider(this, controllers);
        treeViewer.setContentProvider(contentProvider);

        labelProvider = new ScriptControllerLogLabelProvider(contentProvider);
        treeViewer.setLabelProvider(labelProvider);

        GridDataFactory.fillDefaults().span(3, 1).grab(true, true).applyTo(treeViewer.getControl());

        treeViewer.setInput(contentProvider.getElements(null));
    }

    @Override
    public void setFocus() {
        //
    }

    /**
     * handle for a refresh button
     */
    public void refresh() {
        contentProvider.refresh();
        treeViewer.setInput(contentProvider.getElements(null));
        treeViewer.refresh(true);
        //      treeViewer.collapseAll();
    }

    public TreeViewer getTreeViewer() {
        return treeViewer;
    }

    @Override
    public void widgetDefaultSelected(SelectionEvent arg0) {
        widgetSelected(arg0);
    }

    @Override
    public void widgetSelected(SelectionEvent arg0) {
        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
            @Override
            public void run() {
                String currentChoice = cmbFilter.getItem(cmbFilter.getSelectionIndex());
                filter.setSelectedType(currentChoice);
                treeViewer.refresh(false);
            }
        });
    }

    protected void updateFilter(String[] knownScriptTypes) {
        String[] newScriptTypes = new String[] { ScriptControllerLogFilter.ALL };
        scriptTypes = (String[]) ArrayUtils.addAll(newScriptTypes, knownScriptTypes);

        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
            @Override
            public void run() {
                String currentChoice = cmbFilter.getItem(cmbFilter.getSelectionIndex());

                int newIndexOfCurrentChoice = ArrayUtils.indexOf(scriptTypes, currentChoice);
                if (newIndexOfCurrentChoice == -1) {
                    newIndexOfCurrentChoice = 0;
                }

                cmbFilter.setItems(scriptTypes);
                cmbFilter.select(newIndexOfCurrentChoice);
            }
        });
    }
}