org.eclipse.mylyn.java.ui.views.MylarProblemView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.mylyn.java.ui.views.MylarProblemView.java

Source

/*******************************************************************************
 * Copyright (c) 2004 - 2005 University Of British Columbia and others.
 * All rights reserved. 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
 *
 * Contributors:
 *     University Of British Columbia - initial API and implementation
 *******************************************************************************/

package org.eclipse.mylyn.java.ui.views;

import java.util.List;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.ui.ProblemsLabelDecorator;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.*;
import org.eclipse.ui.internal.Workbench;
import org.eclipse.ui.views.markers.internal.*;

import org.eclipse.mylyn.core.ITaskscapeListener;
import org.eclipse.mylyn.core.MylarPlugin;
import org.eclipse.mylyn.core.model.*;
import org.eclipse.mylyn.core.model.ITaskscapeNode;
import org.eclipse.mylyn.core.model.InterestComparator;
import org.eclipse.mylyn.java.ui.JavaUiUtil;
import org.eclipse.mylyn.java.ui.actions.ToggleAutoManagerProblemsAction;
import org.eclipse.mylyn.ui.*;

/**
 * @author Mik Kersten
 */
public class MylarProblemView extends ProblemView {

    private static TableViewer currentViewer = null;
    private final static String TAG_DIALOG_SECTION = "org.eclipse.mylyn.ui.views.problem";
    private ProblemsListFilter doiFilter = new ProblemsListFilter();
    private TableSorter sorter = null;

    // START: from super class
    private final static int ASCENDING = TableSorter.ASCENDING;
    private final static int DESCENDING = TableSorter.DESCENDING;
    private final static int SEVERITY = 0;
    private final static int DOI = 1;
    private final static int DESCRIPTION = 2;
    private final static int RESOURCE = 3;
    private final static int[] DEFAULT_PRIORITIES = { SEVERITY, DOI, DESCRIPTION, RESOURCE };
    private final static int[] DEFAULT_DIRECTIONS = { DESCENDING, // severity
            ASCENDING, // folder
            ASCENDING, // resource
            ASCENDING }; // location
    //  END: from super class

    private final static IField[] VISIBLE_FIELDS = { new FieldSeverity(), new FieldMessage(),
            new ProblemsFieldJavaElement(), new ProblemsFieldDoi(),
            //         new FieldFolder(), // TODO: remove
            //         new FieldLineNumber() // TODO: remove 
    };

    private final static ColumnLayoutData[] COLUMN_LAYOUTS = { new ColumnPixelData(19, false),
            new ColumnWeightData(350), new ColumnWeightData(250), new ColumnWeightData(35),
            //         new ColumnWeightData(0), 
            //         new ColumnWeightData(0) 
    };

    private static final ITaskscapeListener MODEL_LISTENER = new ITaskscapeListener() {
        public void presentationSettingsChanging(PresentationChangeKind kind) {
            //            refresh();
        }

        public void interestChanged(ITaskscapeNode info, IWorkbenchPart sourcePart) {
            refresh();
        }

        public void interestChanged(List<ITaskscapeNode> nodes, IWorkbenchPart part) {
            refresh();
        }

        public void taskscapeActivated(ITaskscape taskscape) {
            refresh();
        }

        public void taskscapeDeactivated(ITaskscape taskscape) {
            refresh();
        }

        public void landmarkAdded(ITaskscapeNode element) {
        }

        public void landmarkRemoved(ITaskscapeNode element) {
        }

        public void relationshipsChanged() {
        }

        private void refresh() {
            PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
                public void run() {
                    try {
                        if (currentViewer != null && !currentViewer.getTable().isDisposed()) {
                            currentViewer.refresh();
                        }
                    } catch (Throwable t) {
                        ContextCorePlugin.fail(t, "Could not update viewer", false);
                    }
                }
            });
        }

        public void presentationSettingsChanged(PresentationChangeKind kind) {
            refresh();
        }

        public void nodeDeleted(ITaskscapeNode node) {
            refresh();
        }
    };

    public MylarProblemView() {
        super();
        ContextCorePlugin.getTaskscapeManager().addListener(MODEL_LISTENER);
    }

    public void init(IViewSite viewSite, IMemento memento) throws PartInitException {
        super.init(viewSite, memento);
    }

    public void createPartControl(Composite parent) {
        super.createPartControl(parent);

        MylarLabelProvider labelProvider = new MylarLabelProvider(new TableViewLabelProvider(getVisibleFields()),
                new ProblemsLabelDecorator());

        getViewer().setLabelProvider(labelProvider);
        getViewer().addFilter(doiFilter);
        //      getViewer().getTable().setHeaderVisible(false);
        getViewer().getTable().setBackground(MylarUiPlugin.getDefault().getColorMap().BACKGROUND_COLOR);

        IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
        ToggleAutoManagerProblemsAction autoExpandAction = new ToggleAutoManagerProblemsAction(this);
        if (toolBarManager != null) {
            toolBarManager.add(new Separator("StartMylar"));
            toolBarManager.add(autoExpandAction);
        }
        //        autoExpandAction.autoExpand(autoExpandAction.isChecked());
        //        sorter = new ProblemsListDoiSorter(getFields(), DEFAULT_PRIORITIES, DEFAULT_DIRECTIONS);
        //        getViewer().setSorter(sorter);
        getViewer().refresh();
        currentViewer = getViewer();
    }

    protected IField[] getVisibleFields() {
        return VISIBLE_FIELDS;
    }

    protected ColumnLayoutData[] getDefaultColumnLayouts() {
        return COLUMN_LAYOUTS;
    }

    protected IDialogSettings getDialogSettings() {
        IDialogSettings workbenchSettings = JavaPlugin.getDefault().getDialogSettings();
        IDialogSettings settings = workbenchSettings.getSection(TAG_DIALOG_SECTION);

        if (settings == null)
            settings = workbenchSettings.addNewSection(TAG_DIALOG_SECTION);

        return settings;
    }

    public InterestFilter getDoiFilter() {
        return doiFilter;
    }

    public TableViewer getViewer() {
        return super.getViewer();
    }

    protected TableSorter getSorter() {
        if (sorter == null)
            sorter = new TableSorter(VISIBLE_FIELDS, DEFAULT_PRIORITIES, DEFAULT_DIRECTIONS);
        return sorter;
    }

    public void setInterestFiltering(boolean on) {
        if (on) {
            this.getViewer().addFilter(doiFilter);
        } else {
            this.getViewer().removeFilter(doiFilter);
        }
    }
}

class ProblemsListDoiSorter extends TableSorter {

    public ProblemsListDoiSorter(IField[] properties, int[] defaultPriorities, int[] defaultDirections) {
        super(properties, defaultPriorities, defaultDirections);
    }

    protected InterestComparator comparator = new InterestComparator();

    protected int compare(Object obj1, Object obj2, int depth) {
        return super.compare(obj1, obj2, depth);
    }

    public int compare(Viewer viewer, Object e1, Object e2) {
        return super.compare(viewer, e1, e1);
        //        if (e1 instanceof ProblemMarker && e2 instanceof ProblemMarker) {
        //            if (((ProblemMarker)e2).getSeverity() == IMarker.SEVERITY_ERROR) {
        //                return 1;
        //            }
        //            IJavaElement element1 = Util.getJavaElement((ProblemMarker)e1);
        //            IJavaElement element2 = Util.getJavaElement((ProblemMarker)e2);
        //            if (element1 != null && element2 != null) {
        //                return comparator.compare(
        //                    ContextCorePlugin.getTaskscapeManager().getActiveTaskscape().get(element1.getHandleIdentifier()),
        //                    ContextCorePlugin.getTaskscapeManager().getActiveTaskscape().get(element1.getHandleIdentifier()));
        //            }
        //        } 
        //        
        //        return comparator.compare(e1, e2);  
    }
}

class MylarLabelProvider extends DecoratingLabelProvider
        implements IFontProvider, ITableLabelProvider, IColorProvider {

    TableViewLabelProvider provider;

    public MylarLabelProvider(TableViewLabelProvider provider, ILabelDecorator decorator) {
        super(provider, decorator);
        this.provider = provider;
    }

    public Font getFont(Object element) {
        return null;
        //        ProblemMarker marker = (ProblemMarker)element;
        //        IJavaElement javaElement = Util.getJavaElement(marker);
        //        return UiUtil.getFontForElement(javaElement);
    }

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

    public String getColumnText(Object element, int columnIndex) {
        return provider.getColumnText(element, columnIndex);
    }

    public Color getForeground(Object element) {
        ProblemMarker marker = (ProblemMarker) element;
        IJavaElement javaElement = JavaUiUtil.getJavaElement(marker);
        if (javaElement != null) {
            ITaskscapeNode node = ContextCorePlugin.getTaskscapeManager()
                    .getNode(javaElement.getHandleIdentifier());
            return UiUtil.getForegroundForElement(node);
        } else {
            return null;
        }
        //      return MylarUiPlugin.getDefault().getColorMap().TEXT;
    }

    public Color getBackground(Object element) {
        ProblemMarker marker = (ProblemMarker) element;
        IJavaElement javaElement = JavaUiUtil.getJavaElement(marker);
        if (javaElement != null) {
            ITaskscapeNode node = ContextCorePlugin.getTaskscapeManager()
                    .getNode(javaElement.getHandleIdentifier());
            return UiUtil.getBackgroundForElement(node);
        } else {
            return null;
        }
    }
}