package net.techreadiness.customer.action.filebatch;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.techreadiness.service.FileService.FileStatus;
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 FileStatusSelectionHandler extends AbstractConversationFilterSelectionHandler<FileStatus> {
private static final String FILE_STATUS = "fileStatuses";
private static final String FILE_LIST = "fileDataGrid";
@Override
public List<FileStatus> getList(Map<String, Object> parameters) {
List<FileStatus> fileStatuses = Lists.newArrayList(FileStatus.values());
// Filter out the already selected types
fileStatuses.removeAll(getSelectedStatuses(fileStatuses));
String term = ((String[]) parameters.get("term"))[0];
if (StringUtils.isNotBlank(term)) {
// Filter out the types that do not match the search term
Iterator<FileStatus> i = fileStatuses.iterator();
while (i.hasNext()) {
FileStatus status = i.next();
if (!StringUtils.containsIgnoreCase(status.name(), term)) {
i.remove();
}
}
}
return fileStatuses;
}
@Override
public List<FileStatus> getSelection() {
List<FileStatus> fileStatuses = Lists.newArrayList(FileStatus.values());
return getSelectedStatuses(fileStatuses);
}
private List<FileStatus> getSelectedStatuses(Collection<FileStatus> types) {
List<FileStatus> newList = Lists.newLinkedList(types);
Iterator<FileStatus> i = newList.iterator();
Collection<String> selection = getDataGridState(FILE_LIST).getFilters().get(FILE_STATUS);
while (i.hasNext()) {
FileStatus status = i.next();
if (!selection.contains(status.name().toLowerCase())) {
i.remove();
}
}
return newList;
}
@Override
public void add(Long id) {
FileStatus status = FileStatus.values()[id.intValue()];
getDataGridState(FILE_LIST).getFilters().get(FILE_STATUS).add(status.name().toLowerCase());
}
@Override
public void remove(Long id) {
FileStatus status = FileStatus.values()[id.intValue()];
getDataGridState(FILE_LIST).getFilters().get(FILE_STATUS).remove(status.name().toLowerCase());
}
@Override
public void clear() {
getDataGridState(FILE_LIST).getFilters().get(FILE_STATUS).clear();
}
}