xdoo / vaadin-demo

demo using vaadin with spring boot.
4 stars 2 forks source link

Generische Komponenten erstellen #26

Closed xdoo closed 9 years ago

xdoo commented 9 years ago

Derzeit gibt es noch recht viele spezielle Komponenten, die in vielen Teilen gleich sind (z.B. BuergerBackButton), sich aber vor allem bei Referenzen auf andere Klassen - wie beispielsweise Controller - unterscheiden. Prinzipiell ist es zwar kein Problem, wenn der Code generiert wird, aber eine gewisse Abstraktion ist doch wünschenswert. Deshalb sollten so viele (Custom UI) Komponenten wie möglich generisch gestaltet werden.

peter-mueller commented 9 years ago

ID-Format/Generierung muss noch geklärt bzw. vereinheitlicht werden.

peter-mueller commented 9 years ago

Der guava-Eventbus kann nicht mit generischen Klassen umgehen (wegen Java TypeErasure).

Das bedeutet das update() bei ComponentEvent<D> auch angesprungen wird. für D != T

/**
 * Eventhandler für Eventbus
 *
 * @param event the event
 */
@Subscribe
public void update(ComponentEvent<T> event) {
  if(event.getEventType().equals(EventType.SAVE)) {
    this.add(event.getEntity());
  }
  if(event.getEventType().equals(EventType.COPY)) {
    this.add(event.getEntity());
  }
  if(event.getEventType().equals(EventType.DELETE)) {
    this.delete(event.getItemID());
  }
  if(event.getEventType().equals(EventType.UPDATE)) {
    this.add(event.getEntity());
  }
  if(event.getEventType().equals(EventType.QUERY)) {
    this.addAll(event.getEntities());
  }
}

Guava Github Issue (mit StackOverflow Link)

chris-koester commented 9 years ago

Könnte man vielleicht mit einem Type Token umgehen: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/reflect/TypeToken.html

So etwas ähnliches wird zb auch bei ModelMapper verwendet.

On Tuesday, September 1, 2015, Peter Müller notifications@github.com wrote:

Der guava-Eventbus kann nicht mit generischen Klassen umgehen (wegen Java TypeErasure).

Das bedeutet das update() bei ComponentEvent auch angesprungen wird. für D != T

/* * Eventhandler für Eventbus * * @param event the event / @Subscribepublic void update(ComponentEvent event) { if(event.getEventType().equals(EventType.SAVE)) { this.add(event.getEntity()); } if(event.getEventType().equals(EventType.COPY)) { this.add(event.getEntity()); } if(event.getEventType().equals(EventType.DELETE)) { this.delete(event.getItemID()); } if(event.getEventType().equals(EventType.UPDATE)) { this.add(event.getEntity()); } if(event.getEventType().equals(EventType.QUERY)) { this.addAll(event.getEntities()); } }

Guava Github Issue https://github.com/google/guava/issues/1959 (mit StackOverflow Link)

— Reply to this email directly or view it on GitHub https://github.com/xdoo/vaadin-demo/issues/26#issuecomment-136587914.

darenegade commented 9 years ago

Komponenten sind generisch erstellt. Der Rest gehört zum Eventbus. #82