# openTCS: Change Log

The openTCS developers
version 5.5.0

This change log lists the most relevant changes for past releases in reverse chronological order.

## Version 5.5 (2022-04-26)

- New features:

  - Inform `EdgeEvaluator` implementations about beginning and end of routing graph creation to allow them to optimize computations, e.g. by caching data that does not change while building the graph.

- Other changes:

  - Add documentation for peripheral devices and peripheral operations. Also enable the respective GUI components by default now that there is documentation.

  - In the Operations Desk application’s dialog for creating peripheral jobs, offer locations attached to a peripheral driver only.

  - Replace old references to the Plant Overview application in the developer’s and user’s guides with references to the Model Editor and/or Operations Desk applications.

  - Remove the statistics kernel extension and plugin panel. They have been moved to the example integration project.

  - Update SLF4J to 1.7.36.

  - Update Guice to 5.1.0.

  - Update Jakarta XML Bind API to 2.3.3.

  - Update JAXB Runtime to 2.3.6.

  - Update Jackson to 2.13.2 (and its data-binding package to 2.13.2.2).

  - Update Sulky ULID to 8.3.0.

  - Update JGraphT to 1.5.1.

  - Update cfg4j to 4.4.1.

  - Update JSR305 to 3.0.2.

  - Update JUnit to 5.8.2.

  - Update AssertJ to 3.22.0.

  - Update Swagger UI to 3.52.5.

  - Update the Gradle wrapper to 6.9.2.

  - Update Stats Gradle Plugin to 0.2.2.

  - Update License Gradle Plugin to 0.14.0.

## Version 5.4 (2022-02-25)

- New features:

  - Enable vehicle drivers to inspect the whole transport order before accepting it, not just the respective sequence of destination operations.

  - Reflect the currently claimed and allocated resources in a vehicle’s state.

  - Show the currently claimed and allocated resources for a selected vehicle in the properties panel in the Operations Desk application.

  - Show all properties of a path’s peripheral operations in a table instead of listing only the location and operation names.

  - Update web API specification and implementation to version 1.1.0:

    - Add claimed and allocated resources to the vehicle state and vehicle status message specification.

    - Add the precise position to the vehicle state message specification.

    - When creating transport orders, allow clients to provide incomplete transport order names, i.e. have the kernel complete/generate the names.

    - Add an endpoint for explicitly triggering dispatcher runs.

- Other changes:

  - Skip the user confirmation for exiting the Kernel Control Center application.

  - In the File menu, improve the names of the entries for uploading a model to the kernel and downloading it from the kernel.

  - Update Jackson to 2.13.0.

  - Update Spark to 2.9.3.

## Version 5.3 (2021-09-28)

- New features:

  - Properly specify and implement claim semantics in the `Scheduler` interface, allowing custom scheduling strategies to take vehicles' planned future resource allocations into account.

  - Introduce `VehicleCommAdapter.canAcceptNextCommand()`, which can be used to (statically or dynamically) influence the amount of movement commands a comm adapter receives from its `VehicleController`.

- Bugs fixed:

  - Execute virtual vehicle simulation using the kernel executor to avoid potential deadlocks.

  - Restore single-step mode for virtual vehicles.

  - Fix immediate withdrawal of transport orders.

  - When the Kernel application is started, initialize its components (e.g. dispatcher, router, scheduler) using the kernel executor, especially to avoid scheduling issues with plant models that are loaded with application start up.

  - Fix the order sequence details panel which would not load due to some wrong paths to a resource bundle.

  - Fix an issue where the Operations Desk was not in sync with the Kernel when using very large models.

  - Fix an issue where cutting and pasting elements in the Model Editor would create multiple elements with the same name.

- Other changes:

  - Switch to publishing artifacts via the Maven Central artifact repository. (Previously, artifacts used to be published to JCenter, an artifact repository that has been discontinued.)

  - Update the license information: All components, including the Model Editor and Operations Desk applications, are now licensed under the terms of the MIT license.

  - When a vehicle is waiting for resources to be allocated (e.g. because resources are occupied/blocked by another vehicle), allow it to be rerouted from its current position. (Previously, rerouting was done from the point for which the vehicle was waiting, which could lead to unnecessary waiting times.)

  - When a vehicle is rerouted while it is waiting for peripheral interactions to be finished, properly reroute the vehicle from the peripheral’s position.

  - When loading plant models with the Model Editor and Operations Desk applications, show more fine-grained steps in the corresponding progress bars.

  - In the Operations Desk, sort transport orders and peripheral jobs in the respective tables in descending order according to their creation time.

  - Reduce the time it takes the Operations Desk to process vehicle updates.

  - Update Gradle wrapper to 6.8.3.

  - Update JUnit 4 to 4.13.2.

  - Update JUnit 5 to 5.7.2.

  - Update Hamcrest to 2.2.

## Version 5.2 (2021-03-29)

- New features:

  - For plant model elements' tooltip texts in the Operations Desk, sort properties lexicographically and colorize vehicles' states.

## Version 5.1 (2021-03-24)

- Bugs fixed:

  - Made names generated for transport orders to be (really) lexicographically sortable.

- New features:

  - Add a `QueryService` to the kernel that can be used to execute generic/custom queries via registered `QueryResponder` instances.

  - Add support for creating plant models with multiple layers.

  - Add experimental support for peripheral devices, with device interactions triggered by vehicles travelling along paths. (Note that this is not really documented, yet, and that experimental means that developers using any parts of it are on their own, for now.)

  - Add a new version of the XML Schema definition for the openTCS plant model.

  - Allow the scheduler to be triggered explicitly via `Scheduler.reschedule()`.

  - Show properties in model elements' tooltips.

- Other changes:

  - Split the Plant Overview application in two separate applications: The Model Editor provides model creation and manipulation functionality, while the Operations Desk is used for interacting with a plant while it is in operation.

  - Split the Operations Desk’s pause button into a pause and a resume button.

  - Remove support for groups. (Layers can now be used to group plant model components.)

  - Allow project-specific edge evaluators and routing group mappings to be used.

## Version 4.20 (2020-12-18)

- Fixes:

  - Default `Scheduler`: Properly handle requests for same-direction blocks for some edge cases.

  - Default `Scheduler`: Really free all resources when taking a vehicle out of the driving course.

- Other changes:

  - Plant Overview: Improve performance for vehicle state updates.

## Version 4.19 (2020-07-02)

- New features:

  - As with paths, locations can now be locked via the Plant Overview application to prevent them from being used by vehicles.

## Version 5.0 (2020-06-05)

- Remove deprecated code.

  - Remove the TCP host interface kernel extension.

  - Remove the kernel application’s GUI.

- `TCSObject` and its subclasses are now immutable and do no longer implement the `Cloneable` interface.

- Remove the JDOM dependency.

- In `BasicCommunicationAdapter`, use an injected `ExecutorService` (e.g. the kernel executor) instead of starting a separate thread for every vehicle driver instance.

- Add a new and cleaned up version of the XML Schema definition for the openTCS plant model and add new bindings.

- Update project to Java 13.

- Update Mockito to 2.28.2.

## Version 4.18 (2020-04-09)

- New features:

  - Provide the route to be travelled to vehicle drivers with every movement order, for cases in which vehicles require some information about it.

  - Allow supplementary configuration sources to be registered via service loader.

  - Allow a configuration reload interval to be set via a system property.

- Other changes:

  - Improve performance of loading a plant model file into the kernel.

  - Rename transport order category to transport order type.

  - Update Spark to 2.9.1.

## Version 4.17 (2019-12-10)

- Bugs fixed:

  - In the Plant Overview application’s "Continuous load" plugin panel, it is now possible to properly remove/delete entries in the drive order and property tables.

  - Changing the loopback driver’s state through its panel in the Kernel Control Center application now works in all cases.

- Other changes:

  - When using the Kernel’s RMI interface with SSL enabled, avoid side effects on other components using SSL.

## Version 4.16.1 (2019-10-30)

- Bugs fixed:

  - Fix creating links between points and locations in the Plant Overview application.

## Version 4.16 (2019-10-22)

- New features:

  - Optionally have names for transport orders and order sequences generated by the kernel. Use ULIDs for these generated names by default, to have lexicographically sortable names.

  - Add a `publishEvent()` method to the `KernelServicePortal` interface that RMI-Clients can use to publish events on the Kernel application’s event bus.

  - Enable the Kernel Control Center application to set positions for all simulating vehicle drivers, not only the loopback driver.

- Bugs fixed:

  - Paths that have the same start and end components are now displayed properly in the Plant Overview.

  - In the Plant Overview’s continuous load panel, transport order definitions can now be saved to and restored from XML files again. (Note that in the course of fixing this issue, the XML files' structure was improved. Since the feature had been broken for a while and is not part of a public API, backwards compatibility was not maintained for this. As a result, transport order definition files from old versions of openTCS cannot be restored.)

  - Make using the "try it out" buttons in the OpenAPI documentation possible by setting CORS headers in the web API’s responses.

## Version 4.15 (2019-05-02)

- New features:

  - Add history entries for transport orders being deferred or resumed as well as assigned to or reserved for vehicles in the dispatching process. This makes it easier to find out e.g. why a transport order wasn’t assigned to a vehicle, yet. It also implicitly deprecates transport orders' rejection entries, as history entries provide the same functionality, but for more use cases.

  - Expect applications' locales to be set via BCP 47 language tags, making the configuration more flexible and independent from the source code.

  - Extend the default router to be able to extract explicitly given routing costs from path properties, too.

- Bugs fixed:

  - In case no load or unload operation is defined for a virtual vehicle, use a default value to avoid exceptions.

  - Do not (wrongly) set a vehicle’s processing state to `IDLE` whenever its integration level is set to `TO_BE_UTILIZED`.

  - Avoid potential deadlocks related to using the Plant Overview’s resource allocation panel.

- Other changes:

  - Disable the Kernel application’s integrated control center GUI by default. It can still be re-enabled via the Kernel configuration, but it has been deprecated for several openTCS releases now and will be removed with the openTCS 5.

  - Move all language files for the applications' internationalization to a common hierarchy, remove unused/left-over entries and apply a proper naming pattern to the remaining ones to improve maintainability. (The language files for the Kernel application’s integrated control center GUI are excluded from this, as that GUI will be removed with openTCS 5.)

  - Remove support for the Plant Overview application’s old model file format (file name extension `.opentcs`). The old format has been deprecated since openTCS 4.8 in favour of a unified file format (file name extension `.xml`) shared by Kernel and Plant Overview. Users who still have model files in the old format may want to save them in the current format before updating.

  - Remove the menu item to trigger the kernel’s dispatching process from the Plant Overview’s main menu. The dispatcher is triggered automatically (and, for special cases in integration projects, periodically), so manual triggering does not need to be involved.

## Version 4.14 (2019-03-22)

- Bugs fixed:

  - With the `defaultdispatcher.reparkVehiclesToHigherPriorityPositions` configuration enabled: Prevent a vehicle from being re-parked to positions that have the same priority as the vehicle’s current parking position.

  - Fix a bug where charging vehicles don’t execute transport orders after they have reached the "sufficiently recharged" state.

- Other changes:

  - The Kernel application does no longer persist `Color` and `ViewBookmark` elements of the visual layout. (For some time now, these elements could no longer be created with the PlantOverview application and were ignored when a model was loaded, anyway.)

## Version 4.13.1 (2019-02-25)

- Bugs fixed:

  - Fix a bug with the loopback communication adapter that prevents resources from being properly released when the "loopback:initialPosition" property is set on vehicles.

## Version 4.13 (2019-02-18)

- New features:

  - Introduce an event history for transport orders that can be filled with arbitrary event data.

  - Introduce `"*"` as a wildcard in a vehicle’s processable categories to allow processing of transport orders in any category.

  - The Plant Overview’s vehicle panel now also shows the current destination of each vehicle.

- Bugs fixed:

  - With the `defaultdispatcher.rerouteTrigger` configuration entry set to `DRIVE_ORDER_FINISHED`, ensure that the rerouting is only applied to the vehicle that has actually finished a drive order.

  - For vehicles selected in the Plant Overview, re-allow changing their integration levels via the context menu to either "to be utilized" or "to be respected" if any of them is currently processing a transport order, too.

- Other changes:

  - Remove the included integration project generator and document usage of the example integration project, instead.

  - Update the web API specification to OpenAPI 3.

  - Update Gradle to 4.10.3.

  - Update Checkstyle to 8.16.

  - Update JUnit to 5.3.2.

  - Update Guice to 4.2.2.

## Version 4.12 (2018-12-20)

- New features:

  - Introduce optional priorities for parking positions. With these, vehicles are parked at the one with the highest priority. Optionally, vehicles already parking may be reparked to unoccupied positions with higher priorities.

  - Provide additional energy levels for vehicles to influence when recharging may be stopped.

  - Make the Plant Overview’s naming schemes for plant model elements configurable.

  - In the Plant Overview, allow multiple vehicles to be selected for changing the integration level or withdrawing transport orders.

- Bugs fixed:

  - Prevent a movement order from being sent to a vehicle a second time after the vehicle got rerouted while waiting for resource allocation.

## Version 4.11 (2018-12-04)

- New features:

  - Introduce a type property for blocks. A block’s type now determines the rules for entering it:

    - Single vehicle only: The resources aggregated in this block can only be used by a single vehicle at the same time.

    - Same direction only: The resources aggregated in this block can be used by multiple vehicles, but only if they enter the block in the same direction.

- Bugs fixed:

  - Properly set a point’s layout coordinates when it is placed exactly on an axis in the Plant Overview.

  - Properly select the correct/clicked-on tree entry in the Plant Overview’s blocks tree view when the same element is a member of more than one block.

  - Prevent the Kernel application from freezing when loading some larger plant models.

- Other changes:

  - Require the user to confirm immediate withdrawals of transport orders in the plant overview, as they have some implications that may lead to collisions or deadlocks in certain situations.

  - Improve input validation of unit-based properties for plant model elements.

  - Remove the Kernel Control Center’s function to reset the position of a vehicle. Users should now set the vehicle’s integration level to `TO_BE_IGNORED`, instead.

  - Allow the loopback driver to be disabled completely.

  - Minor improvements to the configuration interface API.

  - Mark all `AdapterCommand` implementations in the base API as deprecated. These commands' functionality is specific to the respective communication adapter and should be implemented and used there.

## Version 4.10 (2018-08-07)

- New features:

  - Introduce an explicit integration level property for vehicles that expresses to what degree a vehicle should be integrated into the system. (Setting the integration level to `TO_BE_UTILIZED` replaces the manual dispatching that was previously used to integrate a vehicle.)

  - Allow recomputing of a vehicle’s route after finishing a drive order or on topology changes.

  - Allow vehicle themes to define not only the graphics used, but also the content and style of vehicle labels in the Plant Overview.

  - Enable the web API to optionally use HTTPS.

  - Allow an optional set of properties for meta information to be stored in a model, and use it to store the model file’s last-modified time stamp in it.

- Bugs fixed:

  - Prevent moving of model elements in the Plant Overview when in mode OPERATING.

  - Prevent creation of groups in the Plant Overview when in mode OPERATING.

  - Properly handle renaming of paths and path names that do not follow the default naming pattern in the Plant Overview.

  - Multiple minor fixes for the integration project generator.

- Other changes:

  - When using the Plant Overview or Kernel Control Center with SSL-encrypted RMI, verification of the server certificate is now mandatory.

  - Adjust the default docking frames layout in the Plant Overview for mode OPERATING a bit to make better use of wide-screen displays.

  - Include web API documentation generated by Swagger in the distribution.

## Version 4.9.1 (2018-04-26)

- Bugs fixed:

  - Include the `buildSrc/` directory in the source distribution.

  - Properly display vehicle routes after adding driving course views in the Plant Overview.

  - Properly disconnect the plant overview from the kernel when switching to modelling mode.

## Version 4.9 (2018-04-16)

- Bugs fixed:

  - Fix jumping mouse cursor when dragging/moving model elements in the Plant Overview in some cases.

- New features:

  - Allow the kernel to work headless, i.e. without a GUI. Introduce a separate Kernel Control Center application that provides the same functionality and can be attached to the kernel as a client.

  - Provide a single-threaded executor for sequential processing of tasks in the kernel, which helps avoiding locking and visibility issues. Use this executor for most tasks, especially the ones manipulating kernel state, that were previously executed concurrently.

  - Introduce a web API (HTTP + JSON), intended to replace the proprietary TCP/IP host interface, which is now deprecated.

  - Introduce an API for pluggable model import and export implementations in the Plant Overview.

- Other changes:

  - Split the Kernel interface into aspect-specific service interfaces.

  - Provide a (more) simple event API, including an event bus implementation as a replacement for the previously used MBassador and event hub.

  - Overhaul the default dispatcher implementation to improve maintainability and extensibility.

  - Allow suggestions for property values in the Plant Overview to depend on the key.

  - Improve API and deprecate classes and methods in lots of places.

  - Improve default formatting of log output for better readability.

## Version 4.8.4 (2018-02-12)

- Bugs fixed:

  - Fix erroneous behaviour for renaming of points when points are block members in the plant model.

## Version 4.8.3 (2018-01-24)

- Bugs fixed:

  - Fix processing of XML messages received via the TCP-based host interface.

## Version 4.8.2 (2017-12-15)

- Bugs fixed:

  - Properly store links between locations and points in the unified XML file format when the link was drawn from the location instead of from the point.

## Version 4.8.1 (2017-12-05)

- Bugs fixed:

  - Ensure that marshalling and unmarshalling of XML data always uses UTF-8. This fixes problems with plant models containing special characters (like German umlauts) e.g. in element names.

## Version 4.8 (2017-11-28)

- Bugs fixed:

  - Properly copy model coordinates to layout coordinates in the plant overview without invalidating the model.

  - Adjust erroneous behaviour in the load generator plugin panel and properly update its GUI elements depending on its state.

- New features:

  - Add a category property to transport orders and order sequences and a set of processable categories to vehicles, allowing a finer-grained selection of processable orders.

  - Prepare proper encryption for RMI connections.

- Other changes:

  - Use the unified (i.e. the kernel’s) XML file format to load and save plant models in the plant overview by default. (The plant overview’s previous default file format is still supported for both loading and saving. Support for the old format will eventually be removed in a future version, though, so users are advised to switch to the new format.)

  - Remove some unmaintained features from the loopback adapter and its GUI.

## Version 4.7 (2017-10-11)

- Bugs fixed:

  - Ensure that scheduler modules are properly terminated.

- New features:

  - Allow the colors used for vehicles' routes be defined in the plant model.

  - Have the default dispatcher periodically check for idle vehicles that could be dispatched. This picks up vehicles that have not been in a dispatchable state when dispatching them was previously tried.

## Version 4.6 (2017-09-25)

- Bugs fixed:

  - Don’t mark a drive order as finished if the transport order it belongs to was withdrawn.

  - Properly update the vehicles' states in the kernel control center’s vehicle list.

  - When creating locations, properly attach links to the respective points, too.

  - When renaming a point in the plant overview, properly update blocks containing paths starting or ending at this point.

  - Avoid NPE when the transport order referenced in a `Vehicle` instance does not exist in the kernel any more.

- New features:

  - Allow the kernel’s RMI port to be set via configuration.

  - Allow preferred parking positions and recharge locations to be set as properties on `Vehicle` instances.

  - In XML status channel messages, add a reference to a vehicle’s transport order, and vice versa.

  - Allow the kernel’s order cleanup task to be adjusted via predicates that approve cleanup of transport orders and order sequences.

- Other changes:

  - Deprecate `VehicleCommAdapter.State`. It’s not really used anywhere, and the enum elements are fuzzy/incomplete, anyway.

## Version 4.5 (2017-08-10)

- Switched to a plain JGraphT-based implementation of Dijkstra’s algorithm for routing.

- Deprecated static routes. All routes are supposed to be computed by the router implementation. (Both the kernel and the plant overview will still be able to load models containing static routes. The button for creating new static routes in the plant overview has been removed, however.)

- Introduced caching for configuration entries read via binding interfaces.

- Prepared immutability for plant model and transport order objects within the kernel.

- Deprecated dummy references to objects as well as the superfluous ID attribute in `TCSObject`.

- Made JHotDraw and Docking Frames libraries available as Maven artifacts so they do not have to be kept in the sources distribution.

- Updated Mockito to 2.8.47.

## Version 4.4 (2017-07-17)

- Fixed a performance issue with building routing tables in the default router caused by excessive calling of methods on a configuration binding interface.

- Introduced a method to explicitly trigger routing topology updates via the `Kernel` interface instead of explicitly updating it whenever a path was locked/unlocked to avoid redundant computations.

- Improved behaviour with scaling the course model in the plant overview.

- Added a mechanism to provide project-specific suggestions for keys and values when editing object properties in the plant overview.

- Added GUI components to set vehicle properties from the loopback driver’s panel.

- Deprecated explicit event filters, which make the code more verbose without adding any value.

- Some small bugfixes and improvements.

## Version 4.3 (2017-06-30)

- Introduced configuration based on binding interfaces and cfg4j to provide implementations for these, and deprecated the previously used configuration classes. Implications and side effects:

  - Made documentation of configuration entries (for users) easy via annotations.

  - Switched configuration files from XML to properties.

  - Switched to read-only configuration.

- Improved maintainability and reusability of the default dispatcher implementation.

- Updated Gradle wrapper to 3.5.

- Many small bugfixes and improvements.

## Version 4.2 (2017-05-29)

- Simplify the kernel API by using transfer objects to create plant models and transport orders. Expect plant models to be transferred as a whole instead of updating existing model elements with multiple calls.

- Actually make use of modules in the default scheduler: A scheduler module can be used to influence the allocation process of resources to vehicles (e.g. to wait for infrastructure feedback before letting a vehicle pass a path).

- A location type’s (default) symbol can now be overwritten by a location to display an empty symbol.

- Fix a bug where a large plant model could be loaded multiple times when loaded from the kernel into the plant overview.

## Version 4.1 (2017-04-20)

- Added functionality for reading and writing the kernel’s plant model file format to the plant overview client.

- Added bezier paths with three control points to the plant overview client.

- Added a panel to observe resource allocations to the plant overview client.

- Added a dialog requiring user confirmation before changing the driver associated with a vehicle to prevent accidental changes.

- Improved performance for transferring model data from the plant overview client to the kernel.

- Improved selection of colors used for marking vehicles' routes in the plant overview client.

- Improved performance of routing table computation by computing only one table shared by all vehicles by default. (Computation of separate tables for vehicles is optionally possible.)

- Many small bugfixes and improvements to code and documentation.

## Version 4.0.1 (2017-02-25)

- Fix a potential deadlock in the default scheduler.

## Version 4.0 (2017-02-11)

- Split the base library into a base API, an injection API and a library with commonly used utility classes to reduce the load of transitive dependencies for API users.

- Heavily cleaned up the APIs, including some backwards-incompatible changes (mainly renaming and removing previously deprecated elements). Notable examples:

  - Moved vehicle communication adapter base classes to `org.opentcs.drivers.vehicle` and named them more appropriately.

  - Removed TCP/IP communication implementation from `org.opentcs.util.communication.tcp` and a few more utility classes. Maintaining these is out of the openTCS project’s scope.

- Greatly improved extension and customization capabilities for both the kernel and plant overview applications by applying dependency injection in more places.

  - Communication adapters may now participate with dependency injection.

  - Default kernel strategies may now easily be overridden.

- Simplified the default `Scheduler` implementation.

- Switched logging to SLF4J.

- Improved project documentation for both users and developers and migrated to Asciidoctor for easier maintenance.

- Updated Guice to 4.1.0.

- Updated Guava to 19.0.

- Updated JDOM to 2.0.6.

- Updated Gradle to 2.13.

- Many small bugfixes and improvements.

## Version 3.2 (2016-01-19)

- Switched to Gradle as the build management system for improved dependency management and release process. This introduces cleanly separate subprojects for base library, basic strategies library, kernel application, plant overview application and documentation. It also adds clean separation of application code and Guice configuration.

- Added an event bus-backed event hub implementation for the kernel to distribute events sent by e.g. communication adapters and make it possible to forward them to kernel clients. Also add method `publishEvent()` to `BasicCommunicationAdapter` to allow communication adapters to use it.

- Adjusted the dispatcher’s and kernel’s methods for withdrawing transport orders to explicitly state whether the order should be withdrawn regularly or aborted immediately, which makes them deterministic for the caller.

- Moved code for handling transport order states/activations from the kernel to the dispatcher implementation for better separation of concerns.

- Improved the use of dependency injection via Guice in the kernel to make the code more modular.

- Added annotation `@ScheduledApiChange` for marking scheduled incompatible API changes.

- Updated library Guava to 18.0.

- Many small fixes and improvements.

## Version 3.1.1 (2015-05-06)

- Fix a crash in the plant overview client that occured when the user tried to add a drive order to a transport order.

## Version 3.1 (2015-03-23)

- Fix the encoding of model files written by the plant overview client.

- Fix a problem with renaming points that resulted in broken model files.

- Fix a crash that happened when trying to open a context menu on a vehicle in modelling mode.

- Properly set the scale factor when loading a model from a file.

- Avoid a crash when trying to create a transport order with a model that does not contain any locations/transport order destinations.

- Fix direction indicators of paths not being displayed properly after loading a model from a file.

- Fix outdated documentation in a couple of places.

## Version 3.0 (2014-11-25)

- The plant overview client can now be used for offline modelling, i.e. without requiring a permanent connection to the kernel.

- To further reflect these changes, the plant overview client now maintains its operating mode independently from the kernel’s state. If the user sets the mode of the plant overview client to `OPERATING` while the kernel is in modelling mode, an empty model will be displayed and the actual model will be loaded as soon as the connected kernel switches back to operating mode. Furthermore, this allows to modify the driving course model in the plant overview client while the kernel remains in operating mode. See the manual for more information.

- The management of course model files was moved to the plant overview client. As of this version, the kernel stores only a single driving course model which can be persisted by selecting the corresponding menu item in the graphical user interface of the plant overview client. Changes made to the model in the plant overview client must be explicitly transferred to the kernel. To migrate all of your existing models to this new version, please refer to the manual.

- Changes made to the Kernel API:

  - Method `Set<String> getModelNames()` was changed to `String getModelName()`, as from now on there exists only one model at a time.

  - Method `loadModel(String modelName)` no longer requires/accepts a parameter.

  - Method `saveModel(String modelName, boolean overwrite)` no longer accepts the `boolean` parameter and overwrites the model automatically.

  - Method `removeModel(String rmName)` no longer requires/accepts a parameter.

  - Methods `createLayout(byte[] layoutData)` and `setLayoutData(TCSObjectReference<Layout> ref, byte[] newData)` have been removed along with class `Layout`.

- Updated library Google Guava to 17.0.

- Updated library JAXB to 2.2.7.

- Updated project to Java 8.

## Version 2.7.1 (2014-06-30)

- Fixed a potential crash with switching to plant operation mode when the model contained static routes.

## Version 2.7 (2014-06-25)

- Updated library Docking Frames to 1.1.2p11.

- Added library Google Guava 16.0.1 for better code readability via small utility methods.

- Added position coordinates to locations.

- Added synchronization of model and layout coordinates for points and locations.

- Fixed reconstruction of routing tables when locking/unlocking paths in plant operation mode.

- Reimplemented the former Dijkstra-based routing table construction, now providing one based on breadth-first search and an alternative based on depth-first search, and use pluggable routing cost functions.

- Implemented a proper life cycle for plant overview plugin panels.

- Modified model management to not allow model names to differ in the case of their spelling only to prevent inconsistencies on Windows systems.

- Replaced the reference on a Location in a MovementCommand with the Location itself to provide more information to the vehicle driver.

- Made more wide-spread use of dependency injection via Guice and refactored, cleaned up and simplified source code in many places, primarily in the plant overview client.

- Many small bugfixes and improvements.

## Version 2.6.1 (2014-03-14)

- Properly color the route for vehicles that have just been created and not loaded from an existing plant model.

- Fix loading plant models created by older versions of openTCS that contained certain path liner types.

- Properly set point types as read from the plant model in the plant overview client.

- Do not provide a clickable graphical figure in the plant overview client for vehicles that should actually be invisible.

## Version 2.6 (2014-02-28)

- Updated library Docking Frames to 1.1.2p10e.

- Updated library JDOM to 2.0.5.

- Updated library JFreeChart to 1.0.17, including an update of JCommon to 1.0.21.

- Updated library JUnit to 4.11, including the addition of Hamcrest 1.3.

- Updated DocBook style sheets to 1.78.1.

- Added library Google Guice 3.0 for dependency injection and thus better modularity.

- Added library Mockito 1.9.5 to simplify and improve the included unit tests.

- Downgraded the Saxon XSL processor to version 6.5.5, as more recent versions seem to have deficiencies with DocBook to FO transformations.

- Merged the experimental generic client application into the plant overview client, which can now be extended with plugin-like panels providing custom functionality.

- Added plugin panels for load generation and statistics reports into the plant overview client.

- Improved the undo/redo functionality of the plant overview client in modelling mode.

- Temporarily disabled the copy-and-paste functionality of the plant overview client in modelling mode until some major usability issues have been sorted out.

- Improved editing of multiple driving course elements at the same time.

- Temporarily disabled the possibility to add background graphics until this works more reliably.

- Unified look-and-feel and fonts in the kernel control center and the plant overview client and removed the selection menu for different Swing look-and-feels from the kernel control center.

- Improved localization of the plant overview client.

- Removed the kernel’s explicit "simulation" mode, which was never fully implemented or used and provided practically no advantages over the normal mode of operation, in which vehicles can be simulated using the loopback driver.

- Fixed/improved GUI layout in multiple places of the kernel control center.

- Many bugfixes and improvements to code and documentation.

## Version 2.5 (2013-12-18)

- Added library Docking Frames 1.1.2-P8c.

- Made some panels in the plant overview client (un)dockable.

- Added a panel with an overview of all vehicles and their respective states to the plant overview client.

- Added a pause button to the plant overview client to pause/stop all active vehicles at once.

- Introduced pluggable themes to customize the appearance of locations and vehicles in the plant overview.

- Added generic grouping of driving course elements, primarily to support visualization in the plant overview.

- Translated the user manual to English.

- Many small bugfixes and improvements to both the code and the documentation.

## Version 2.4.2 (2013-07-29)

- Updated the XML Schema definitions for the host interface.

## Version 2.4.1 (2013-05-30)

- Updated the visualization client, including many bug fixes, usability improvements and internationalization (English and German language).

- Properly included a vehicle’s length when persisting/materializing a course model.

- Removed an erroneous JAXB annotation that led to an exception when trying to persist load generator input data in the generic client.

- Changed the startup scripts/batch files to look for extension JARs in `lib/openTCS-extensions/` instead of `lib/`.

## Version 2.4 (2013-02-07)

- Updated JDOM to 2.0.4.

- Updated JHotDraw to 7.6.

- Updated Checkstyle to 5.6.

- Integrated Saxon 9.4 and Apache FOP 1.1 into the build for processing the DocBook manual.

- Major overhaul of the visualization client, including: Integration of both modes (modelling and visualization) into a single application, preparation for proper localization and integration of the course layout information into model data structures, making it easier to create complete models including course layout via the kernel API. (This basically allows to implement other clients that can create new models or import/convert existing models from other applications.) Using models containing "old" layout data is still supported but deprecated.

- Changed license of the visualization client to LGPL.

- Improved support for vehicle energy management: For each vehicle, a specific charging operation may be specified (default: “CHARGE”), which will be used by the dispatcher to automatically create orders to recharge the vehicle’s energy source.

- Improved strategies for selecting parking positions and charging locations.

- Changed initial processing state of a vehicle to `UNAVAILABLE`, preventing immediate dispatching of vehicles on startup.

- Improved kernel methods for withdrawing orders from vehicles and allow setting a vehicle’s processing state to `UNAVAILABLE` to prevent it being dispatched again immediately.

- Added kernel method dispatchVehicle() to allow vehicles in state `UNAVAILABLE` to be dispatched again.

- (Re-)Added 'dispensable' flag to class TransportOrder to indicate that an order may be withdrawn automatically by the dispatcher. (Primarily used to make parking orders abortable.)

- Improved handling of order sequences.

- Added a simple, preliminary implementation of data collection for statistics based on event data in `org.opentcs.util.statistics`.

- Removed class `VehicleType` and all references to it completely. All information about the vehicles themselves is stored in Vehicle, now, simplifying the code in which `VehicleType` was used.

- Added `Vehicle.State.UNAVAILABLE` for vehicles that are not in an ERROR state but currently remotely usable, either. (Examples: manual or semi-automatic modes)

- Added methods `Kernel.sendCommAdapterMessage()` and `CommunicationAdapter.processMessage()` to allow clients to send generic messages to communication adapters associated with vehicles.

- Removed methods `stop()`, `pause()` and `resume()` from communication adapter interface as they had not served any purpose for long time.

- Removed kernel method `getInfoText()`, for which the `query()` method has served as a replacement for a while, now.

- Properly propagate exceptions to clients connected via the RMI proxy.

- Small bug fixes and improvements to code and documentation.

## Version 2.3 (2012-09-17)

- Moved sources of the generic client into the main project’s source tree.

- Updated JFreeChart to 1.0.14.

- Use JFreeChart for drawing the velocity graph of a communication adapter.

- Instead of emitting an event only after the kernel’s state changed, emit an additional one before the state transition.

- Implemented org.opentcs.data.order.OrderSequence for processes spanning more than one transport order that should be processed by a single vehicle.

- Added a set of properties to DriveOrder.Destination and MovementCommand, allowing an order/command to carry additional information for a communication adapter or vehicle, if necessary.

- (Re-)Added `State.CHARGING` and merged `State.DRIVING` and `State.OPERATING` into `State.EXECUTING` in `org.opentcs.data.model.Vehicle`.

- Added a settable threshold for critical and good energy levels of a vehicle.

- Added a vehicle specific charging operation to Vehicle, settable by the communication adapter.

- Recompute routing tables when (un)locking a path.

- Remove `org.opentcs.data.model.Path.Action`, which wasn’t really used anywhere and doesn’t provide any benefit over a Path’s properties.

- Remove a lot of deprecated methods in the kernel interface.

- Replace the existing dispatcher with one that is aware of order sequences and vehicles' energy levels and automatically creates orders to recharge vehicles.

- Deprecated and largely removed references to `org.opentcs.data.model.VehicleType`, simplifying some code.

- Bug fix in `KernelStateOperating.activateTransportOrder()`: Use our own references to the transport order, not the one we received as a parameter, as that causes problems if the order has been renamed but a reference with the old name is being used by the calling client.

- Moved classes to packages properly separated by functionality, and removed a few utility classes that were not used and didn’t provide much. (This effectively means the API provided by the base JAR changed. Fixing any resulting broken imports should be the only thing required to use the new version.)

## Version 2.2 (2012-07-10)

- Published as free open source software (license: the MIT license, see `LICENSE.txt`) - Requires Java 1.7

- Update JDOM to 2.0.2.

- Integrated kernel and driver GUI into a single application.

- Basic support for energy management

- Support for dynamic load handling devices reported by vehicles/vehicle drivers to the kernel

- Simplified integration of vehicle drivers: Vehicle drivers in the class path are found automatically using `java.util.ServiceLoader`.

- Automatic backup copies (in `$KERNEL/data/backups/`) when saving models

- Switched from properties to XML for configuration files

- Simplified and more consistent kernel API

- Many small bug fixes and adjustments of the included strategies