/******************************************************************************* * Copyright (c) 2016 EfficiOS Inc., Alexandre Montplaisir * * 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 *******************************************************************************/ package org.eclipse.tracecompass.tmf.ui.project.model; import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.swt.graphics.Image; import org.eclipse.tracecompass.tmf.core.analysis.ondemand.IOnDemandAnalysisReport; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; /** * Project model element for the "Reports" element, which lists the analysis * reports that were generated for this trace. * * It acts like a directory for the reports, where each one can be opened or * deleted. * * @author Alexandre Montplaisir * @since 2.0 */ public class TmfReportsElement extends TmfProjectModelElement { /** * Element of the resource path */ public static final String PATH_ELEMENT = ".reports"; //$NON-NLS-1$ private static final String ELEMENT_NAME = Messages.TmfReportsElement_Name; private final BiMap<String, IOnDemandAnalysisReport> fCurrentReports = HashBiMap.create(); /** * Constructor * * @param resource * The resource to be associated with this element * @param parent * The parent element */ protected TmfReportsElement(IResource resource, TmfCommonProjectElement parent) { super(ELEMENT_NAME, resource, parent); } @Override public TmfCommonProjectElement getParent() { /* Type enforced at constructor */ return (TmfCommonProjectElement) super.getParent(); } @Override public Image getIcon() { return TmfProjectModelIcons.REPORTS_ICON; } @Override protected void refreshChildren() { /* No children at the moment */ } /** * Add a new report under this element. * * @param report * The report to add */ public void addReport(IOnDemandAnalysisReport report) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IPath nodePath = getResource().getFullPath(); /* Append #2,#3,... to the name if needed */ String reportDisplayName = report.getName(); int i = 1; while (fCurrentReports.containsKey(reportDisplayName)) { i++; reportDisplayName = report.getName() + " #" + i; //$NON-NLS-1$ } fCurrentReports.put(reportDisplayName, report); IFolder analysisRes = checkNotNull(root.getFolder(nodePath.append(reportDisplayName))); TmfReportElement elem = new TmfReportElement(reportDisplayName, analysisRes, this, report); addChild(elem); refresh(); } /** * Remove a report from under this element. * * @param report * The report to remove */ public void removeReport(IOnDemandAnalysisReport report) { String displayName = fCurrentReports.inverse().get(report); fCurrentReports.values().remove(report); ITmfProjectModelElement elementToRemove = getChildren().stream() .filter(elem -> elem.getName().equals(displayName)) .findFirst().orElse(null); removeChild(elementToRemove); refresh(); } }