blob: ba4c5593a79df792e8221dde106f76716b81956c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2015 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:
* Marc-Andre Laperle - Initial API and implementation
* Patrick Tasse - Add list methods
*******************************************************************************/
package org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.model.WorkbenchAdapter;
/**
* An ExportTraceElement represents an item in the ExportTraceWizard tree.
*
* @author Marc-Andre Laperle
*/
public abstract class TracePackageElement extends WorkbenchAdapter {
private final List<TracePackageElement> fChildren;
private TracePackageElement fParent;
private boolean fEnabled;
private boolean fChecked;
private boolean fVisible;
/**
*
* @param parent
* the parent of this element, can be set to null
*/
public TracePackageElement(TracePackageElement parent) {
fParent = parent;
fEnabled = true;
fVisible = true;
fChildren = new ArrayList<>();
if (parent != null) {
parent.addChild(this);
}
}
/**
* Add a child at the end of the element's children list.
*
* @param child
* the element to add as a child
*/
public void addChild(TracePackageElement child) {
child.setParent(this);
fChildren.add(child);
}
/**
* Insert a child at the specified position in the element's children list.
*
* @param index
* the index at which the element is to be inserted
* @param child
* the element to insert as a child
*/
public void addChild(int index, TracePackageElement child) {
fChildren.add(index, child);
child.setParent(this);
}
/**
* Remove a child from the element's children list.
*
* @param child
* the child to remove
*/
public void removeChild(TracePackageElement child) {
fChildren.remove(child);
child.setParent(null);
}
/**
* Returns the index of the specified child in the element's children list.
*
* @param child
* the child to search for
* @return the index of the child in the list, or -1 if not found
*/
public int indexOf(TracePackageElement child) {
return fChildren.indexOf(child);
}
/**
* @return the parent of this element or null if there is no parent
*/
public TracePackageElement getParent() {
return fParent;
}
private void setParent(TracePackageElement parent) {
fParent = parent;
}
/**
* Get the text representation of this element to be displayed in the tree.
*
* @return the text representation
*/
public abstract String getText();
/**
* Get the children of this element
*
* @return the children of this element
*/
public TracePackageElement[] getChildren() {
return fChildren.toArray(new TracePackageElement[fChildren.size()]);
}
/**
* Get the visible children of this element
*
* @return the visible children of this element
*/
public TracePackageElement[] getVisibleChildren() {
List<TracePackageElement> visibleChildren = new ArrayList<>();
for (TracePackageElement child : fChildren) {
if (child.isVisible()) {
visibleChildren.add(child);
}
}
return visibleChildren.toArray(new TracePackageElement[0]);
}
/**
* Get the total size of the element including its children
*
* @param checkedOnly
* only count checked elements
*
* @return the total size of the element
*/
public long getSize(boolean checkedOnly) {
long size = 0;
if (fChildren != null) {
for (TracePackageElement child : fChildren) {
size += child.getSize(checkedOnly);
}
}
return size;
}
/**
* Get the image representation of this element to be displayed in the tree.
*
* @return the image representation
*/
public Image getImage() {
return null;
}
/**
* Returns whether or not the element is enabled (grayed and not
* modifiable).
*
* @return whether or not the element is enabled
*/
public boolean isEnabled() {
return fEnabled;
}
/**
* Returns whether or not the element is checked.
*
* @return whether or not the element is checked
*/
public boolean isChecked() {
return fChecked;
}
/**
* Returns whether or not the element is visible.
*
* @return whether or not the element is visible
*/
public boolean isVisible() {
return fVisible;
}
/**
* Sets whether or not the element should be enabled (grayed and not
* modifiable).
*
* @param enabled
* if the element should be enabled
*/
public void setEnabled(boolean enabled) {
fEnabled = enabled;
}
/**
* Sets whether or not the element should be checked.
*
* @param checked
* if the element should be checked
*/
public void setChecked(boolean checked) {
fChecked = checked;
}
/**
* Sets whether or not the element is visible.
*
* @param visible
* if the element should be visible
*/
public void setVisible(boolean visible) {
fVisible = visible;
}
}