package net.techreadiness.customer.action.filebatch; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.inject.Inject; import net.techreadiness.service.FileService; import net.techreadiness.service.object.FileType; import net.techreadiness.ui.action.filters.AbstractConversationFilterSelectionHandler; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import com.google.common.collect.Lists; @Component @org.springframework.context.annotation.Scope("prototype") public class FileTypeSelectionHandler extends AbstractConversationFilterSelectionHandler<FileType> { private static final String FILE_TYPES = "fileTypes"; private static final String FILE_LIST = "fileDataGrid"; @Inject private FileService fileService; @Override public List<FileType> getList(Map<String, Object> parameters) { List<FileType> fileTypes = fileService.findFileTypes(getServiceContext()); // Filter out the already selected types fileTypes.removeAll(getSelectedTypes(fileTypes)); String term = ((String[]) parameters.get("term"))[0]; if (StringUtils.isNotBlank(term)) { // Filter out the types that do not match the search term Iterator<FileType> i = fileTypes.iterator(); while (i.hasNext()) { FileType type = i.next(); if (!StringUtils.containsIgnoreCase(type.getName(), term)) { i.remove(); } } } return fileTypes; } @Override public List<FileType> getSelection() { List<FileType> allTypes = fileService.findFileTypes(getServiceContext()); return getSelectedTypes(allTypes); } private List<FileType> getSelectedTypes(Collection<FileType> types) { List<FileType> newList = Lists.newLinkedList(types); Iterator<FileType> i = newList.iterator(); Collection<String> selection = getDataGridState(FILE_LIST).getFilters().get(FILE_TYPES); while (i.hasNext()) { FileType type = i.next(); if (!selection.contains(type.getFileTypeId().toString())) { i.remove(); } } return newList; } @Override public void add(Long id) { getDataGridState(FILE_LIST).getFilters().get(FILE_TYPES).add(id.toString()); } @Override public void remove(Long id) { getDataGridState(FILE_LIST).getFilters().get(FILE_TYPES).remove(id.toString()); } @Override public void clear() { getDataGridState(FILE_LIST).getFilters().get(FILE_TYPES).clear(); } }