eclox.core.ui.DoxyfileDecorator.java Source code

Java tutorial

Introduction

Here is the source code for eclox.core.ui.DoxyfileDecorator.java

Source

/*******************************************************************************
 * Copyright (C) 2003-2007, 2013, Guillaume Brocker
 * Copyright (C) 2015-2016, Andre Bossert
 *
 * 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:
 *     Guillaume Brocker - Initial API and implementation
 *     Andre Bossert - Add ability to use Doxyfile not in project scope
 *
 ******************************************************************************/

package eclox.core.ui;

import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ILightweightLabelDecorator;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;

import eclox.core.doxyfiles.Doxyfile;
import eclox.core.doxygen.BuildJob;

public class DoxyfileDecorator implements ILightweightLabelDecorator {

    /**
     * Implements a job change listener
     */
    /**
     * @author gbrocker
     *
     */
    private class MyJobListener extends JobChangeAdapter {

        /**
         * @see org.eclipse.core.runtime.jobs.JobChangeAdapter#done(org.eclipse.core.runtime.jobs.IJobChangeEvent)
         */
        public void done(IJobChangeEvent event) {
            Job job = event.getJob();

            if (job.belongsTo(BuildJob.FAMILY)) {
                BuildJob buildJob = (BuildJob) job;

                fireProviderChangedEvent(buildJob.getDoxyfile());
            }
        }

        /**
         * @see org.eclipse.core.runtime.jobs.JobChangeAdapter#running(org.eclipse.core.runtime.jobs.IJobChangeEvent)
         */
        public void running(IJobChangeEvent event) {
            Job job = event.getJob();

            if (job.belongsTo(BuildJob.FAMILY)) {
                BuildJob buildJob = (BuildJob) job;

                fireProviderChangedEvent(buildJob.getDoxyfile());
            }
        }

    }

    /**
     * the collection of attached listeners
     */
    private Collection<ILabelProviderListener> listeners = new Vector<ILabelProviderListener>();

    /**
     * the job listener
     */
    private MyJobListener jobManagerListener = new MyJobListener();

    /**
     * Constructor
     */
    public DoxyfileDecorator() {
        Job.getJobManager().addJobChangeListener(jobManagerListener);
    }

    /**
     * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration)
     */
    public void decorate(Object element, IDecoration decoration) {
        if (Doxyfile.isDoxyfile(element)) {
            Doxyfile doxyfile = new Doxyfile((IFile) element, null);
            BuildJob job = BuildJob.findJob(doxyfile);
            if (job != null && job.getState() == BuildJob.RUNNING) {
                decoration.addOverlay(ImageDescriptor.createFromFile(this.getClass(), "build_co.gif"),
                        IDecoration.BOTTOM_LEFT);
                decoration.addSuffix(" (building...)");
            }
        }
    }

    /**
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
     */
    public void addListener(ILabelProviderListener listener) {
        listeners.add(listener);
    }

    /**
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
     */
    public void dispose() {
        Job.getJobManager().removeJobChangeListener(jobManagerListener);
    }

    /**
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
     */
    public boolean isLabelProperty(Object element, String property) {
        return false;
    }

    /**
     * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
     */
    public void removeListener(ILabelProviderListener listener) {
        listeners.remove(listener);
    }

    /**
     * Notifies listerners that the given resource'l decoration need to be updated
     *
     * @param   resource   a resource to refresh
     */
    private void fireProviderChangedEvent(Object resource) {
        Iterator<ILabelProviderListener> i = listeners.iterator();
        LabelProviderChangedEvent event = new LabelProviderChangedEvent(this, resource);

        while (i.hasNext()) {
            ILabelProviderListener listener = (ILabelProviderListener) i.next();

            listener.labelProviderChanged(event);
        }
    }

}