| 1 | /******************************************************************************* |
| 2 | * Copyright (c) 2013, 2014 École Polytechnique de Montréal and others |
| 3 | * |
| 4 | * All rights reserved. This program and the accompanying materials are |
| 5 | * made available under the terms of the Eclipse Public License v1.0 which |
| 6 | * accompanies this distribution, and is available at |
| 7 | * http://www.eclipse.org/legal/epl-v10.html |
| 8 | * |
| 9 | * Contributors: |
| 10 | * Geneviève Bastien - Initial API and implementation |
| 11 | * Marc-Andre Laperle - Add method to get opened tmf projects |
| 12 | * Patrick Tasse - Add support for folder elements |
| 13 | *******************************************************************************/ |
| 14 | |
| 15 | package org.eclipse.tracecompass.tmf.ui.project.model; |
| 16 | |
| 17 | import java.util.ArrayList; |
| 18 | import java.util.List; |
| 19 | |
| 20 | import org.eclipse.core.resources.IFolder; |
| 21 | import org.eclipse.core.resources.IProject; |
| 22 | import org.eclipse.core.resources.ResourcesPlugin; |
| 23 | import org.eclipse.core.runtime.CoreException; |
| 24 | import org.eclipse.core.runtime.IProgressMonitor; |
| 25 | import org.eclipse.jface.dialogs.MessageDialog; |
| 26 | import org.eclipse.swt.widgets.Display; |
| 27 | import org.eclipse.swt.widgets.Shell; |
| 28 | import org.eclipse.tracecompass.internal.tmf.ui.Activator; |
| 29 | import org.eclipse.tracecompass.tmf.core.TmfProjectNature; |
| 30 | import org.eclipse.ui.PlatformUI; |
| 31 | |
| 32 | /** |
| 33 | * Utility class for common tmf.ui functionalities |
| 34 | */ |
| 35 | public class TraceUtils { |
| 36 | |
| 37 | private TraceUtils() { |
| 38 | } |
| 39 | |
| 40 | /** |
| 41 | * Displays an error message in a box |
| 42 | * |
| 43 | * @param boxTitle |
| 44 | * The message box title |
| 45 | * @param errorMsg |
| 46 | * The error message to display |
| 47 | */ |
| 48 | public static void displayErrorMsg(final String boxTitle, final String errorMsg) { |
| 49 | Display.getDefault().asyncExec(new Runnable() { |
| 50 | @Override |
| 51 | public void run() { |
| 52 | final Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); |
| 53 | Activator.getDefault().logError(errorMsg); |
| 54 | MessageDialog.openError(shell, boxTitle, errorMsg); |
| 55 | } |
| 56 | }); |
| 57 | } |
| 58 | |
| 59 | /** |
| 60 | * Get the opened (accessible) projects with Tmf nature |
| 61 | * |
| 62 | * @return the Tmf projects |
| 63 | */ |
| 64 | public static List<IProject> getOpenedTmfProjects() { |
| 65 | IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); |
| 66 | List<IProject> tmfProjects = new ArrayList<>(); |
| 67 | for (IProject project : projects) { |
| 68 | try { |
| 69 | if (project.isAccessible() && project.getNature(TmfProjectNature.ID) != null) { |
| 70 | tmfProjects.add(project); |
| 71 | } |
| 72 | } catch (CoreException e) { |
| 73 | Activator.getDefault().logError("Error getting opened tmf projects", e); //$NON-NLS-1$ |
| 74 | } |
| 75 | } |
| 76 | return tmfProjects; |
| 77 | } |
| 78 | |
| 79 | /** |
| 80 | * Create a folder, ensuring all parent folders are also created. |
| 81 | * |
| 82 | * @param folder |
| 83 | * the folder to create |
| 84 | * @param monitor |
| 85 | * the progress monitor |
| 86 | * @throws CoreException |
| 87 | * if the folder cannot be created |
| 88 | */ |
| 89 | public static void createFolder(IFolder folder, IProgressMonitor monitor) throws CoreException { |
| 90 | if (!folder.exists()) { |
| 91 | if (folder.getParent() instanceof IFolder) { |
| 92 | createFolder((IFolder) folder.getParent(), monitor); |
| 93 | } |
| 94 | folder.create(true, true, monitor); |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | } |