package org.vaadin.smartgwt.client.core; import java.util.HashSet; import java.util.Set; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.Paintable; import com.vaadin.terminal.gwt.client.UIDL; public class PaintableArray implements PaintableProperty { private final Set<PaintableArrayListener> listeners = new HashSet<PaintableArrayListener>(); private final String name; private Paintable[] paintables; public PaintableArray(String name) { this.name = name; } @Override public String getName() { return name; } public void addPaintableArrayListener(PaintableArrayListener listener) { listeners.add(listener); } @Override public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { final int childCount = uidl.getChildCount(); if (childCount == 0) { fireOnChange(paintables, paintables = null); } else { final Paintable[] newPaintables = new Paintable[childCount]; for (int i = 0; i < childCount; i++) { final UIDL elementUIDL = uidl.getChildUIDL(i); newPaintables[i] = client.getPaintable(elementUIDL); newPaintables[i].updateFromUIDL(elementUIDL, client); } fireOnChange(paintables, paintables = newPaintables); } } private void fireOnChange(Paintable[] oldPaintables, Paintable[] newPaintables) { if (oldPaintables != newPaintables) { for (PaintableArrayListener listener : listeners) { listener.onChange(oldPaintables, newPaintables); } } } }