/*******************************************************************************
* 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 java.util.ArrayList;
import java.util.List;
import java.util.Set;
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.IOnDemandAnalysis;
import org.eclipse.tracecompass.tmf.core.analysis.ondemand.OnDemandAnalysisManager;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
/**
* Project model element for the "On-Demand Analyses" element, which goes under
* individual trace and experiment elements.
*
* It will list the available implementations of IOnDemandAnalysis that can be
* executed on this particular trace.
*
* @author Alexandre Montplaisir
* @since 2.0
*/
public class TmfOnDemandAnalysesElement extends TmfProjectModelElement {
/**
* Element of the resource path
*/
public static final String PATH_ELEMENT = ".ondemand-analyses"; //$NON-NLS-1$
private static final String ELEMENT_NAME = Messages.TmfOnDemandAnalysesElement_Name;
/**
* Constructor
*
* @param resource
* The resource to be associated with this element
* @param parent
* The parent element
*/
protected TmfOnDemandAnalysesElement(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.ONDEMAND_ANALYSES_ICON;
}
@Override
protected void refreshChildren() {
ITmfTrace trace = getParent().getTrace();
if (trace == null) {
/* Trace is not yet initialized */
return;
}
// Remove children first
List<ITmfProjectModelElement> children = new ArrayList<>(getChildren());
children.stream().forEach(elem -> {
removeChild(elem);
});
Set<IOnDemandAnalysis> analyses =
OnDemandAnalysisManager.getInstance().getOndemandAnalyses(trace);
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IPath nodePath = getResource().getFullPath();
analyses.forEach(analysis -> {
IFolder analysisRes = checkNotNull(root.getFolder(nodePath.append(analysis.getName())));
TmfOnDemandAnalysisElement elem;
if (analysis.isUserDefined()) {
elem = new TmfUserDefinedOnDemandAnalysisElement(analysis.getName(), analysisRes, this, analysis);
} else {
elem = new TmfBuiltInOnDemandAnalysisElement(analysis.getName(), analysisRes, this, analysis);
}
addChild(elem);
});
/* Refresh all children */
getChildren().forEach(child -> ((TmfProjectModelElement) child).refreshChildren());
}
}