/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.communication.views.spi;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.graphics.Image;
import de.rcenvironment.core.gui.communication.views.NetworkView;
import de.rcenvironment.core.gui.communication.views.model.NetworkGraphNodeWithContext;
import de.rcenvironment.core.gui.communication.views.model.NetworkViewModel;
/**
* Defines a contributor of {@link NetworkView} tree elements. Elements can currently be added at the root level (which creates a completely
* new subtree), or below each discovered network instance/node's representation.
*
* @author Robert Mischke
*/
public interface NetworkViewContributor {
/**
* Injects the current {@link NetworkViewModel} to fetch data from. Currently, a single model instance is used for the whole lifetime of
* the {@link NetworkView}.
*
* @param currentModel the model instance
*/
void setCurrentModel(NetworkViewModel currentModel);
/**
* Injects the current {@link TreeViewer} to update tree in contributor implementatios.
*
* @param viewer The {@link TreeViewer} of the {@link NetworkView}.
*/
void setTreeViewer(TreeViewer viewer);
/**
* @return the ordering value (lower values = more to the top) to define the position of the contributions to the root (first) level of
* the tree; a value of 0 means that this contributor does not provide any root-level elements
*/
int getRootElementsPriority();
/**
* @param parentNode the parent node; the contributor MUST only add its children if it recognizes its anchor point
* @return the contributed root level elements; typically, these are "folder" nodes
*/
Object[] getTopLevelElements(Object parentNode);
/**
* @return the ordering value (lower values = more to the top) to define the position of the contributions below a network instance's
* node; a value of 0 means that this contributor does not provide any network instance child elements
*/
int getInstanceDataElementsPriority();
/**
* @param instanceNode the network instance's node to fetch data from, if necessary
* @return the contributed child elements; most child elements are "folder" nodes
*/
Object[] getChildrenForNetworkInstanceNode(NetworkGraphNodeWithContext instanceNode);
/**
* @param parentNode the parent node; typically, a {@link ContributedNetworkViewNode}
* @return whether this element has child nodes
*/
boolean hasChildren(Object parentNode);
/**
* @param parentNode the parent node; typically, a {@link ContributedNetworkViewNode}
* @return the children of the given parent node
*/
Object[] getChildren(Object parentNode);
/**
* @param node the node to get the parent node of
* @return the parent node; should not be null
*/
Object getParent(Object node);
/**
* @param node the node to get the display text for
* @return the display text
*/
String getText(Object node);
/**
* @param node the node to get the image for
* @return the image; note: take care to reuse images where possible, and when to dispose them
*/
Image getImage(Object node);
/**
* Disposes internal resources - typically, {@link Image} instance.
*/
void dispose();
}