package model.manager.excel.reports.in;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import model.manager.excel.conversion.exceptions.PatientException;
import model.manager.excel.interfaces.BaseImportColumn;
import model.manager.excel.interfaces.ImportColumn;
import org.hibernate.Session;
public class MultiImportColumn<T> extends BaseImportColumn<Set<T>> implements ImportColumn<Set<T>> {
private List<ImportColumn<T>> columns = new ArrayList<ImportColumn<T>>();
private final boolean allowAllBlank;
private final String headerPrefix;
public MultiImportColumn(String headerPrefix, String beanProperty, boolean allowAllBlank) {
super(beanProperty);
this.headerPrefix = headerPrefix;
this.allowAllBlank = allowAllBlank;
}
public String getHeaderPrefix() {
return headerPrefix;
}
public void addColumn(ImportColumn<T> column){
columns.add(column);
}
@Override
public void findColumn(List<String> columnHeaders) {
for (ImportColumn<T> col : columns) {
col.findColumn(columnHeaders);
}
}
@Override
public boolean checkColumn() {
if (allowAllBlank)
return true;
boolean allBlank = true;
for (ImportColumn<T> col : columns) {
if (col.getColumnNumber() >= 0)
allBlank = false;
}
return !allBlank;
}
@Override
public boolean process(List<String> rawValues, Session session) throws PatientException {
boolean processSuccess = false;
Set<T> set = new HashSet<T>();
for (ImportColumn<T> col : columns) {
boolean success = col.process(rawValues, session);
if (success){
set.add(col.getConvertedValue());
}
processSuccess |= success;
}
convertedValue = set;
return processSuccess;
}
@Override
public String getRawValue() {
return "Patient attribute set";
}
@Override
public Set<T> getConvertedValue() {
return convertedValue;
}
@Override
public int getColumnNumber() {
return -1;
}
@Override
public String getHeader() {
StringBuilder sb = new StringBuilder();
for (ImportColumn<T> col : columns) {
sb.append(headerPrefix).append("(");
sb.append(col.getHeader()).append(")").append("|");
}
return sb.substring(0,sb.length()-1);
}
@Override
public boolean isAllowBlank() {
return allowAllBlank;
}
public int getSize(){
return columns.size();
}
@Override
public String getConverterDescription() {
StringBuilder sb = new StringBuilder();
for (ImportColumn<T> col : columns) {
sb.append(col.getConverterDescription()).append("|");
}
return sb.substring(0,sb.length()-1);
}
}