use of org.knime.core.ui.node.workflow.SingleNodeContainerUI in project knime-core by knime.
the class WorkflowEditPartFactory method createEditPart.
/**
* Creates the referring edit parts for the following parts of the model.
* <ul>
* <li>{@link WorkflowManager}: either {@link WorkflowRootEditPart} or {@link NodeContainerEditPart} (depending on
* the currently displayed level)</li>
* <li>{@link SingleNodeContainer}: {@link NodeContainerEditPart}</li>
* <li>{@link NodeInPort}: {@link NodeInPortEditPart}</li>
* <li>{@link NodeOutPort}: {@link NodeOutPortEditPart}</li>
* <li>{@link ConnectionContainer}: {@link ConnectionContainerEditPart}</li>
* <li>{@link WorkflowInPort}: {@link WorkflowInPortEditPart}</li>
* <li>{@link WorkflowOutPort}: {@link WorkflowOutPortEditPart}</li>
* </ul>
*
* The {@link WorkflowRootEditPart} has its {@link NodeContainer}s and its {@link WorkflowInPort}s and
* {@link WorkflowOutPort}s as model children. The {@link NodeContainerEditPart} has its {@link NodePort}s as its
* children.
*
* @see WorkflowRootEditPart#getModelChildren()
* @see NodeContainerEditPart#getModelChildren()
*
* @throws IllegalArgumentException if any other object is passed
*
* {@inheritDoc}
*/
@Override
public EditPart createEditPart(final EditPart context, final Object model) {
// instantiated here
// correct type in the if statement
// model at the end of method
EditPart part = null;
if (model instanceof WorkflowManagerUI) {
// this is out "root" workflow manager
if (m_isTop) {
// all following objects of type WorkflowManager are treated as
// metanodes and displayed as NodeContainers
m_isTop = false;
part = new WorkflowRootEditPart();
} else {
// we already have a "root" workflow manager
// must be a metanode
part = new SubworkflowEditPart();
}
} else if (model instanceof NodeAnnotation) {
/* IMPORTANT: first test NodeAnnotation then Annotation (as the
* first derives from the latter! */
part = new NodeAnnotationEditPart();
} else if (model instanceof Annotation) {
/* IMPORTANT: first test NodeAnnotation then Annotation (as the
* first derives from the latter! */
/* workflow annotations hang off the workflow manager */
part = new AnnotationEditPart();
} else if (model instanceof WorkflowPortBar) {
WorkflowPortBar bar = (WorkflowPortBar) model;
if (bar.isInPortBar()) {
part = new WorkflowInPortBarEditPart();
} else {
part = new WorkflowOutPortBarEditPart();
}
} else if (model instanceof SingleNodeContainerUI) {
// SingleNodeContainer -> NodeContainerEditPart
part = new NodeContainerEditPart();
// we have to test for WorkflowInPort first because it's a
// subclass of NodeInPort (same holds for WorkflowOutPort and
// NodeOutPort)
} else if (model instanceof WorkflowInPortUI && context instanceof WorkflowInPortBarEditPart) {
// WorkflowInPort and context WorkflowRootEditPart ->
// WorkflowInPortEditPart
/*
* if the context is a WorkflowRootEditPart it indicates that the
* WorkflowInPort is a model child of the WorkflowRootEditPart, i.e.
* we look at it as a workflow in port. If the context is a
* NodeContainerEditPart the WorkflowInPort is a model child of a
* NodeContainerEditPart and we look at it as a node in port.
*/
WorkflowInPortUI inport = (WorkflowInPortUI) model;
part = new WorkflowInPortEditPart(inport.getPortType(), inport.getPortIndex());
} else if (model instanceof WorkflowOutPortUI && context instanceof WorkflowOutPortBarEditPart) {
// WorkflowOutPort and context WorkflowRootEditPart ->
// WorkflowOutPortEditPart
/*
* if the context is a WorkflowRootEditPart it indicates that the
* WorkflowOutPort is a model child of the WorkflowRootEditPart,
* i.e. we look at it as a workflow out port. If the context is a
* NodeContainerEditPart the WorkflowOutPort is a model child of a
* NodeContainerEditPart and we look at it as a node out port.
*/
// TODO: return SubWorkFlowOutPortEditPart
WorkflowOutPortUI outport = (WorkflowOutPortUI) model;
part = new WorkflowOutPortEditPart(outport.getPortType(), outport.getPortIndex());
} else if (model instanceof WorkflowOutPortUI) {
// TODO: return SubWorkFlowOutPortEditPart
WorkflowOutPortUI outport = (WorkflowOutPortUI) model;
part = new MetaNodeOutPortEditPart(outport.getPortType(), outport.getPortIndex());
} else if (model instanceof NodeInPortUI) {
// NodeInPort -> NodeInPortEditPart
NodePortUI port = (NodeInPortUI) model;
part = new NodeInPortEditPart(port.getPortType(), port.getPortIndex());
} else if (model instanceof NodeOutPortUI) {
// NodeOutPort -> NodeOutPortEditPart
NodePortUI port = (NodeOutPortUI) model;
part = new NodeOutPortEditPart(port.getPortType(), port.getPortIndex());
} else if (model instanceof ConnectionContainerUI) {
// ConnectionContainer -> ConnectionContainerEditPart
part = new ConnectionContainerEditPart();
} else {
throw new IllegalArgumentException("unknown model obj: " + model);
}
// associate the model with the part (= the controller)
part.setModel(model);
return part;
}
use of org.knime.core.ui.node.workflow.SingleNodeContainerUI in project knime-core by knime.
the class SelectLoopAction method internalCalculateEnabled.
/**
* @return <code>true</code> if at we have a single node which has a
* dialog
* @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled()
*/
@Override
protected boolean internalCalculateEnabled() {
NodeContainerEditPart[] selected = getSelectedParts(NodeContainerEditPart.class);
if (selected.length != 1) {
return false;
}
NodeContainerUI node = selected[0].getNodeContainer();
if (!(node instanceof SingleNodeContainerUI)) {
return false;
}
if (((SingleNodeContainerUI) node).isMemberOfScope()) {
return true;
}
return false;
}
use of org.knime.core.ui.node.workflow.SingleNodeContainerUI in project knime-core by knime.
the class DynamicNodeDescriptionCreator method addDescription.
/**
* Adds the description for the node represented by this node edit part to
* the StringBuilder. If useSingleLine is set it will use the simple one
* line description and add a new line html tag at the end, otherwise it
* will just add the entire full description of the node to the passed
* buffer.
*
* @param nc the node to add the descriptions for.
* @param useSingleLine if set the single line description is added,
* otherwise the entire full description is added
* @param bld the buffer to add the one line strings to.
*/
public void addDescription(final NodeContainerUI nc, final boolean useSingleLine, final StringBuilder bld) {
if (!(nc instanceof SingleNodeContainerUI)) {
addSubWorkflowDescription(nc, useSingleLine, bld);
} else {
SingleNodeContainerUI singleNC = (SingleNodeContainerUI) nc;
if (useSingleLine) {
bld.append("<dt><b>");
bld.append(nc.getName());
bld.append(":</b></dt>");
bld.append("<dd>");
// TODO functionality disabled
bld.append(goodOneLineDescr(NodeFactoryHTMLCreator.instance.readShortDescriptionFromXML(singleNC.getXMLDescription())));
bld.append("</dd>");
} else {
try {
bld.append(NodeFactoryHTMLCreator.instance.readFullDescription(singleNC.getXMLDescription()));
} catch (FileNotFoundException ex) {
NodeLogger.getLogger(DynamicNodeDescriptionCreator.class).error("Could not create HTML node description: " + ex.getMessage(), ex);
bld.append("<b>No description available, reason: " + ex.getMessage() + "</b>");
} catch (TransformerFactoryConfigurationError ex) {
NodeLogger.getLogger(DynamicNodeDescriptionCreator.class).error("Could not create HTML node description: " + ex.getMessage(), ex);
bld.append("<b>No description available, reason: " + ex.getMessage() + "</b>");
} catch (TransformerException ex) {
NodeLogger.getLogger(DynamicNodeDescriptionCreator.class).error("Could not create HTML node description: " + ex.getMessage(), ex);
bld.append("<b>No description available, reason: " + ex.getMessage() + "</b>");
}
}
}
}
Aggregations