Class Engine


  • public class Engine
    extends Object
    State-less wrapper for a UPPAAL server connection.

    If you want to communicate with the UPPAAL verification engine, this is the class to use. It is a thin wrapper around the EngineStub class and provides a state-less interface to the verification engine. In contrast to the EngineStub class, it can work with several model instances at the same time (although with reduced speed) and transparently connect and reconnect to the engine.

    The various connection modes are documented in the EngineStub class.

    Before connecting to the engine, a document should be created, please see Document for sample code.

    The following code demonstrates how to connect to a local UPPAAL engine via standard input/output streams using server protocol:

     Engine engine = new Engine();
     engine.setServerPath(enginePath);
     engine.connect();
     
    where enginePath is a path to server executable. On Windows the enginePath is "uppaal-version\\bin-Windows\\verifyta.exe" and on Linux it is "uppaal-version/bin-Linux/verifyta".

    Alternatively one can use a Linux server by starting socketserver utility on a remote computer. The socketserver uses default port 2350 and can be reached as follows:

     Engine engine = new Engine(EngineStub.BOTH, 2350, "hostname", enginePath);
     engine.connect();
     
    If the remote connection fails, then the local engine execution will be used instead.

    Then the model document can be uploaded, syntax-checked and compiled as follows:

     ArrayList<Problem> problems = new ArrayList<Problem>();
     UppaalSystem system = engine.getSystem(doc, problems);
     
    The array problems contains errors and warnings if any. If the compilation was successful the system object contains a reference to a compiled system model.

    The following code can be used to execute and print random transitions:

     SymbolicState state = engine.getInitialState(system);
     while (state != null) {
          ArrayList<SymbolicTransition> trans = engine.getTransitions(system, state);
          Transition tr = trans.get((int)Math.floor(Math.random()*trans.size()));
          if (tr.getSize()==0) { // transition without edges, something special:
              System.out.println(tr.getEdgeDescription());
          } else { // one or more edges involved:
              System.out.print("(");
              for (SystemEdge e: tr.getEdges()) {
                  System.out.print(e.getProcessName()+": "
                      + e.getEdge().getName()+", ");
              }
              System.out.println(")");
          }
          state = tr.getTarget(); // deadlock "transitions" will give null
     }
     
    The verifier functionality can be accessed by calling the query(UppaalSystem, String, Query, QueryFeedback) method.

    The options string in the query method is a concatenation of one option per line: an option name and a choice name (or one or more values) separated by space.

    For example, one can set the search order and diagnostic trace with the following options:

     --search-order 0
     --diagnostic 0
     
    The options may vary from version to version and depends on the actual verifyta binary used. One can inspect the list of available options by requesting getOptionsInfo() which will bring an XML description of all available options.
    See Also:
    Document, EngineStub
    • Field Detail

      • stub

        protected EngineStub stub
        The stub for the server connection.
    • Constructor Detail

      • Engine

        public Engine()
        Constructs an Engine object for local connections. Make sure the engine path is set before connecting.
      • Engine

        public Engine​(int mode,
                      int port,
                      String host,
                      String path)
        Constructs an Engine object for the given connection settings.
        Parameters:
        mode - specifies mode: EngineStub.LOCAL (executed locally), EngineStub.SERVER (connected to remote socket) or EngineStub.BOTH (try remote and fallback to local when socket connection fails).
        port - the socket port number (default 2350)
        host - the hostname of the remote computer where the socketserver is started
        path - a path to server binary for local execution.
    • Method Detail

      • setServerPath

        public void setServerPath​(String path)
        Sets the server path. The server path should include the path to, filename of and options for the server binary.
        Parameters:
        path - - The new path
      • setServerPort

        public void setServerPort​(int port)
        Sets the server port. The server port is used in REMOTE mode to determine which port on the server to connect to.
        Parameters:
        port - - The new port
      • setServerHost

        public void setServerHost​(String host)
        Sets the server host. In SERVER mode the engine will try to connect to this host.
        Parameters:
        host - - The host
      • setConnectionMode

        public void setConnectionMode​(int mode)
        Sets the connection mode. Mode is either LOCAL, SERVER or BOTH. In BOTH the stub will first try to build a remote connection and if that fails attempt to create a local connection.
        Parameters:
        mode - - The mode (local, server or both)
      • disconnect

        public void disconnect()
        Disconnect from the server.
      • cancel

        public void cancel()
        Forced disconnection from the server.
      • getLicensee

        public String getLicensee()
      • getOptionsInfo

        public String getOptionsInfo()
                              throws EngineException,
                                     IOException
        Returns information about available options. The information is returned as an XML document.
        Returns:
        The option information
        Throws:
        IOException - I/O communication error.
        EngineException - error in the server protocol.
      • getGanttChart

        public GanttChart getGanttChart​(UppaalSystem system,
                                        BigDecimal globalTime)
                                 throws EngineException
        Creates a Gantt chart for the compiled system.
        Parameters:
        system - - The uppaal system
        globalTime - - The global time
        Returns:
        the Gantt chart
        Throws:
        EngineException - error in the server protocol.
      • getSystem

        public UppaalSystem getSystem​(Document document,
                                      ArrayList<Problem> problems)
                               throws EngineException
        Compiles the document and builds a system instance. Problems (warnings and errors) are stored in the problems vector.
        Parameters:
        document - the (AST of) Uppaal document .
        problems - list for storing problems (warnings and errors).
        Returns:
        the system if success, null otherwise.
        Throws:
        EngineException - error in the server protocol.
      • getSystem

        public UppaalSystem getSystem()
        Addition for concrete simulation: Get the uppaal system
        Returns:
        system - The uppaal system
      • getLscProcess

        public LscProcess getLscProcess​(Document document,
                                        ArrayList<Problem> problems)
                                 throws EngineException
        Compiles an LSC process from Uppaal document and stores any warnings and errors in the problems list.
        Parameters:
        document - the (AST of) Uppaal document.
        problems - - the list for storing problems (warnings and errors).
        Returns:
        The LSC process representation
        Throws:
        EngineException - error in the server protocol.
      • query

        public QueryResult query​(UppaalSystem system,
                                 String options,
                                 Query query,
                                 QueryFeedback f)
                          throws EngineException
        Verify a query on an instantiated UPPAAL model.

        The given options are applied to the verification.

        Parameters:
        system - a reference to compiled system.
        options - verification options.
        query - a query to be checked.
        f - a callback for progress feedback, status and traces.
        Returns:
        'T' if property is satisfied, 'F' if it is not satisfied, 'M' if it is maybe satisfied, and 'E' if an error occurred.
        Throws:
        EngineException - error in the server protocol.
      • query

        public QueryResult query​(UppaalSystem system,
                                 SymbolicState state,
                                 String options,
                                 Query query,
                                 QueryFeedback f)
                          throws EngineException,
                                 IOException
        Verify a guery on an instantiated UPPAAL model.

        The given options are applied to the verification.

        Parameters:
        system - a reference to compiled system.
        state - a custom initial state
        options - verification options.
        query - a query to be checked.
        f - a callback for progress feedback, status and traces.
        Returns:
        'T' if property is satisfied, 'F' if it is not satisfied, 'M' if it is maybe satisfied, and 'E' if an error occurred.
        Throws:
        EngineException
        IOException
      • disconnected

        protected void disconnected()
        Called when disconnecting from the server.
      • submit

        public void submit​(Job job)
        Submit the job to the verification engine.
        Parameters:
        job - - The job