Skip to content

Instantly share code, notes, and snippets.

@johannest
Created March 5, 2015 14:36
Show Gist options
  • Save johannest/e0d09a0984d565c9b59d to your computer and use it in GitHub Desktop.
Save johannest/e0d09a0984d565c9b59d to your computer and use it in GitHub Desktop.
package com.viavansi.vaadinsample.lib.utils;
import com.vaadin.data.util.BeanContainer;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.ui.AbstractSelect;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import com.viavansi.vaadinsample.models.BaseDTO;
public class AbstractMultiSelectToDTOConverter<T> implements Converter<Set<Object>, List<BaseDTO>> {
private static final long serialVersionUID = -7589634171531062832L;
private BeanContainer<Long, BaseDTO> container;
private final static List<BaseDTO> MODEL_TYPE_INSTANCE = new ArrayList<BaseDTO>();
private final static Set<Object> PRESENTER_TYPE_INSTANCE = new HashSet<Object>();
@SuppressWarnings("unchecked")
public AbstractMultiSelectToDTOConverter(AbstractSelect field) {
this.container = (BeanContainer<Long, BaseDTO>) field.getContainerDataSource();
}
@Override
public List<BaseDTO> convertToModel(Set<Object> itemIds,
Class<? extends List<BaseDTO>> targetType, Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
List<BaseDTO> models = new ArrayList<BaseDTO>();
if (container.size() > 0) {
for (Object itemId : itemIds) {
if (container.containsId(itemId)) {
models.add(container.getItem(itemId).getBean());
}
}
}
return models;
}
@Override
public Set<Object> convertToPresentation(List<BaseDTO> models,
Class<? extends Set<Object>> targetType, Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
Set<Object> ids = new HashSet<Object>();
for (Object itemId : container.getItemIds()) {
BaseDTO bean = container.getItem(itemId).getBean();
for (Object model : models) {
if (((BaseDTO) model).compareTo(bean)) {
ids.add(itemId);
}
}
}
return ids;
}
@SuppressWarnings("unchecked")
@Override
public Class<List<BaseDTO>> getModelType() {
return (Class<List<BaseDTO>>) MODEL_TYPE_INSTANCE.getClass();
}
@SuppressWarnings("unchecked")
@Override
public Class<Set<Object>> getPresentationType() {
return (Class<Set<Object>>) PRESENTER_TYPE_INSTANCE.getClass();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment