package com.constellio.app.modules.tasks.ui.components.converters;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.Locale;
import org.joda.time.LocalDate;
import com.constellio.app.modules.tasks.model.wrappers.Task;
import com.constellio.app.modules.tasks.ui.entities.TaskReminderVO;
import com.constellio.app.ui.framework.components.converters.JodaDateToStringConverter;
import com.vaadin.data.util.converter.Converter;
public class TaskReminderVOToStringConverter implements Converter<String, TaskReminderVO> {
private JodaDateToStringConverter jodaDateToStringConverter = new JodaDateToStringConverter();
@Override
public TaskReminderVO convertToModel(String value, Class<? extends TaskReminderVO> targetType, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
return null;
}
@Override
public String convertToPresentation(TaskReminderVO value, Class<? extends String> targetType, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
String presentation;
if (value != null) {
LocalDate fixedDate = value.getFixedDate();
String relativeDateMetadataCode = value.getRelativeDateMetadataCode();
int numberOfDaysToRelativeDate = value.getNumberOfDaysToRelativeDate();
Boolean beforeRelativeDate = value.getBeforeRelativeDate();
if (fixedDate != null) {
presentation = jodaDateToStringConverter.convertToPresentation(fixedDate, String.class, locale);
} else {
String relativeDateLabel;
if (Task.START_DATE.equals(relativeDateMetadataCode)) {
relativeDateLabel = $("TaskReminder.display.relativeDateMetadataCode.startDate");
} else if (Task.DUE_DATE.equals(relativeDateMetadataCode)) {
relativeDateLabel = $("TaskReminder.display.relativeDateMetadataCode.dueDate");
} else if (Task.END_DATE.equals(relativeDateMetadataCode)) {
relativeDateLabel = $("TaskReminder.display.relativeDateMetadataCode.endDate");
} else {
// Should never happen
throw new RuntimeException("Invalid metadata code : " + relativeDateMetadataCode);
}
if (numberOfDaysToRelativeDate == 0) {
presentation = relativeDateLabel;
} else {
String beforeAfter;
if (Boolean.TRUE.equals(beforeRelativeDate)) {
beforeAfter = $("TaskReminder.display.beforeRelativeDate.before");
} else {
beforeAfter = $("TaskReminder.display.beforeRelativeDate.after");
}
presentation = $("TaskReminder.display.numberOfDaysToRelativeDate", numberOfDaysToRelativeDate, beforeAfter, relativeDateLabel);
}
}
} else {
presentation = null;
}
return presentation;
}
@Override
public Class<TaskReminderVO> getModelType() {
return TaskReminderVO.class;
}
@Override
public Class<String> getPresentationType() {
return String.class;
}
}