/**
* 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 whether this model element has children or not.
- * @return <code>true</code> if this model has children else <code>false</code>
- */
- boolean hasChildren();
+
/**
* Returns a list of children model elements.
+ *
* @return a list of children model elements.
*/
List<ITmfProjectModelElement> getChildren();
- /**
- * Method to add a child to the model element.
- * @param child A child element to add.
- */
- void addChild(ITmfProjectModelElement child);
- /**
- * Method to remove a child from the model element.
- * @param child A child element to remove
- */
- void removeChild(ITmfProjectModelElement child);
+
/**
* Method to request to refresh the project.
*/
void refresh();
+
+ /**
+ * 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();
+ }
}
protected TmfAnalysisElement(String name, IResource resource, ITmfProjectModelElement parent, @NonNull IAnalysisModuleHelper module) {
super(name, resource, parent);
fAnalysisHelper = module;
- parent.addChild(this);
}
// ------------------------------------------------------------------------
// TmfProjectModelElement
// ------------------------------------------------------------------------
+ /**
+ * @since 2.0
+ */
@Override
- void refreshChildren() {
+ protected void refreshChildren() {
fCanExecute = true;
/* Refresh the outputs of this analysis */
/** Get base path for resource */
IPath path = getProject().getTracesFolder().getPath();
- if (fResource instanceof IFolder) {
- path = ((IFolder) fResource).getFullPath();
+ IResource resource = getResource();
+ if (resource instanceof IFolder) {
+ path = ((IFolder) resource).getFullPath();
}
/*
if (outputElement == null) {
IFolder newresource = ResourcesPlugin.getWorkspace().getRoot().getFolder(path.append(output.getName()));
outputElement = new TmfAnalysisOutputElement(output.getName(), newresource, this, output);
+ addChild(outputElement);
}
outputElement.refreshChildren();
}
protected TmfAnalysisOutputElement(String name, IResource resource, ITmfProjectModelElement parent, IAnalysisOutput output) {
super(name, resource, parent);
fOutput = output;
- parent.addChild(this);
}
/**
}
}
+ @Override
+ protected void refreshChildren() {
+ /* Nothing to do */
+ }
+
}
*/
public TmfCommonProjectElement(String name, IResource resource, TmfProjectModelElement parent) {
super(name, resource, parent);
- parent.addChild(this);
refreshTraceType();
TmfSignalManager.register(this);
}
// TmfProjectModelElement
// ------------------------------------------------------------------------
+ /**
+ * @since 2.0
+ */
@Override
- void refreshChildren() {
+ protected void refreshChildren() {
/* Refreshes the analysis under this trace */
Map<String, TmfAnalysisElement> childrenMap = new HashMap<>();
}
/** Get the base path to put the resource to */
- IPath path = fResource.getFullPath();
+ IPath path = getResource().getFullPath();
/* Add all new analysis modules or refresh outputs of existing ones */
for (IAnalysisModuleHelper module : TmfAnalysisManager.getAnalysisModules(traceClass).values()) {
*/
IFolder newresource = ResourcesPlugin.getWorkspace().getRoot().getFolder(path.append(module.getId()));
analysis = new TmfAnalysisElement(module.getName(), newresource, this, module);
+ addChild(analysis);
}
analysis.refreshChildren();
}
while (!(parent instanceof TmfTracesFolder || parent instanceof TmfExperimentElement || parent instanceof TmfExperimentFolder)) {
parent = parent.getParent();
}
- IPath path = fResource.getFullPath().makeRelativeTo(parent.getPath());
+ IPath path = getResource().getFullPath().makeRelativeTo(parent.getPath());
return path.toString();
}
* @return the bookmarks file
*/
public IFile getBookmarksFile() {
- final IFolder folder = (IFolder) fResource;
+ final IFolder folder = (IFolder) getResource();
IFile file = folder.getFile(getName() + '_');
return file;
}
IFolder supplFolder = prepareTraceSupplementaryFolder(getSupplementaryFolderPath(), true);
try {
- fResource.setPersistentProperty(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER, supplFolder.getLocation().toOSString());
+ getResource().setPersistentProperty(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER, supplFolder.getLocation().toOSString());
} catch (CoreException e) {
Activator.getDefault().logError("Error setting persistant property " + TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER, e); //$NON-NLS-1$
}
@Override
public IFolder getResource() {
- return (IFolder) fResource;
+ return (IFolder) super.getResource();
}
+ /**
+ * @since 2.0
+ */
@Override
- void refreshChildren() {
+ protected void refreshChildren() {
IFolder folder = getResource();
/* Update the trace children of this experiment */
childrenMap.remove(elementPath);
} else {
element = new TmfTraceElement(name, resource, this);
+ addChild(element);
}
}
}
for (IAnalysisModuleHelper module : TmfAnalysisManager.getAnalysisModules().values()) {
if (!analysisMap.containsKey(module.getId()) && module.appliesToExperiment() && (experiment.getAnalysisModule(module.getId()) != null)) {
- IFolder newresource = ResourcesPlugin.getWorkspace().getRoot().getFolder(fResource.getFullPath().append(module.getId()));
+ IFolder newresource = ResourcesPlugin.getWorkspace().getRoot().getFolder(getResource().getFullPath().append(module.getId()));
TmfAnalysisElement analysis = new TmfAnalysisElement(module.getName(), newresource, this, module);
+ addChild(analysis);
analysis.refreshChildren();
analysisMap.put(module.getId(), analysis);
}
*/
public TmfExperimentFolder(String name, IFolder folder, TmfProjectElement parent) {
super(name, folder, parent);
- parent.addChild(this);
}
// ------------------------------------------------------------------------
@Override
public IFolder getResource() {
- return (IFolder) fResource;
+ return (IFolder) super.getResource();
}
+ /**
+ * @since 2.0
+ */
@Override
- void refreshChildren() {
+ protected void refreshChildren() {
IFolder folder = getResource();
// Get the children from the model
childrenMap.remove(name);
} else {
element = new TmfExperimentElement(name, expFolder, this);
+ addChild(element);
}
((TmfExperimentElement) element).refreshChildren();
}
// ------------------------------------------------------------------------
// Constructor
// ------------------------------------------------------------------------
+
/**
* Constructor.
*
* Creates the TMF project model element.
- * @param name The name of the project.
- * @param project The project reference.
- * @param parent The parent element
+ *
+ * @param name
+ * The name of the project.
+ * @param project
+ * The project reference.
+ * @param parent
+ * The parent element
*/
public TmfProjectElement(String name, IProject project, ITmfProjectModelElement parent) {
super(name, project, parent);
@Override
public IProject getResource() {
- return (IProject) fResource;
+ return (IProject) super.getResource();
}
@Override
// TmfProjectModelElement
// ------------------------------------------------------------------------
+ /**
+ * @since 2.0
+ */
@Override
- void refreshChildren() {
+ protected void refreshChildren() {
IProject project = getResource();
// Get the children from the model
childrenMap.remove(name);
} else {
element = new TmfTracesFolder(TmfTracesFolder.TRACES_FOLDER_NAME, folder, this);
+ addChild(element);
}
((TmfTracesFolder) element).refreshChildren();
}
childrenMap.remove(name);
} else {
element = new TmfExperimentFolder(TmfExperimentFolder.EXPER_FOLDER_NAME, folder, this);
+ addChild(element);
}
((TmfExperimentFolder) element).refreshChildren();
}
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.swt.widgets.Display;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.CommonViewer;
+import com.google.common.collect.ImmutableList;
+
/**
* The implementation of the base TMF project model element. It provides default implementation
* of the <code>ITmfProjectModelElement</code> interface.
// ------------------------------------------------------------------------
private final String fName;
- /**
- * The project model element resource.
- */
- protected final IResource fResource;
- /**
- * The project model resource location (URI)
- */
- protected final URI fLocation;
- /**
- * The project model path of a resource.
- */
- protected final IPath fPath;
+
+ /** The project model element resource */
+ private final IResource fResource;
+
+ /** The project model resource location (URI) */
+ private final URI fLocation;
+
+ /** The project model path of a resource */
+ private final IPath fPath;
+
private final ITmfProjectModelElement fParent;
- /**
- * The list of children elements.
- */
- protected final List<ITmfProjectModelElement> fChildren;
+
+ /** The list of children elements */
+ private final @NonNull List<ITmfProjectModelElement> fChildren;
// ------------------------------------------------------------------------
// Constructor
// ------------------------------------------------------------------------
+
/**
* Constructor.
*
* Creates a base project model element.
- * @param name The name of the element.
- * @param resource The element resource.
- * @param parent The parent model element.
+ *
+ * @param name
+ * The name of the element.
+ * @param resource
+ * The element resource.
+ * @param parent
+ * The parent model element.
*/
protected TmfProjectModelElement(String name, IResource resource, ITmfProjectModelElement parent) {
fName = name;
return fParent;
}
- @Override
- public boolean hasChildren() {
- return fChildren.size() > 0;
- }
-
@Override
public List<ITmfProjectModelElement> getChildren() {
- return fChildren;
- }
-
- @Override
- public void addChild(ITmfProjectModelElement child) {
- fChildren.add(child);
- }
-
- @Override
- public void removeChild(ITmfProjectModelElement child) {
- fChildren.remove(child);
+ return ImmutableList.copyOf(fChildren);
}
@Override
* Refresh the children of this model element, adding new children and
* removing dangling children as necessary. The remaining children should
* also refresh their own children sub-tree.
+ *
+ * @since 2.0
*/
- void refreshChildren() {
- // Sub-classes may override this method as needed
+ protected abstract void refreshChildren();
+
+ /**
+ * Add a new child element to this element.
+ *
+ * @param child
+ * The child to add
+ */
+ protected void addChild(ITmfProjectModelElement child) {
+ fChildren.add(child);
+ }
+
+ /**
+ * Remove an element from the current child elements.
+ *
+ * @param child
+ * The child to remove
+ */
+ protected void removeChild(ITmfProjectModelElement child) {
+ fChildren.remove(child);
}
/**
@Override
public IFile createBookmarksFile() throws CoreException {
IFile file = getBookmarksFile();
- if (fResource instanceof IFolder) {
+ if (getResource() instanceof IFolder) {
return createBookmarksFile(getProject().getTracesFolder().getResource(), ITmfEventsEditorConstants.TRACE_EDITOR_INPUT_TYPE);
}
return file;
@Override
public IFile getBookmarksFile() {
IFile file = null;
- if (fResource instanceof IFile) {
- file = (IFile) fResource;
- } else if (fResource instanceof IFolder) {
- final IFolder folder = (IFolder) fResource;
+ IResource resource = getResource();
+ if (resource instanceof IFile) {
+ file = (IFile) resource;
+ } else if (resource instanceof IFolder) {
+ final IFolder folder = (IFolder) resource;
file = folder.getFile(getName() + '_');
}
return file;
}
});
- IPath path = fResource.getLocation();
+ IPath path = getResource().getLocation();
if (path != null) {
if (getParent() instanceof TmfTraceFolder) {
TmfExperimentFolder experimentFolder = getProject().getExperimentsFolder();
}
// Finally, delete the trace
- fResource.delete(true, progressMonitor);
+ getResource().delete(true, progressMonitor);
}
}
private static final ReadOnlyTextPropertyDescriptor PATH_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(PATH, PATH);
private static final ReadOnlyTextPropertyDescriptor LOCATION_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(LOCATION, LOCATION);
- private static final IPropertyDescriptor[] DESCRIPTORS = { NAME_DESCRIPTOR, PATH_DESCRIPTOR,
- LOCATION_DESCRIPTOR };
+ private static final IPropertyDescriptor[] DESCRIPTORS = { NAME_DESCRIPTOR, PATH_DESCRIPTOR, LOCATION_DESCRIPTOR };
static {
NAME_DESCRIPTOR.setCategory(INFO_CATEGORY);
// ------------------------------------------------------------------------
/**
- * Constructor.
- * Creates folder model element under the project.
- * @param name The name of trace folder.
- * @param resource The folder resource.
- * @param parent The parent element (project).
+ * Constructor. Creates folder model element under the project.
+ *
+ * @param name
+ * The name of trace folder.
+ * @param resource
+ * The folder resource.
+ * @param parent
+ * The parent element (project).
*/
public TmfTraceFolder(String name, IFolder resource, TmfProjectElement parent) {
super(name, resource, parent);
- parent.addChild(this);
}
/**
- * Constructor.
- * Creates folder model element under another folder.
- * @param name The name of trace folder.
- * @param resource The folder resource.
- * @param parent The parent element (folder).
+ * Constructor. Creates folder model element under another folder.
+ *
+ * @param name
+ * The name of trace folder.
+ * @param resource
+ * The folder resource.
+ * @param parent
+ * The parent element (folder).
*/
public TmfTraceFolder(String name, IFolder resource, TmfTraceFolder parent) {
super(name, resource, parent);
- parent.addChild(this);
}
// ------------------------------------------------------------------------
@Override
public IFolder getResource() {
- return (IFolder) fResource;
+ return (IFolder) super.getResource();
}
+ /**
+ * @since 2.0
+ */
@Override
- void refreshChildren() {
+ protected void refreshChildren() {
IFolder folder = getResource();
// Get the children from the model
} else {
element = new TmfTraceFolder(name, (IFolder) resource, this);
}
+ addChild(element);
} else if (!isFolder && !(element instanceof TmfTraceElement)) {
element = new TmfTraceElement(name, resource, this);
+ addChild(element);
} else {
childrenMap.remove(name);
}