blob: ed34adc7c5557f0908ef1dfb23ff5cfa5d10f23b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2017 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Francois Chouinard - Initial API and implementation
*******************************************************************************/
package org.eclipse.tracecompass.tmf.ui.project.model;
import java.net.URI;
import java.util.List;
import java.util.Objects;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.swt.graphics.Image;
/**
* The TMF project model interface.
*
* The TMF tracing project is integrated in the Common Navigator framework.
* Each tracing tree element has to implement this interface to be visible in the
* Project Explorer.
*
* @version 1.0
* @author Francois Chouinard
*/
public interface ITmfProjectModelElement {
/**
* Returns the name of the project model element.
*
* @return the name of the project element.
*/
String getName();
/**
* Returns the resource associated with the project model element.
*
* @return the model resource.
*/
IResource getResource();
/**
* Returns the path of the project model resource.
*
* @return the resource path.
*/
IPath getPath();
/**
* Returns the URI (location) of the resource.
*
* @return the resource URI.
*/
URI getLocation();
/**
* Returns the project model element.
*
* @return the project model element.
*/
TmfProjectElement getProject();
/**
* Returns the parent of this model element.
*
* @return the parent of this model element.
*/
ITmfProjectModelElement getParent();
/**
* Returns a list of children model elements.
*
* @return a list of children model elements.
*/
List<ITmfProjectModelElement> getChildren();
/**
* Returns the child model element with the given name.
*
* @param name
* the child name
*
* @return the child model element with the given name, or null.
* @since 3.1
*/
default ITmfProjectModelElement getChild(String name) {
for (ITmfProjectModelElement child : getChildren()) {
if (Objects.equals(child.getName(), name)) {
return child;
}
}
return null;
}
/**
* Method to request to refresh the project.
*/
void refresh();
/**
* Returns the icon of this element.
*
* @return The icon
* @since 2.0
*/
Image getIcon();
/**
* Returns the text of the label of this element.
*
* @return The label text
* @since 2.0
*/
default String getLabelText() {
return getName();
}
/**
* Returns whether this model element has children or not.
*
* @return <code>true</code> if this model element has children else
* <code>false</code>
*/
default boolean hasChildren() {
return !getChildren().isEmpty();
}
/**
* Recursively dispose of the element and its children.
*
* @since 2.3
*/
default void dispose() {
getChildren().forEach(element -> element.dispose());
/* override to perform any necessary cleanup */
}
}