nu.bibi.breadcrumb.files.FileContentProvider.java Source code

Java tutorial

Introduction

Here is the source code for nu.bibi.breadcrumb.files.FileContentProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2008 Laurent Muller.
 * 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:
 *     Laurent Muller - initial API and implementation
 *******************************************************************************/
package nu.bibi.breadcrumb.files;

import java.io.File;
import java.util.Arrays;

import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;

/**
 * File content provider.
 * 
 * @author Laurent Muller
 * @version 1.0
 */
public class FileContentProvider implements ITreeContentProvider {
    //
    //   /**
    //    * The default file content provider instance.
    //    */
    //   public final static FileContentProvider DEFAULT = new FileContentProvider();

    /*
     * the viewer
     */
    private StructuredViewer viewer;

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.IContentProvider#dispose()
     */
    @Override
    public void dispose() {
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
     */
    @Override
    public Object[] getChildren(final Object parentElement) {
        // computer ?
        if (parentElement instanceof Computer) {
            return ((Computer) parentElement).getDrives();
        }

        // file ?
        if (parentElement instanceof File) {
            // get children
            final File file = (File) parentElement;
            Object[] elements = file.listFiles();

            // apply filters
            elements = applyFilters(parentElement, elements);

            // sort
            Arrays.sort(elements);

            return elements;
        }

        // no data
        return new Object[0];
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
     */
    @Override
    public Object[] getElements(final Object inputElement) {
        return getChildren(inputElement);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
     */
    @Override
    public Object getParent(final Object element) {
        if (element instanceof File) {
            final File file = (File) element;
            if (FileUtils.isDriveFile(file)) {
                return Computer.getInstance();
            }
            return file.getParentFile();
        }
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
     */
    @Override
    public boolean hasChildren(final Object element) {
        return this.getChildren(element).length > 0;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
     */
    @Override
    public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
        if (viewer != null && viewer instanceof StructuredViewer) {
            this.viewer = (StructuredViewer) viewer;
        } else {
            this.viewer = null;
        }
    }

    /**
     * Filters the given elements with all the filters, if any, of the current
     * viewer. This method must never return <code>null</code>.
     * 
     * @param parent
     *            the parent element.
     * @param elements
     *            the elements to filter.
     * @return the filtered elements or an empty array if no one element is
     *         selected.
     * @see StructuredViewer#getFilters()
     * @see ViewerFilter#filter(Viewer, Object, Object[])
     */
    protected Object[] applyFilters(final Object parentElement, Object[] elements) {
        // data ?
        if (elements == null || elements.length == 0) {
            return new Object[0];
        }
        if (viewer == null) {
            return elements;
        }

        // get filters
        final ViewerFilter[] filters = viewer.getFilters();
        if (filters == null || filters.length == 0) {
            return elements;
        }

        // apply each filter
        for (final ViewerFilter current : filters) {
            elements = current.filter(viewer, parentElement, elements);
            if (elements == null || elements.length == 0) {
                return new Object[0];
            }
        }
        return elements;
    }
}