Substance version 3.0 migration guide

# Migration guide for version 3.0 (Grenada)

The version 3.0 (code-named Grenada) introduces binary incompatibilities with the previous versions. This document describes these incompatibilities and outlines the migration process for the client applications.

## Background

During the first phase of version 3.0, the codebase of Substance has been refactored and split to two different projects. The "look" part of Substance remains under the same project, while most of the "feel" part (behavioural traits or widgets) has been moved under the laf-widget project. The main goals were:

- To allow other third-party look-and-feels to reuse existing code from Substance (such as combobox auto-completion, tabbed pane overview and many more).
- To allow third parties to develop additional widgets for all supporting look-and-feels without dependencies on core LAF modules.
- To make the code more modular.
- To make the lite version lighter (leaving only the "look" part in it).

During this process, some of the internal implementation classes of Substance have been moved to the new project. In addition, some parts of the client-facing API have been moved as well. In the following sections we provide the complete migration guide for applications that use these moved APIs.

## Classes that were moved

The following classes were moved:

Class | From package | To package
TabPreviewPainter | org.jvnet.substance.tabbed | org.jvnet.lafwidget.tabbed
DefaultTabPreviewPainter | org.jvnet.substance.tabbed | org.jvnet.lafwidget.tabbed
PasswordStrengthChecker | org.jvnet.substance.utils | org.jvnet.lafwidget.text

The API of these classes has not been changed. In order to migrate application using these classes you will need to reorganize the import sections of the relevant application classes and recompile your application.

## Enums replaced by class instances

The following enums were replaced by class instances:

Enum | From class | To class
AnimationKind | org.jvnet.substance.utils.SubstanceConstants | org.jvnet.lafwidget.utils.LafConstants
PasswordStrength | org.jvnet.substance.utils.PasswordStrengthChecker | org.jvnet.lafwidget.utils.LafConstants

In order to migrate application using these enums you will need to reorganize the import sections of the relevant application classes and recompile your application.

## Client property keys that were moved and changed

The following client property keys were moved (and value changed):

Client property | From class | To class
ANIMATION_KIND | org.jvnet.substance.SubstanceLookAndFeel | org.jvnet.lafwidget.LafWidget
COMBO_BOX_USE_MODEL_ONLY | org.jvnet.substance.SubstanceLookAndFeel | org.jvnet.lafwidget.LafWidget
PASSWORD_STRENGTH_CHECKER | org.jvnet.substance.SubstanceLookAndFeel | org.jvnet.lafwidget.LafWidget
TABBED_PANE_PREVIEW_PAINTER | org.jvnet.substance.SubstanceLookAndFeel | org.jvnet.lafwidget.LafWidget

In order to migrate application using these client properties you will need to reorganize the import sections of the relevant application classes and recompile your application.

## Client property keys that were renamed

The following client property keys were renamed (and value changed):

In class | Old name | New name
org.jvnet.substance.SubstanceLookAndFeel | BUTTON_PAINT_ACTIVE_PROPERTY | PAINT_ACTIVE_PROPERTY

In order to migrate application using these client properties you will need to change the usage of old properties to new properties and recompile your application.