package org.ovirt.engine.ui.common.widget.editor; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import com.google.gwt.event.logical.shared.HasValueChangeHandlers; import com.google.gwt.user.client.TakesValue; import com.google.gwt.user.client.ui.HasConstrainedValue; public class TakesConstrainedValueListEditor<T> extends TakesConstrainedValueEditor<List<T>> { public static <T> TakesConstrainedValueListEditor<T> ofList(TakesListValue<T> peer, HasConstrainedValue<List<T>> peerWithConstraints, HasValueChangeHandlers<List<T>> peerWithValueChangeHandlers) { return new TakesConstrainedValueListEditor<>(peer, peerWithConstraints, peerWithValueChangeHandlers); } TakesValue<List<T>> peer; protected TakesConstrainedValueListEditor(TakesValue<List<T>> peer, HasConstrainedValue<List<T>> peerWithConstraints, HasValueChangeHandlers<List<T>> peerWithValueChangeHandlers) { super(peer, peerWithConstraints, peerWithValueChangeHandlers); this.peer = peer; } public void setAcceptableListValues(Collection<T> values) { List<List<T>> acceptableItems = createListOfLists(values); super.setAcceptableValues(acceptableItems); } private List<List<T>> createListOfLists(Collection<T> items) { List<List<T>> acceptableItems = new ArrayList<>(); for (T item: items) { acceptableItems.add(Arrays.asList(item)); } return acceptableItems; } public void setListValue(List<T> value) { //Make sure to send a copy so we don't accidentally wipe out the original values. List<T> listValue = value == null ? Collections.<T>emptyList() : new ArrayList<>(value); ((TakesListValue<T>)peer).setListValue(listValue); } }