edu.uci.lighthouse.core.util.WorkbenchUtility.java Source code

Java tutorial

Introduction

Here is the source code for edu.uci.lighthouse.core.util.WorkbenchUtility.java

Source

/*******************************************************************************
 * Copyright (c) {2009,2011} {Software Design and Collaboration Laboratory (SDCL)
 *            , University of California, Irvine}.
 * 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:
 *    {Software Design and Collaboration Laboratory (SDCL)
 *   , University of California, Irvine} 
 *         - initial API and implementation and/or initial documentation
 *******************************************************************************/
package edu.uci.lighthouse.core.util;

import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IDecoratorManager;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.tigris.subversion.subclipse.core.SVNException;
import org.tigris.subversion.subclipse.core.SVNProviderPlugin;
import org.tigris.subversion.svnclientadapter.ISVNClientAdapter;
import org.tigris.subversion.svnclientadapter.ISVNInfo;
import org.tigris.subversion.svnclientadapter.ISVNStatus;
import org.tigris.subversion.svnclientadapter.SVNClientException;
import org.tigris.subversion.svnclientadapter.SVNStatusKind;

import edu.uci.lighthouse.core.decorators.LighthouseProjectLabelDecorator;

public class WorkbenchUtility {

    private static Logger logger = Logger.getLogger(WorkbenchUtility.class);

    public static IEditorPart getActiveEditor() {
        class UITask implements Runnable {
            IEditorPart activeEditor;

            public void run() {
                IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
                IWorkbenchPage[] pages = window.getPages();
                for (IWorkbenchPage page : pages) {
                    activeEditor = page.getActiveEditor();
                }
            }
        }
        UITask task = new UITask();
        Display.getDefault().syncExec(task);
        return task.activeEditor;
    }

    @Deprecated
    public static IStatusLineManager getStatusLineManager() {
        IEditorPart editor = getActiveEditor();
        if (editor != null) {
            return editor.getEditorSite().getActionBars().getStatusLineManager();
        }
        return null;
    }

    public static void openPreferences() {
        Display.getDefault().asyncExec(new Runnable() {
            public void run() {
                Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
                String rootId = "edu.uci.lighthouse.core.preferences";
                PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(shell, rootId,
                        new String[] { rootId + ".database", rootId + ".user" }, null);
                dialog.open();
            }
        });
    }

    public static void updateProjectIcon() {
        Display.getDefault().asyncExec(new Runnable() {
            @Override
            public void run() {
                IDecoratorManager dManager = PlatformUI.getWorkbench().getDecoratorManager();
                dManager.update(LighthouseProjectLabelDecorator.DECORATOR_ID);
            }
        });
    }

    public static Collection<IFile> getFilesFromJavaProject(IJavaProject jProject) {
        Collection<IFile> files = new HashSet<IFile>();
        try {
            IPackageFragment[] packagesFragments = jProject.getPackageFragments();
            for (IPackageFragment packageFragment : packagesFragments) {
                if (packageFragment.getKind() == IPackageFragmentRoot.K_SOURCE
                        && packageFragment.getCompilationUnits().length > 0) {
                    ICompilationUnit[] icus = packageFragment.getCompilationUnits();
                    for (ICompilationUnit icu : icus) {
                        files.add((IFile) icu.getResource());
                    }
                }
            }
        } catch (JavaModelException e) {
            e.printStackTrace();
        }
        return files;
    }

    public static String getMetadataDirectory() {
        return ResourcesPlugin.getWorkspace().getRoot().getLocation().toPortableString() + "/.metadata/";
    }

    public static String[] getSourceFolders(IJavaProject project) {
        List<String> result = new LinkedList<String>();
        try {
            IClasspathEntry[] classPaths = project.getRawClasspath();
            for (IClasspathEntry cp : classPaths) {
                if (cp.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
                    result.add(cp.getPath().toPortableString());
                }
            }
        } catch (JavaModelException e) {
            logger.error(e, e);
        }
        return result.toArray(new String[0]);
    }

    public static Map<IFile, ISVNInfo> getSVNInfoFromWorkspace() {
        Map<IFile, ISVNInfo> result = new HashMap<IFile, ISVNInfo>();
        IWorkspace workspace = ResourcesPlugin.getWorkspace();
        IProject[] projects = workspace.getRoot().getProjects();
        try {
            ISVNClientAdapter svnAdapter = SVNProviderPlugin.getPlugin().getSVNClient();
            for (IProject project : projects) {
                if (project.isOpen()) {
                    try {
                        IJavaProject jProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
                        if (jProject != null) {
                            Collection<IFile> iFiles = WorkbenchUtility.getFilesFromJavaProject(jProject);
                            for (IFile iFile : iFiles) {
                                try {
                                    ISVNInfo svnInfo = svnAdapter
                                            .getInfoFromWorkingCopy(iFile.getLocation().toFile());
                                    /*String fqn = ModelUtility
                                    .getClassFullyQualifiedName(iFile);
                                    if (fqn != null) {*/
                                    /*Date revision = svnInfo
                                    .getLastChangedDate();
                                    if (revision == null) {
                                       revision = new Date(0);
                                    } else {
                                       revision = new Date(revision
                                             .getTime());
                                    }*/
                                    result.put(iFile, svnInfo);
                                    //}
                                } catch (SVNClientException ex1) {
                                    logger.error(ex1);
                                }
                            }
                        }
                    } catch (CoreException e) {
                        logger.error(e, e);
                    }

                }
            }
        } catch (SVNException ex) {
            logger.error(ex, ex);
        }
        return result;
    }

    public static ISVNInfo getSVNInfo(IFile iFile) {
        ISVNInfo svnInfo = null;
        try {
            ISVNClientAdapter svnAdapter = SVNProviderPlugin.getPlugin().getSVNClient();
            svnInfo = svnAdapter.getInfoFromWorkingCopy(iFile.getLocation().toFile());
        } catch (Exception e) {
            logger.error(e, e);
        }
        return svnInfo;
    }
}