package com.constellio.app.modules.tasks.ui.components.fields.list; import com.constellio.app.modules.tasks.model.wrappers.structures.TaskFollower; import com.constellio.app.modules.tasks.ui.components.converters.TaskFollowerVOToStringConverter; import com.constellio.app.modules.tasks.ui.components.fields.TaskFollowerFieldImpl; import com.constellio.app.modules.tasks.ui.entities.TaskFollowerVO; import com.constellio.app.ui.framework.buttons.EditButton; import com.constellio.app.ui.framework.components.fields.list.ListAddRemoveField; import com.constellio.app.ui.framework.containers.ButtonsContainer; import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton; import com.vaadin.data.Property; import com.vaadin.data.util.ObjectProperty; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.Field; @SuppressWarnings("unchecked") public class ListAddRemoveTaskFollowerField extends ListAddRemoveField<TaskFollowerVO, TaskFollowerFieldImpl> { private TaskFollowerVOToStringConverter converter = new TaskFollowerVOToStringConverter(); @Override protected TaskFollowerFieldImpl newAddEditField() { return new TaskFollowerFieldImpl(); } //FIXME should be always Vo or not @Override protected String getItemCaption(Object itemId) { if (itemId instanceof TaskFollowerVO) { return converter.convertToPresentation((TaskFollowerVO) itemId, String.class, getLocale()); } else { return converter.convertToPresentation(toTaskFollowerVO((TaskFollower) itemId), String.class, getLocale()); } } @Override protected ContainerButton addEditButton() { return new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { final TaskFollowerVO followerVO = convertObjectAsTaskFollowerVO(itemId); EditButton editButton = new EditButton() { @Override protected void buttonClick(ClickEvent event) { removeValue(itemId); ((Field<TaskFollowerVO>) addEditField).setValue(followerVO); addEditField.focus(); } }; if (!isEditButtonVisible(followerVO)) { editButton.setVisible(false); } editButton.setEnabled(!ListAddRemoveTaskFollowerField.this.isReadOnly() && ListAddRemoveTaskFollowerField.this.isEnabled()); editButton.addStyleName(EDIT_BUTTON_STYLE_NAME); return editButton; } }; } private TaskFollowerVO convertObjectAsTaskFollowerVO(Object itemId) { if(itemId instanceof TaskFollower) { return toTaskFollowerVO((TaskFollower) itemId); } else { return (TaskFollowerVO) itemId; } } private TaskFollowerVO toTaskFollowerVO(TaskFollower taskFollower) { return new TaskFollowerVO(taskFollower.getFollowerId(), taskFollower.getFollowTaskAssigneeModified(), taskFollower.getFollowSubTasksModified(), taskFollower.getFollowTaskStatusModified(), taskFollower.getFollowTaskCompleted(), taskFollower.getFollowTaskDeleted()); } }