package com.constellio.app.modules.tasks.ui.components; import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType; import com.constellio.app.modules.tasks.model.wrappers.request.BorrowRequest; import com.constellio.app.modules.tasks.ui.components.fields.*; import com.constellio.app.modules.tasks.ui.components.fields.*; import com.constellio.app.modules.tasks.ui.components.fields.list.ListAddRemoveTaskFollowerField; import com.constellio.app.modules.tasks.ui.components.fields.list.ListAddRemoveTaskReminderField; import com.constellio.app.modules.tasks.ui.components.fields.list.TaskListAddRemoveLinkedDocumentsLookupField; import com.constellio.app.modules.tasks.ui.components.fields.list.TaskListAddRemoveLinkedFoldersLookupField; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.framework.components.MetadataFieldFactory; import com.vaadin.ui.Field; import static com.constellio.app.modules.rm.wrappers.Document.TYPE; import static com.constellio.app.modules.tasks.model.wrappers.Task.*; public class TaskFieldFactory extends MetadataFieldFactory { @Override public Field<?> build(MetadataVO metadata) { Field<?> field; MetadataInputType inputType = metadata.getMetadataInputType(); switch (metadata.getLocalCode()) { case TYPE: if (MetadataInputType.LOOKUP.equals(inputType)) { field = new TaskTypeFieldLookupImpl(); } else if (MetadataInputType.RADIO_BUTTONS.equals(inputType)) { field = new TaskTypeFieldOptionGroupImpl(); } else { field = new TaskTypeFieldComboBoxImpl(); } break; case TASK_FOLLOWERS: field = new ListAddRemoveTaskFollowerField(); break; case REMINDERS: field = new ListAddRemoveTaskReminderField(); break; case PROGRESS_PERCENTAGE: field = new TaskProgressPercentageFieldImpl(); break; case RELATIVE_DUE_DATE: field = new TaskRelativeDueDateFieldImpl(); break; case DECISION: field = new TaskDecisionFieldImpl(); break; case BorrowRequest.ACCEPTED: field = new TaskAcceptedFieldImpl(); break; case BorrowRequest.REASON: field = new TaskReasonFieldImpl(); break; case LINKED_FOLDERS: field = new TaskListAddRemoveLinkedFoldersLookupField(); postBuild(field, metadata); break; case LINKED_DOCUMENTS: field = new TaskListAddRemoveLinkedDocumentsLookupField(); postBuild(field, metadata); break; default: field = super.build(metadata); } if (field instanceof CustomTaskField) { postBuild(field, metadata); } return field; } }