package sushi.excel.importer;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import sushi.event.SushiEvent;
import sushi.event.attribute.SushiAttribute;
import sushi.event.attribute.SushiAttributeTypeEnum;
/**
* This class centralizes common methods for the import of files.
*/
public abstract class FileNormalizer implements Serializable {
private static final long serialVersionUID = 1L;
/**
* Returns the titles as list for files with tabular content.
* @param filePath
* @return
*/
public abstract List<String> getColumnTitlesFromFile(String filePath);
/**
* Imports events from a file for a preview to decide, which parts of the data should be user for the event creation.
* @param filePath
* @param selectedColumnTitles
* @return
*/
public abstract List<SushiImportEvent> importEventsForPreviewFromFile(String filePath, List<String> selectedColumnTitles);
/**
* Imports data from a file and creates events from this data.
* @param filePath
* @param selectedAttributes
* @return
* @throws IllegalArgumentException
*/
public List<SushiEvent> importEventsFromFile(String filePath, List<SushiAttribute> selectedAttributes) throws IllegalArgumentException {
String timeStampColumn = getTimestampColumnFromAttribute(selectedAttributes);
return importEventsFromFile(filePath, selectedAttributes, timeStampColumn);
}
/**
* Imports data from a file and creates events from this data.
* @param filePath
* @param selectedAttributes
* @param timestamp
* @return
*/
public abstract List<SushiEvent> importEventsFromFile(String filePath, List<SushiAttribute> selectedAttributes, String timestamp);
/**
* Tries to identify a timestamp from the given attributes.
* @param attributes
* @return
*/
protected String getTimestampColumnFromAttribute(List<SushiAttribute> attributes) {
ArrayList<String> columnTitles = new ArrayList<String>();
for (SushiAttribute attribute : attributes) {
if (attribute.getType() == SushiAttributeTypeEnum.DATE) {
columnTitles.add(attribute.getName());
}
}
return getTimestampColumn(columnTitles);
}
/**
* Tries to identify a timestamp column from the given attributes.
* @param columnTitles
* @return
*/
protected String getTimestampColumn(List<String> columnTitles) {
for (int i = 0; i < columnTitles.size(); i++) {
String actualColumnTitle = columnTitles.get(i);
for (TimeStampNames columnName : TimeStampNames.values()) {
if (columnName.toString().equals(actualColumnTitle.toUpperCase())) {
return actualColumnTitle;
}
}
}
return null;
}
}