gwtproject / gwt-editor

Ported GWT editors from GWT 2.8.x ready for GWT 2.x & J2CL /GWT 3)
Apache License 2.0
8 stars 14 forks source link

GWT Editor

GWT3/J2CL compatible License Chat on Gitter CI

A future-proof port of the com.google.gwt.editor.Editor GWT module, with no dependency on gwt-user (besides the Java Runtime Emulation), to prepare for GWT 3 / J2Cl.

Migrating from com.google.gwt.editor.Editor

  1. Add the dependency to your build.

    For Maven:

    <dependency>
     <groupId>org.gwtproject.editor</groupId>
     <artifactId>gwt-editor</artifactId>
     <version>HEAD-SNAPSHOT</version>
    </dependency>

    and the processor:

    <dependency>
      <groupId>org.gwtproject.editor</groupId>
      <artifactId>gwt-editor-processor</artifactId>
      <version>HEAD-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>

    For Gradle:

    implementation("org.gwtproject.editor:gwt-editor:HEAD-SNAPSHOT")

    and the processor:

    ToDo ... 
    <dependency>
      <groupId>org.gwtproject.editor</groupId>
      <artifactId>gwt-editor-processor</artifactId>
      <version>HEAD-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>
  2. Update your GWT module to use

    <inherits name="org.gwtproject.editor.Editor" />
  3. Change the imports in your Java source files:

    import org.gwtproject.editor.client.xxx;

Instructions

To build gwt-event:

on the parent directory. This will build the artifact and run tests against GWT2. The J2CL test need to be executed with mvn j2cl:clean an mvn j2cl:test due to a problem with modules that use processors. See: https://github.com/Vertispan/j2clmavenplugin/issues/14

System Requirements

GWT Editor requires GWT 2.9.0 or newer!

Dependencies

GWT Editor depends on the following module:

Example usage

the bean

public class Person {

    private int id;
    private String name;
    private boolean active;

    public Person() {
    }

    public Person(int id, String name, boolean active) {
        this.id = id;
        this.name = name;
        this.active = active;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }
}

The component

this component uses domino-ui

public class PersonComponent implements IsElement<HTMLDivElement>, Editor<Person> {

    @IsDriver
    interface Driver extends SimpleBeanEditorDriver<Person, PersonComponent> {
    }

    private DominoElement<HTMLDivElement> root = DominoElement.of(div());

    IntegerBox id;
    TextBox name;
    CheckBox active;

    private final Driver driver;

    public PersonComponent() {
        driver = new PersonComponent_Driver_Impl();

        id = IntegerBox.create("id");
        name = TextBox.create("name");
        active = CheckBox.create("Is active");

        root.appendChild(Row.create()
                .appendChild(Column.span12()
                        .appendChild(id))
                .appendChild(Column.span12()
                        .appendChild(name))
                .appendChild(Column.span12()
                        .appendChild(active))
        );

        driver.initialize(this);
    }

    public void edit(Person person){
        driver.edit(person);
    }

    public Person save(){
        return driver.flush();
    }

    @Override
    public HTMLDivElement asElement() {
        return root.asElement();
    }
}

And use it like this

PersonComponent personComponent = new PersonComponent();

        Person person = new Person(10, "Ahmad", false);

        DomGlobal.document.body.appendChild(Card.create()
                .appendChild(personComponent)
                .asElement());

        personComponent.edit(person);