Class EObjectNodeProcessor<T extends EObject>

java.lang.Object
org.nasdanika.html.model.app.graph.emf.EObjectNodeProcessor<T>
All Implemented Interfaces:
WidgetFactory

public class EObjectNodeProcessor<T extends EObject> extends Object implements WidgetFactory
Base class for node processors. Groups connections by reference, creates a consumer per reference (builder), chains the labels supplier with the consumers.
Author:
Pavel
  • Field Details

  • Constructor Details

    • EObjectNodeProcessor

      public EObjectNodeProcessor(org.nasdanika.graph.processor.NodeProcessorConfig<WidgetFactory,WidgetFactory> config, org.nasdanika.common.Context context, Function<org.nasdanika.common.ProgressMonitor,org.nasdanika.html.model.app.Action> prototypeProvider)
  • Method Details

    • getId

      public int getId()
      Generated unique ID for grouping and comparing/ordering. E.g. deciding which processor of two is responsible for combining opposite references (Ecore level and Nasdanika level) or grouping all cross-references into one for graph generation.
      Returns:
    • setChildProcessors

      public void setChildProcessors(Map<org.nasdanika.graph.emf.EObjectNode,org.nasdanika.graph.processor.ProcessorInfo<Object>> childProcessors)
    • setParentProcessor

      public void setParentProcessor(ConnectionProcessor parentProcessor)
    • setNode

      public void setNode(org.nasdanika.graph.emf.EObjectNode node)
    • getTarget

      public T getTarget()
    • getConfig

      public org.nasdanika.graph.processor.NodeProcessorConfig<WidgetFactory,WidgetFactory> getConfig()
    • setIncomingRefernceEndpoint

      public void setIncomingRefernceEndpoint(org.nasdanika.graph.emf.EReferenceConnection connection, WidgetFactory endpoint)
    • setOutgoingRefernceEndpoint

      public void setOutgoingRefernceEndpoint(org.nasdanika.graph.emf.EReferenceConnection connection, WidgetFactory endpoint)
    • setIncominOperationgEndpoint

      public void setIncominOperationgEndpoint(org.nasdanika.graph.emf.EOperationConnection connection, WidgetFactory endpoint)
    • setOutgoingOperationEndpoint

      public void setOutgoingOperationEndpoint(org.nasdanika.graph.emf.EOperationConnection connection, WidgetFactory endpoint)
    • getIncomingHandler

      public WidgetFactory getIncomingHandler(org.nasdanika.graph.Connection connection)
    • getOutgoingHandler

      public WidgetFactory getOutgoingHandler(org.nasdanika.graph.Connection connection)
    • createLabels

      protected Collection<org.nasdanika.html.model.app.Label> createLabels(org.nasdanika.common.ProgressMonitor progressMonitor)
    • createAction

      protected org.nasdanika.html.model.app.Label createAction(org.nasdanika.common.ProgressMonitor progressMonitor)
      Creates action for the node.
      Parameters:
      progressMonitor -
      Returns:
    • doCreateLabelsSupplier

      protected org.nasdanika.common.Supplier<Collection<org.nasdanika.html.model.app.Label>> doCreateLabelsSupplier()
      Returns:
      Supplier of labels with object's own information, without references. Reference-related information is added by reference consumers/builders.
    • compareIncomingReferences

      Comparator for reference sorting
      Parameters:
      a -
      b -
      Returns:
    • compareOutgoingReferences

      Comparator for reference sorting
      Parameters:
      a -
      b -
      Returns:
    • compareIncomingOperations

      protected int compareIncomingOperations(EOperation aOp, List<Object> aArgs, EOperation bOp, List<Object> bArgs)
      Comparator for operation binding sorting
      Returns:
    • compareOutgoingOperations

      protected int compareOutgoingOperations(EOperation aOp, List<Object> aArgs, EOperation bOp, List<Object> bArgs)
      Comparator for operator binding sorting
      Returns:
    • getReferenceLabelBuilders

      protected List<org.nasdanika.common.Consumer<Collection<org.nasdanika.html.model.app.Label>>> getReferenceLabelBuilders()
    • getOperationLabelBuilders

      protected List<org.nasdanika.common.Consumer<Collection<org.nasdanika.html.model.app.Label>>> getOperationLabelBuilders()
    • isCallIncomingReferenceLabelsSuppliers

      protected boolean isCallIncomingReferenceLabelsSuppliers(EReference eReference)
      Parameters:
      eReference -
      Returns:
      true if lables suppliers shall be called to create labels/actions. This implementation returns false.
    • isCallOutgoingReferenceLabelsSuppliers

      protected boolean isCallOutgoingReferenceLabelsSuppliers(EReference eReference)
      Parameters:
      eReference -
      Returns:
      true if lables suppliers shall be called to create labels/actions. This implementation returns true for containment references, i.e. actions for child objects shall be created.
    • isCallIncomingOperationLabelsSuppliers

      protected boolean isCallIncomingOperationLabelsSuppliers(EOperation eOperation, List<Object> arguments)
      Parameters:
      eOperation -
      Returns:
      true if lables suppliers shall be called to create labels/actions. This implementation returns false.
    • isCallOutgoingOperationLabelsSuppliers

      protected boolean isCallOutgoingOperationLabelsSuppliers(EOperation eOperation, List<Object> arguments)
      Parameters:
      eOperation -
      Returns:
      true if lables suppliers shall be called to create labels/actions. This implementation returns false.
    • createIncomingReferenceLabelConsumer

      protected org.nasdanika.common.Consumer<Collection<org.nasdanika.html.model.app.Label>> createIncomingReferenceLabelConsumer(EReference eReference, List<Map.Entry<org.nasdanika.graph.emf.EReferenceConnection,WidgetFactory>> referenceIncomingEndpoints)
      Returns:
    • createIncomingReferenceLabelBuilder

      protected org.nasdanika.common.Consumer<org.nasdanika.common.Supplier.FunctionResult<Collection<org.nasdanika.html.model.app.Label>,Map<org.nasdanika.graph.emf.EReferenceConnection,Collection<org.nasdanika.html.model.app.Label>>>> createIncomingReferenceLabelBuilder(EReference eReference, List<Map.Entry<org.nasdanika.graph.emf.EReferenceConnection,WidgetFactory>> referenceIncomingEndpoints)
      Builds target labels
      Parameters:
      eReference -
      Returns:
    • buildIncomingReference

      protected void buildIncomingReference(EReference eReference, List<Map.Entry<org.nasdanika.graph.emf.EReferenceConnection,WidgetFactory>> referenceIncomingEndpoints, Collection<org.nasdanika.html.model.app.Label> labels, Map<org.nasdanika.graph.emf.EReferenceConnection,Collection<org.nasdanika.html.model.app.Label>> incomingLabels, org.nasdanika.common.ProgressMonitor progressMonitor)
      Called by builder/consumer's execute();
      Parameters:
      eReference -
      referenceIncomingEndpoints -
      labels -
      incomingLabels -
      progressMonitor -
    • createIncomingOperationLabelConsumer

      protected org.nasdanika.common.Consumer<Collection<org.nasdanika.html.model.app.Label>> createIncomingOperationLabelConsumer(EOperation eOperation, List<Object> arguments, List<Map.Entry<org.nasdanika.graph.emf.EOperationConnection,WidgetFactory>> operationIncomingEndpoints)
      Returns:
    • createIncomingOperationLabelBuilder

      protected org.nasdanika.common.Consumer<org.nasdanika.common.Supplier.FunctionResult<Collection<org.nasdanika.html.model.app.Label>,Map<org.nasdanika.graph.emf.EOperationConnection,Collection<org.nasdanika.html.model.app.Label>>>> createIncomingOperationLabelBuilder(EOperation eOperation, List<Object> arguments, List<Map.Entry<org.nasdanika.graph.emf.EOperationConnection,WidgetFactory>> operationIncomingEndpoints)
      Builds target labels
      Parameters:
      eReference -
      Returns:
    • buildIncomingOperation

      protected void buildIncomingOperation(EOperation eOperation, List<Object> arguments, List<Map.Entry<org.nasdanika.graph.emf.EOperationConnection,WidgetFactory>> operationIncomingEndpoints, Collection<org.nasdanika.html.model.app.Label> labels, Map<org.nasdanika.graph.emf.EOperationConnection,Collection<org.nasdanika.html.model.app.Label>> incomingLabels, org.nasdanika.common.ProgressMonitor progressMonitor)
      Called by builder/consumer's execute();
    • createOutgoingOperationLabelConsumer

      protected org.nasdanika.common.Consumer<Collection<org.nasdanika.html.model.app.Label>> createOutgoingOperationLabelConsumer(EOperation eOperation, List<Object> arguments, List<Map.Entry<org.nasdanika.graph.emf.EOperationConnection,WidgetFactory>> operationOutgoingEndpoints)
      Returns:
    • createOutgoingOperationLabelBuilder

      protected org.nasdanika.common.Consumer<org.nasdanika.common.Supplier.FunctionResult<Collection<org.nasdanika.html.model.app.Label>,Map<org.nasdanika.graph.emf.EOperationConnection,Collection<org.nasdanika.html.model.app.Label>>>> createOutgoingOperationLabelBuilder(EOperation eOperation, List<Object> arguments, List<Map.Entry<org.nasdanika.graph.emf.EOperationConnection,WidgetFactory>> operationOutgoingEndpoints)
      Builds target labels
      Parameters:
      eReference -
      Returns:
    • buildOutgoingOperation

      protected void buildOutgoingOperation(EOperation eOperation, List<Object> arguments, List<Map.Entry<org.nasdanika.graph.emf.EOperationConnection,WidgetFactory>> operationOutgoingEndpoints, Collection<org.nasdanika.html.model.app.Label> labels, Map<org.nasdanika.graph.emf.EOperationConnection,Collection<org.nasdanika.html.model.app.Label>> outgoingLabels, org.nasdanika.common.ProgressMonitor progressMonitor)
      Called by builder/consumer's execute();
    • createOutgoingReferenceLabelConsumer

      protected org.nasdanika.common.Consumer<Collection<org.nasdanika.html.model.app.Label>> createOutgoingReferenceLabelConsumer(EReference eReference, List<Map.Entry<org.nasdanika.graph.emf.EReferenceConnection,WidgetFactory>> referenceOutgoingEndpoints)
      Returns:
    • createOutgoingReferenceLabelBuilder

      protected org.nasdanika.common.Consumer<org.nasdanika.common.Supplier.FunctionResult<Collection<org.nasdanika.html.model.app.Label>,Map<org.nasdanika.graph.emf.EReferenceConnection,Collection<org.nasdanika.html.model.app.Label>>>> createOutgoingReferenceLabelBuilder(EReference eReference, List<Map.Entry<org.nasdanika.graph.emf.EReferenceConnection,WidgetFactory>> referenceOutgoingEndpoints)
      Builds target labels
      Parameters:
      eReference -
      Returns:
    • buildOutgoingReference

      protected void buildOutgoingReference(EReference eReference, List<Map.Entry<org.nasdanika.graph.emf.EReferenceConnection,WidgetFactory>> referenceOutgoingEndpoints, Collection<org.nasdanika.html.model.app.Label> labels, Map<org.nasdanika.graph.emf.EReferenceConnection,Collection<org.nasdanika.html.model.app.Label>> outgoingLabels, org.nasdanika.common.ProgressMonitor progressMonitor)
      Called by builder/consumer's execute();
      Parameters:
      eReference -
      referenceOutgoingEndpoints -
      labels -
      incomingLabels -
      progressMonitor -
    • addReferenceChildren

      protected void addReferenceChildren(EReference eReference, Collection<org.nasdanika.html.model.app.Label> labels, Map<org.nasdanika.graph.emf.EReferenceConnection,Collection<org.nasdanika.html.model.app.Label>> outgoingLabels, org.nasdanika.common.ProgressMonitor progressMonitor)
    • setEClassEndpoint

      public final void setEClassEndpoint(org.nasdanika.graph.emf.EClassConnection connection, WidgetFactory eClassWidgetFactory)
    • createAction

      protected org.nasdanika.html.model.app.Action createAction(EObject eObject, org.nasdanika.common.ProgressMonitor progressMonitor)
      Creates and configures an action for eObject. Override to create from prototypes.
      Parameters:
      eObject -
      Returns:
    • newAction

      protected org.nasdanika.html.model.app.Action newAction(EObject eObject, org.nasdanika.common.ProgressMonitor progressMonitor)
      Creates a new action using a factory. Override to create from prototypes.
      Returns:
    • createLink

      protected org.nasdanika.html.model.app.Link createLink(EObject eObject, String path, org.nasdanika.common.ProgressMonitor progressMonitor)
      Creates and configures a link for eObject. Override to create from prototypes.
      Parameters:
      eObject -
      Returns:
    • createLabel

      protected org.nasdanika.html.model.app.Label createLabel(EObject eObject, org.nasdanika.common.ProgressMonitor progressMonitor)
      Creates and configures a label for eObject. Override to create from prototypes.
      Parameters:
      eObject -
      Returns:
    • configureLabel

      public void configureLabel(Object source, org.nasdanika.html.model.app.Label label, org.nasdanika.common.ProgressMonitor progressMonitor)
      Configures label.
      Specified by:
      configureLabel in interface WidgetFactory
      Parameters:
      eObject -
      label -
    • configureLabel

      protected void configureLabel(EObject eObject, org.nasdanika.html.model.app.Label label, org.nasdanika.common.ProgressMonitor progressMonitor)
    • getName

      protected String getName(org.nasdanika.ncore.NamedElement namedElement)
      Override to customize name, e.g. replace blank name with some generated name
      Parameters:
      namedElement -
      Returns:
    • render

      protected String render(Object object, org.nasdanika.common.ProgressMonitor progressMonitor)
    • resolve

      public void resolve(URI base, org.nasdanika.common.ProgressMonitor progressMonitor)
      Description copied from interface: WidgetFactory
      Used to establish node URI's. Propagates caller URI.
      Specified by:
      resolve in interface WidgetFactory
    • selectString

      public String selectString(Object selector, URI base, org.nasdanika.common.ProgressMonitor progressMonitor)
      Specified by:
      selectString in interface WidgetFactory
      Returns:
      widget rendered to (HTML) string
    • createLinkString

      public String createLinkString(URI base, org.nasdanika.common.ProgressMonitor progressMonitor)
      Description copied from interface: WidgetFactory
      Link rendered to String
      Specified by:
      createLinkString in interface WidgetFactory
      Returns:
    • createLink

      public Object createLink(URI base, org.nasdanika.common.ProgressMonitor progressMonitor)
      Description copied from interface: WidgetFactory
      Creates a link with URL's deresolved (relativized) against the provided base URI.
      Specified by:
      createLink in interface WidgetFactory
      Parameters:
      base - For connections, if not null, is resolved against the calling end URI - source or target, if it is not null. If null, the respective end URI is used as the base.
      Returns:
    • configureHelpModal

      protected void configureHelpModal(org.nasdanika.html.model.bootstrap.Modal helpModal)
      Override to configure the modal. E.g. center, change size, make scrollable, etc.
      Parameters:
      helpModal -
    • createHelpDecorator

      public static org.nasdanika.html.model.app.Label createHelpDecorator(String tooltip, String location, String title, String icon, Collection<EObject> contents, Consumer<org.nasdanika.html.model.bootstrap.Modal> modalConfigurator)
      Convenience method for creating help decorators. Returns null if the tooltip, location and contents are blank/empty. If the contents is empty returns a label or a link with a help icon and a tooltip. Otherwise returns a link with a tooltip and a modal. The modal header links to the location if it is not empty.
      Parameters:
      tooltip - Tooltip to show
      location - If not blank
      title - Modal header text
      icon -
      contents -
      modalConfigurator -
      Returns:
    • createHelpDecorator

      public static org.nasdanika.html.model.app.Label createHelpDecorator(String tooltip, String location, String title, String icon, String contents, Consumer<org.nasdanika.html.model.bootstrap.Modal> modalConfigurator)
    • createMarkdownHelpDecorator

      public org.nasdanika.html.model.app.Label createMarkdownHelpDecorator(String tooltip, String location, String title, String icon, String markdown, Consumer<org.nasdanika.html.model.bootstrap.Modal> modalConfigurator)
    • createHelpContents

      protected Collection<EObject> createHelpContents(URI base, org.nasdanika.common.ProgressMonitor progressMonitor)
    • createHelpDecorator

      public org.nasdanika.html.model.app.Label createHelpDecorator(URI base, org.nasdanika.common.ProgressMonitor progressMonitor)
      Description copied from interface: WidgetFactory
      Creates a help decorator with URL's deresolved (relativized) against the provided base URI. For example, an EObjectNodeProcessor for an object of type X would call its EClassConnection outgoing connection to create a help decorator. The EClassConnection would in turn call EClassNodeProcessor for EClass X to generate context help decorator.
      Specified by:
      createHelpDecorator in interface WidgetFactory
      Parameters:
      base - For connections, if not null, is resolved against the calling end URI - source or target, if it is not null. If null, the respective end URI is used as the base.
      Returns:
    • createLabelsSupplier

      public org.nasdanika.common.Supplier<Collection<org.nasdanika.html.model.app.Label>> createLabelsSupplier()
      Specified by:
      createLabelsSupplier in interface WidgetFactory
    • createLabelString

      public String createLabelString(org.nasdanika.common.ProgressMonitor progressMonitor)
      Description copied from interface: WidgetFactory
      Creates a string (HTML text) representation of "label".
      Specified by:
      createLabelString in interface WidgetFactory
      Returns:
    • createLabel

      public Object createLabel(org.nasdanika.common.ProgressMonitor progressMonitor)
      Description copied from interface: WidgetFactory
      Creates a "label" which is an HTML/text representation of something which does not navigate to that something. E.g. Label. Can be composite.
      Specified by:
      createLabel in interface WidgetFactory
      Returns:
    • addContent

      protected static void addContent(org.nasdanika.html.model.app.Action action, String content)
      Adds textual content.
      Parameters:
      content -
    • createText

      public static org.nasdanika.exec.content.Text createText(String content)
      Convenience method to create Text and set content in one shot.
      Parameters:
      content -
      Returns:
    • interpolatedMarkdown

      protected org.nasdanika.exec.content.Markdown interpolatedMarkdown(String markdown, URI location, org.nasdanika.common.ProgressMonitor progressMonitor)
      Parameters:
      markdown - Markdown text
      Returns:
      Spec for interpolating markdown and then converting to HTML.