Here are steps to migrate a Vaadin Component integrated into Generic UI from platform 6.10 to 7.0.
First of all, update the add-on version in build.gradle
so that it’s compatible with Vaadin 8.
Go to Stepper - Vaadin Add-on Directory and find the suitable version by checking framework support.
In our case, it’s 2.4.0
:
compile('org.vaadin.addons:stepper:2.4.0')
The new version of the add-on has a different widgetset name, so replace it in the AppWidgetSet.gwt.xml
file of the web-toolkit module with the following:
<inherits name="org.vaadin.risto.stepper.StepperWidgetset"/>
Starting from platform 7.0, the com.haulmont.cuba.gui.components.Field
interface has a type, therefore the Stepper
interface has to extend Field<Integer>
instead of Field
, because we integrate IntStepper
component.
public interface Stepper extends Field<Integer> {
...
}
The Web implementation of the component also has to be changed. Since we use Vaadin 8 compatible component, alter WebStepper
so that it extends WebV8AbstractField
and adds a value change listener to the Vaadin component.
public class WebStepper extends WebV8AbstractField<IntStepper, Integer, Integer> implements Stepper {
public WebStepper() {
this.component = new org.vaadin.risto.stepper.IntStepper();
attachValueChangeListener(component);
}
...
}
WebV8AbstractField
has three types:
- Type of underlying Vaadin component. In our case
IntStepper
. - Type of presentation value, i.e. Vaadin component value type, In our case
Integer
. - Type of model value, i.e. CUBA component value type. In our case
Integer
.
Hint: In case a Vaadin component extends com.vaadin.v7.ui.AbstractField
(deprecated Vaadin 7 API), WebAbstractField
must be used intead of WebV8AbstractField
.
The last one change is required for StepperLoader
. The factory
variable now has a type of UiComponents
instead of ComponentsFactory
(which is deprecated), for that reason, the createComponent
method must be changed as follows:
@Override
public void createComponent() {
resultComponent = factory.create(Stepper.class);
loadId(resultComponent, element);
}
If everything is done correctly, you’ll to see the following in the Customer Edit screen:
The complete project can be found on GitHub.