Class AbstractMaleSocket

java.lang.Object
jmri.jmrit.logixng.implementation.AbstractMaleSocket
All Implemented Interfaces:
PropertyChangeProvider, Base, Debugable, MaleSocket
Direct Known Subclasses:
AbstractDebuggerMaleSocket, DefaultMaleAnalogActionSocket, DefaultMaleAnalogExpressionSocket, DefaultMaleDigitalActionSocket, DefaultMaleDigitalBooleanActionSocket, DefaultMaleDigitalExpressionSocket, DefaultMaleStringActionSocket, DefaultMaleStringExpressionSocket, ModuleEditorMaleSocket

public abstract class AbstractMaleSocket extends Object implements MaleSocket
The abstract class that is the base class for all LogixNG classes that implements the Base interface.
  • Field Details

  • Constructor Details

  • Method Details

    • getErrorHandlingModuleSocket

    • isErrorHandlingModuleEnabled

      public static boolean isErrorHandlingModuleEnabled()
    • getObject

      public final Base getObject()
      Get the object that this male socket holds. This method is used when the object is going to be configured.
      Specified by:
      getObject in interface MaleSocket
      Returns:
      the object this male socket holds
    • getRoot

      public final Base getRoot()
      Get the root of the tree that this item belongs to.
      Specified by:
      getRoot in interface Base
      Returns:
      the top most item in the tree
    • isLocked

      public boolean isLocked()
      Is the node locked?
      Specified by:
      isLocked in interface MaleSocket
      Returns:
      true if locked, false otherwise
    • setLocked

      public void setLocked(boolean locked)
      Set if the node is locked or not.
      Specified by:
      setLocked in interface MaleSocket
      Parameters:
      locked - true if locked, false otherwise
    • isSystem

      public boolean isSystem()
      Is the node a system node?
      Specified by:
      isSystem in interface MaleSocket
      Returns:
      true if system, false otherwise
    • setSystem

      public void setSystem(boolean system)
      Set if the node is system or not.
      Specified by:
      setSystem in interface MaleSocket
      Parameters:
      system - true if system, false otherwise
    • getCategory

      public final Category getCategory()
      Get the category.
      Specified by:
      getCategory in interface Base
      Returns:
      the category
    • getChild

      Description copied from interface: Base
      Get a child of this item
      Specified by:
      getChild in interface Base
      Parameters:
      index - the index of the child to get
      Returns:
      the child
      Throws:
      IllegalArgumentException - if the index is less than 0 or greater or equal with the value returned by getChildCount()
      UnsupportedOperationException - when needed
    • getChildCount

      public final int getChildCount()
      Description copied from interface: Base
      Get the number of children.
      Specified by:
      getChildCount in interface Base
      Returns:
      the number of children
    • getShortDescription

      public final String getShortDescription(Locale locale)
      Description copied from interface: Base
      Get a short description of this item.
      Specified by:
      getShortDescription in interface Base
      Parameters:
      locale - The locale to be used
      Returns:
      a short description
    • getLongDescription

      public final String getLongDescription(Locale locale)
      Description copied from interface: Base
      Get a long description of this item.
      Specified by:
      getLongDescription in interface Base
      Parameters:
      locale - The locale to be used
      Returns:
      a long description
    • getUserName

      public final String getUserName()
      Description copied from interface: Base
      Get the user name.
      Specified by:
      getUserName in interface Base
      Returns:
      the user name
    • setUserName

      public final void setUserName(String s) throws NamedBean.BadUserNameException
      Description copied from interface: Base
      Get the user name.
      Specified by:
      setUserName in interface Base
      Parameters:
      s - the new user name
      Throws:
      NamedBean.BadUserNameException - when needed
    • getSystemName

      public final String getSystemName()
      Description copied from interface: Base
      Get the system name.
      Specified by:
      getSystemName in interface Base
      Returns:
      the system name
    • addPropertyChangeListener

      public final void addPropertyChangeListener(PropertyChangeListener l, String name, String listenerRef)
      Description copied from interface: Base
      Request a call-back when a bound property changes. Bound properties are the known state, commanded state, user and system names.
      Specified by:
      addPropertyChangeListener in interface Base
      Parameters:
      l - The listener. This may change in the future to be a subclass of NamedProprtyChangeListener that carries the name and listenerRef values internally
      name - The name (either system or user) that the listener uses for this namedBean, this parameter is used to help determine when which listeners should be moved when the username is moved from one bean to another
      listenerRef - A textual reference for the listener, that can be presented to the user when a delete is called
    • addPropertyChangeListener

      public final void addPropertyChangeListener(String propertyName, PropertyChangeListener l, String name, String listenerRef)
      Description copied from interface: Base
      Request a call-back when a bound property changes. Bound properties are the known state, commanded state, user and system names.
      Specified by:
      addPropertyChangeListener in interface Base
      Parameters:
      propertyName - The name of the property to listen to
      l - The listener. This may change in the future to be a subclass of NamedProprtyChangeListener that carries the name and listenerRef values internally
      name - The name (either system or user) that the listener uses for this namedBean, this parameter is used to help determine when which listeners should be moved when the username is moved from one bean to another
      listenerRef - A textual reference for the listener, that can be presented to the user when a delete is called
    • addPropertyChangeListener

      Description copied from interface: PropertyChangeProvider
      Add a PropertyChangeListener to the listener list.
      Specified by:
      addPropertyChangeListener in interface PropertyChangeProvider
      Parameters:
      l - The PropertyChangeListener to be added
    • addPropertyChangeListener

      public final void addPropertyChangeListener(String propertyName, PropertyChangeListener l)
      Description copied from interface: PropertyChangeProvider
      Add a PropertyChangeListener for a specific property.
      Specified by:
      addPropertyChangeListener in interface PropertyChangeProvider
      Parameters:
      propertyName - The name of the property to listen on.
      l - The PropertyChangeListener to be added
    • removePropertyChangeListener

      Description copied from interface: PropertyChangeProvider
      Remove the specified listener from this object.
      Specified by:
      removePropertyChangeListener in interface PropertyChangeProvider
      Parameters:
      l - The PropertyChangeListener to remove.
    • removePropertyChangeListener

      public final void removePropertyChangeListener(String propertyName, PropertyChangeListener l)
      Description copied from interface: PropertyChangeProvider
      Remove the specified listener of the specified property from this object.
      Specified by:
      removePropertyChangeListener in interface PropertyChangeProvider
      Parameters:
      propertyName - The name of the property to stop listening to.
      l - The PropertyChangeListener to remove.
    • updateListenerRef

      public final void updateListenerRef(PropertyChangeListener l, String newName)
      Specified by:
      updateListenerRef in interface Base
    • vetoableChange

      Specified by:
      vetoableChange in interface Base
      Throws:
      PropertyVetoException
    • getListenerRef

      Description copied from interface: Base
      Get the textual reference for the specific listener
      Specified by:
      getListenerRef in interface Base
      Parameters:
      l - the listener of interest
      Returns:
      the textual reference
    • getListenerRefs

      public final ArrayList<String> getListenerRefs()
      Description copied from interface: Base
      Returns a list of all the listeners references
      Specified by:
      getListenerRefs in interface Base
      Returns:
      a list of textual references
    • getNumPropertyChangeListeners

      public final int getNumPropertyChangeListeners()
      Description copied from interface: Base
      Number of current listeners. May return -1 if the information is not available for some reason.
      Specified by:
      getNumPropertyChangeListeners in interface Base
      Returns:
      the number of listeners.
    • getPropertyChangeListeners

      Description copied from interface: PropertyChangeProvider
      Get all PropertyChangeListeners currently attached to this object.
      Specified by:
      getPropertyChangeListeners in interface PropertyChangeProvider
      Returns:
      An array of PropertyChangeListeners.
    • getPropertyChangeListeners

      Description copied from interface: PropertyChangeProvider
      Get all PropertyChangeListeners currently listening to changes to the specified property.
      Specified by:
      getPropertyChangeListeners in interface PropertyChangeProvider
      Parameters:
      propertyName - the name of the property of interest
      Returns:
      an array of PropertyChangeListeners
    • getPropertyChangeListenersByReference

      Description copied from interface: Base
      Get a list of all the property change listeners that are registered using a specific name
      Specified by:
      getPropertyChangeListenersByReference in interface Base
      Parameters:
      name - The name (either system or user) that the listener has registered as referencing this namedBean
      Returns:
      empty list if none
    • getComment

      public String getComment()
      Description copied from interface: Base
      Get associated comment text. A LogixNG comment can have multiple lines, separated with \n.
      Specified by:
      getComment in interface Base
      Returns:
      the comment or null
    • setComment

      public void setComment(String comment)
      Description copied from interface: Base
      Set associated comment text.

      Comments can be any valid text.

      Specified by:
      setComment in interface Base
      Parameters:
      comment - the comment or null to remove an existing comment
    • getListen

      public boolean getListen()
      Description copied from interface: MaleSocket
      Get whenether the node should listen to changes or not.
      Specified by:
      getListen in interface MaleSocket
      Returns:
      true if listen, false if not listen
    • setListen

      public void setListen(boolean listen)
      Description copied from interface: MaleSocket
      Set whenether the node should listen to changes or not.
      Specified by:
      setListen in interface MaleSocket
      Parameters:
      listen - true if listen, false if not listen
    • getCatchAbortExecution

      public boolean getCatchAbortExecution()
      Description copied from interface: MaleSocket
      Is the node catching AbortExecution or not?
      Specified by:
      getCatchAbortExecution in interface MaleSocket
      Returns:
      true if catching, false otherwise
    • setCatchAbortExecution

      public void setCatchAbortExecution(boolean catchAbortExecution)
      Description copied from interface: MaleSocket
      Set if the node should catch AbortExecution or not.
      Specified by:
      setCatchAbortExecution in interface MaleSocket
      Parameters:
      catchAbortExecution - true if catch, false otherwise
    • addLocalVariable

      public void addLocalVariable(String name, SymbolTable.InitialValueType initialValueType, String initialValueData)
      Specified by:
      addLocalVariable in interface MaleSocket
    • addLocalVariable

      public void addLocalVariable(SymbolTable.VariableData variableData)
      Specified by:
      addLocalVariable in interface MaleSocket
    • clearLocalVariables

      public void clearLocalVariables()
      Specified by:
      clearLocalVariables in interface MaleSocket
    • getLocalVariables

      Specified by:
      getLocalVariables in interface MaleSocket
    • getParent

      public Base getParent()
      Description copied from interface: Base
      Get the parent.

      The following rules apply

      • LogixNGs has no parent. The method throws an UnsupportedOperationException if called.
      • Expressions and actions has the male socket that they are connected to as their parent.
      • Male sockets has the female socket that they are connected to as their parent.
      • The parent of a female sockets is the LogixNG, expression or action that has this female socket.
      • The parent of a male sockets is the same parent as the expression or action that it contains.
      Specified by:
      getParent in interface Base
      Returns:
      the parent of this object
    • setParent

      public void setParent(Base parent)
      Description copied from interface: Base
      Set the parent.

      The following rules apply

      • ExecutionGroups has no parent. The method throws an UnsupportedOperationException if called.
      • LogixNGs has the execution group as its parent.
      • Expressions and actions has the male socket that they are connected to as their parent.
      • Male sockets has the female socket that they are connected to as their parent.
      • The parent of a female sockets is the LogixNG, expression or action that has this female socket.
      • The parent of a male sockets is the same parent as the expression or action that it contains.
      Specified by:
      setParent in interface Base
      Parameters:
      parent - the new parent of this object
    • getConditionalNG

      Description copied from interface: Base
      Get the ConditionalNG of this item.
      Specified by:
      getConditionalNG in interface Base
      Returns:
      the ConditionalNG that owns this item
    • getLogixNG

      public final LogixNG getLogixNG()
      Description copied from interface: Base
      Get the LogixNG of this item.
      Specified by:
      getLogixNG in interface Base
      Returns:
      the LogixNG that owns this item
    • setParentForAllChildren

      public final boolean setParentForAllChildren(List<String> errors)
      Set the parent for all the children.
      Specified by:
      setParentForAllChildren in interface Base
      Parameters:
      errors - a list of potential errors
      Returns:
      true if success, false otherwise
    • registerListenersForThisClass

      protected abstract void registerListenersForThisClass()
      Register listeners if this object needs that.

      Important: This method may be called more than once. Methods overriding this method must ensure that listeners are not registered more than once.

    • unregisterListenersForThisClass

      protected abstract void unregisterListenersForThisClass()
      Unregister listeners if this object needs that.

      Important: This method may be called more than once. Methods overriding this method must ensure that listeners are not unregistered more than once.

    • registerListeners

      public final void registerListeners()
      Register listeners if this object needs that.

      Important: This method may be called more than once. Methods overriding this method must ensure that listeners are not registered more than once.

      Specified by:
      registerListeners in interface Base
    • unregisterListeners

      public final void unregisterListeners()
      Unregister listeners if this object needs that.

      Important: This method may be called more than once. Methods overriding this method must ensure that listeners are not unregistered more than once.

      Specified by:
      unregisterListeners in interface Base
    • isActive

      public final boolean isActive()
      Is this item active? If this item is enabled and all the parents are enabled, this item is active.
      Specified by:
      isActive in interface Base
      Returns:
      true if active, false otherwise.
    • printTreeRow

      protected void printTreeRow(Base.PrintTreeSettings settings, Locale locale, PrintWriter writer, String currentIndent, MutableInt lineNumber)
      Print this row. If getObject() doesn't return an AbstractMaleSocket, print this row.

      If a male socket that extends AbstractMaleSocket wants to print something here, it needs to override this method.

      The reason this method doesn't print if getObject() returns an AbstractMaleSocket is to protect so it doesn't print itself twice if it's embedding an other AbstractMaleSocket. An example of this is the AbstractDebuggerMaleSocket which embeds other male sockets.

      Parameters:
      settings - settings for what to print
      locale - The locale to be used
      writer - the stream to print the tree to
      currentIndent - the current indentation
      lineNumber - the line number
    • printLocalVariable

      protected void printLocalVariable(Base.PrintTreeSettings settings, Locale locale, PrintWriter writer, String currentIndent, MutableInt lineNumber, SymbolTable.VariableData localVariable)
    • printTree

      public void printTree(Base.PrintTreeSettings settings, PrintWriter writer, String indent, MutableInt lineNumber)
      Print the tree to a stream.
      Specified by:
      printTree in interface Base
      Parameters:
      settings - settings for what to print
      writer - the stream to print the tree to
      indent - the indentation of each level
      lineNumber - the line number
    • printTree

      public void printTree(Base.PrintTreeSettings settings, Locale locale, PrintWriter writer, String indent, MutableInt lineNumber)
      Print the tree to a stream.
      Specified by:
      printTree in interface Base
      Parameters:
      settings - settings for what to print
      locale - The locale to be used
      writer - the stream to print the tree to
      indent - the indentation of each level
      lineNumber - the line number
    • printTree

      public void printTree(Base.PrintTreeSettings settings, Locale locale, PrintWriter writer, String indent, String currentIndent, MutableInt lineNumber)
      Print the tree to a stream.
      Specified by:
      printTree in interface Base
      Parameters:
      settings - settings for what to print
      locale - The locale to be used
      writer - the stream to print the tree to
      indent - the indentation of each level
      currentIndent - the current indentation
      lineNumber - the line number
    • getUsageTree

      public void getUsageTree(int level, NamedBean bean, List<NamedBeanUsageReport> report, NamedBean cdl)
      Navigate the LogixNG tree.
      Specified by:
      getUsageTree in interface Base
      Parameters:
      level - The current recursion level for debugging.
      bean - The named bean that is the object of the search.
      report - A list of NamedBeanUsageReport usage reports.
      cdl - The current ConditionalNG bean. Null for Module searches since there is no conditional
    • getUsageDetail

      public void getUsageDetail(int level, NamedBean bean, List<NamedBeanUsageReport> report, NamedBean cdl)
      Add a new NamedBeanUsageReport to the report list if there are any matches in this action or expresssion.

      NamedBeanUsageReport Usage keys:

      • LogixNGAction
      • LogixNGExpression
      Specified by:
      getUsageDetail in interface Base
      Parameters:
      level - The current recursion level for debugging.
      bean - The named bean that is the object of the search.
      report - A list of NamedBeanUsageReport usage reports.
      cdl - The current ConditionalNG bean. Null for Module searches since there is no conditional
    • getManager

      public BaseManager<? extends NamedBean> getManager()
      Description copied from interface: MaleSocket
      Get the manager that stores this socket. This method is used when the object is going to be configured.
      Specified by:
      getManager in interface MaleSocket
      Returns:
      the manager
    • getDeepCopy

      public final Base getDeepCopy(Map<String,String> systemNames, Map<String,String> userNames) throws JmriException
      Description copied from interface: Base
      Create a deep copy of myself and my children The item needs to try to lookup itself in both systemNames and userNames to see if the user has given a new system name and/or a new user name.If no new system name is given, an auto system name is used. If no user name is given, a null user name is used.
      Specified by:
      getDeepCopy in interface Base
      Parameters:
      systemNames - a map of old and new system name
      userNames - a map of old system name and new user name
      Returns:
      a deep copy
      Throws:
      JmriException - in case of an error
    • deepCopyChildren

      public final Base deepCopyChildren(Base original, Map<String,String> systemNames, Map<String,String> userNames) throws JmriException
      Description copied from interface: Base
      Do a deep copy of children from the original to me.
      Specified by:
      deepCopyChildren in interface Base
      Parameters:
      original - the item to copy from
      systemNames - a map of old and new system name
      userNames - a map of old system name and new user name
      Returns:
      myself
      Throws:
      JmriException - in case of an error
    • disposeMe

      protected abstract void disposeMe()
      Disposes this object. This must remove _all_ connections!
    • dispose

      public final void dispose()
      Deactivate this object, so that it releases as many resources as possible and no longer effects others.

      For example, if this object has listeners, after a call to this method it should no longer notify those listeners. Any native or system-wide resources it maintains should be released, including threads, files, etc.

      It is an error to invoke any other methods on this object once dispose() has been called. Note, however, that there is no guarantee about behavior in that case.

      Afterwards, references to this object may still exist elsewhere, preventing its garbage collection. But it's formally dead, and shouldn't be keeping any other objects alive. Therefore, this method should null out any references to other objects that this object contained.

      Specified by:
      dispose in interface Base
    • getErrorHandlingType

      Description copied from interface: MaleSocket
      Get the error handling type for this socket.
      Specified by:
      getErrorHandlingType in interface MaleSocket
      Returns:
      the error handling type
    • setErrorHandlingType

      public void setErrorHandlingType(MaleSocket.ErrorHandlingType errorHandlingType)
      Description copied from interface: MaleSocket
      Set the error handling type for this socket.
      Specified by:
      setErrorHandlingType in interface MaleSocket
      Parameters:
      errorHandlingType - the error handling type
    • executeErrorHandlingModule

      public void executeErrorHandlingModule(Base item, String message, List<String> messageList, Exception e)
      Executes the error handling module.
      Parameters:
      item - the item that had the error
      message - the error message
      messageList - a list of error messages
      e - the exception that has happened
    • handleError

      public void handleError(Base item, String message, JmriException e, org.slf4j.Logger log) throws JmriException
      Description copied from interface: MaleSocket
      Handle an error that has happened during execution or evaluation of this item.
      Specified by:
      handleError in interface MaleSocket
      Parameters:
      item - the item that had the error
      message - the error message
      e - the exception that has happened
      log - the logger
      Throws:
      JmriException - if the male socket is configured to throw an exception
    • handleError

      public void handleError(Base item, String message, List<String> messageList, JmriException e, org.slf4j.Logger log) throws JmriException
      Description copied from interface: MaleSocket
      Handle an error that has happened during execution or evaluation of this item.
      Specified by:
      handleError in interface MaleSocket
      Parameters:
      item - the item that had the error
      message - the error message
      messageList - a list of error messages
      e - the exception that has happened
      log - the logger
      Throws:
      JmriException - if the male socket is configured to throw an exception
    • handleError

      public void handleError(Base item, String message, RuntimeException e, org.slf4j.Logger log) throws JmriException
      Description copied from interface: MaleSocket
      Handle an error that has happened during execution or evaluation of this item.
      Specified by:
      handleError in interface MaleSocket
      Parameters:
      item - the item that had the error
      message - the error message
      e - the exception that has happened
      log - the logger
      Throws:
      JmriException - if the male socket is configured to throw an exception
    • getListenerRefsIncludingChildren

      Returns a list of all the listeners references for this object and all its children.
      Specified by:
      getListenerRefsIncludingChildren in interface Base
      Parameters:
      list - a list of textual references
    • hasChild

      public boolean hasChild(@Nonnull Base b)
      Description copied from interface: Base
      Does this item has the child b?
      Specified by:
      hasChild in interface Base
      Parameters:
      b - the child
      Returns:
      true if this item has the child b, false otherwise
    • toString

      public String toString()
      Overrides:
      toString in class Object