package com.constellio.app.ui.framework.data.event;
import com.constellio.model.entities.records.wrappers.Event;
import com.constellio.model.entities.records.wrappers.EventType;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.Schemas;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import static com.constellio.app.ui.i18n.i18n.$;
import static java.util.Arrays.asList;
public class EventTypeUtils implements Serializable {
public static String getEventTypeCaption(String eventType) {
if (eventType.equals(EventType.OPEN_SESSION)) {
return $("ListEventsView.openedSessions");
} else if (eventType.equals(EventType.VIEW_FOLDER)) {
return $("ListEventsView.foldersView");
} else if (eventType.equals(EventType.CREATE_FOLDER)) {
return $("ListEventsView.foldersCreation");
} else if (eventType.equals(EventType.MODIFY_FOLDER)) {
return $("ListEventsView.foldersModification");
} else if (eventType.equals(EventType.DELETE_FOLDER)) {
return $("ListEventsView.foldersDeletion");
} else if (eventType.equals(EventType.BORROW_FOLDER)) {
return $("ListEventsView.borrowedFolders");
} else if (eventType.equals(EventType.RETURN_FOLDER)) {
return $("ListEventsView.returnedFolders");
} else if (eventType.equals(EventType.VIEW_DOCUMENT)) {
return $("ListEventsView.documentsView");
} else if (eventType.equals(EventType.CREATE_DOCUMENT)) {
return $("ListEventsView.documentsCreation");
} else if (eventType.equals(EventType.MODIFY_DOCUMENT)) {
return $("ListEventsView.documentsModification");
} else if (eventType.equals(EventType.DELETE_DOCUMENT)) {
return $("ListEventsView.documentsDeletion");
} else if (eventType.equals(EventType.CURRENT_BORROW_DOCUMENT)) {
return $("ListEventsView.currentlyBorrowedDocuments");
} else if (eventType.equals(EventType.BORROW_DOCUMENT)) {
return $("ListEventsView.borrowedDocuments");
} else if (eventType.equals(EventType.RETURN_DOCUMENT)) {
return $("ListEventsView.returnedDocuments");
} else if (eventType.equals(EventType.BORROW_CONTAINER)) {
return $("ListEventsView.borrowedContainers");
} else if (eventType.equals(EventType.RETURN_CONTAINER)) {
return $("ListEventsView.returnedContainers");
} else if (eventType.equals(EventType.CREATE_USER)) {
return $("ListEventsView.createdUsersEvent");
} else if (eventType.equals(EventType.MODIFY_USER)) {
return $("ListEventsView.modifiedUsersEvent");
} else if (eventType.equals(EventType.DELETE_USER)) {
return $("ListEventsView.deletedUsersEvent");
} else if (eventType.equals(EventType.CREATE_GROUP)) {
return $("ListEventsView.createdGroupsEvent");
} else if (eventType.equals(EventType.DELETE_GROUP)) {
return $("ListEventsView.deletedGroupsEvent");
} else if (eventType.equals(EventType.GRANT_PERMISSION_FOLDER)) {
return $("ListEventsView.grantedPermissions.folder");
} else if (eventType.equals(EventType.MODIFY_PERMISSION_FOLDER)) {
return $("ListEventsView.modifiedPermissions.folder");
} else if (eventType.equals(EventType.DELETE_PERMISSION_FOLDER)) {
return $("ListEventsView.deletedPermissions.folder");
} else if (eventType.equals(EventType.GRANT_PERMISSION_DOCUMENT)) {
return $("ListEventsView.grantedPermissions.document");
} else if (eventType.equals(EventType.MODIFY_PERMISSION_DOCUMENT)) {
return $("ListEventsView.modifiedPermissions.document");
} else if (eventType.equals(EventType.DELETE_PERMISSION_DOCUMENT)) {
return $("ListEventsView.deletedPermissions.document");
} else if (eventType.equals(EventType.FOLDER_RELOCATION)) {
return $("ListEventsView.folderRelocation");
} else if (eventType.equals(EventType.FOLDER_DEPOSIT)) {
return $("ListEventsView.folderDeposit");
} else if (eventType.equals(EventType.FOLDER_DESTRUCTION)) {
return $("ListEventsView.folderDestruction");
} else if (eventType.equals(EventType.PDF_A_GENERATION)) {
return $("ListEventsView.pdfAGeneration");
} else if (eventType.equals(EventType.RECEIVE_FOLDER)) {
return $("ListEventsView.receiveFolder");
} else if (eventType.equals(EventType.RECEIVE_CONTAINER)) {
return $("ListEventsView.receiveContainer");
} else if (eventType.equals(EventType.CURRENTLY_BORROWED_FOLDERS)) {
return $("ListEventsView.currentlyBorrowedFolders");
} else if (eventType.equals(EventType.LATE_BORROWED_FOLDERS)) {
return $("ListEventsView.lateBorrowedFolders");
} else if (eventType.equals(EventType.CONSULTATION_FOLDER)) {
return $("ListEventsView.consultationFolders");
} else if (eventType.equals(EventType.CREATE_TASK)) {
return $("ListEventsView.createTask");
} else if (eventType.equals(EventType.MODIFY_TASK)) {
return $("ListEventsView.modifyTask");
} else if (eventType.equals(EventType.DELETE_TASK)) {
return $("ListEventsView.deleteTask");
} else if (eventType.equals(EventType.REINDEXING)) {
return $("ListEventsView.reindexing");
} else if (eventType.equals(EventType.RESTARTING)) {
return $("ListEventsView.restarting");
} else if (eventType.equals(EventType.BORROW_REQUEST_FOLDER)) {
return $("ListEventsView.borrowRequestFolder");
} else if (eventType.equals(EventType.RETURN_REQUEST_FOLDER)) {
return $("ListEventsView.returnRequestFolder");
} else if (eventType.equals(EventType.REACTIVATION_REQUEST_FOLDER)) {
return $("ListEventsView.reactivationRequestFolder");
} else if (eventType.equals(EventType.BORROW_EXTENSION_REQUEST_FOLDER)) {
return $("ListEventsView.borrowExtensionRequestFolder");
} else if (eventType.equals(EventType.BORROW_REQUEST_CONTAINER)) {
return $("ListEventsView.borrowRequestContainer");
} else if (eventType.equals(EventType.RETURN_REQUEST_CONTAINER)) {
return $("ListEventsView.returnRequestContainer");
} else if (eventType.equals(EventType.REACTIVATION_REQUEST_CONTAINER)) {
return $("ListEventsView.reactivationRequestContainer");
} else if (eventType.equals(EventType.BORROW_EXTENSION_REQUEST_CONTAINER)) {
return $("ListEventsView.borrowExtensionRequestContainer");
} else {
throw new UnsupportedEventTypeRuntimeException(eventType);
}
}
public static List<String> getDisplayedMetadataCodes(MetadataSchema metadataSchema, String eventType) {
List<String> metadataCodes = new ArrayList<>();
metadataCodes.addAll(getCommunMetadata(metadataSchema));
metadataCodes.addAll(getSpecificMetadata(metadataSchema, eventType));
return metadataCodes;
}
private static List<String> getCommunMetadata(MetadataSchema metadataSchema) {
List<String> metadataCodes = new ArrayList<>();
Metadata eventUserNameMetadata = metadataSchema.getMetadata(Event.USERNAME);
Metadata eventUserIPMetadata = metadataSchema.getMetadata(Event.IP);
Metadata eventDateMetadata = metadataSchema.getMetadata(Schemas.CREATED_ON.getLocalCode());
Metadata eventUserRolesMetadata = metadataSchema.getMetadata(Event.USER_ROLES);
metadataCodes.add(eventUserNameMetadata.getCode());
metadataCodes.add(eventDateMetadata.getCode());
metadataCodes.add(eventUserRolesMetadata.getCode());
metadataCodes.add(eventUserIPMetadata.getCode());
return metadataCodes;
}
private static List<String> getSpecificMetadata(MetadataSchema metadataSchema,
String eventType) {
List<String> metadataCodes = new ArrayList<>();
if (isPermissionEvent(eventType)) {
metadataCodes.addAll(getEventRecordMetadata(metadataSchema));
metadataCodes.addAll(getEventPermissionMetadata(metadataSchema));
} else if (isRecordEvent(eventType)) {
metadataCodes.addAll(getEventRecordMetadata(metadataSchema));
if (eventType.equals(EventType.DELETE_FOLDER) || eventType.equals(EventType.DELETE_DOCUMENT)) {
Metadata reasonMetadata = metadataSchema.getMetadata(Event.REASON);
metadataCodes.add(reasonMetadata.getCode());
} else if(isPotentiallyFromRequestTask(eventType)) {
Metadata taskMetadata = metadataSchema.getMetadata(Event.TASK);
metadataCodes.add(taskMetadata.getCode());
Metadata receiverMetadata = metadataSchema.getMetadata(Event.RECEIVER_NAME);
metadataCodes.add(receiverMetadata.getCode());
Metadata descriptionMetadata = metadataSchema.getMetadata(Event.REASON);
metadataCodes.add(descriptionMetadata.getCode());
}
} else if (isUserEvent(eventType) ||
isGroupEvent(eventType)) {
metadataCodes.addAll(getEventUserMetadata(metadataSchema));
}
if (isModificationEvent(eventType)) {
metadataCodes.add(Event.DELTA);
}
if(isRequestTaskEvent(eventType)) {
metadataCodes.add(Event.ACCEPTED);
}
return metadataCodes;
}
private static boolean isRequestTaskEvent(String eventType) {
return asList(EventType.BORROW_REQUEST_FOLDER, EventType.RETURN_REQUEST_FOLDER, EventType.REACTIVATION_REQUEST_FOLDER, EventType.BORROW_EXTENSION_REQUEST_FOLDER,
EventType.BORROW_REQUEST_CONTAINER, EventType.RETURN_REQUEST_CONTAINER, EventType.REACTIVATION_REQUEST_CONTAINER, EventType.BORROW_EXTENSION_REQUEST_CONTAINER)
.contains(eventType);
}
private static boolean isPotentiallyFromRequestTask(String eventType) {
return asList(EventType.BORROW_FOLDER, EventType.BORROW_CONTAINER, EventType.RETURN_FOLDER, EventType.RETURN_CONTAINER,
EventType.BORROW_REQUEST_FOLDER, EventType.RETURN_REQUEST_FOLDER, EventType.REACTIVATION_REQUEST_FOLDER, EventType.BORROW_EXTENSION_REQUEST_FOLDER,
EventType.BORROW_REQUEST_CONTAINER, EventType.RETURN_REQUEST_CONTAINER, EventType.REACTIVATION_REQUEST_CONTAINER, EventType.BORROW_EXTENSION_REQUEST_CONTAINER)
.contains(eventType);
}
private static List<String> getEventUserMetadata(MetadataSchema metadataSchema) {
List<String> metadataCodes = new ArrayList<>();
Metadata eventTitleMetadata = metadataSchema.getMetadata(Schemas.TITLE.getLocalCode());
metadataCodes.add(eventTitleMetadata.getCode());
return metadataCodes;
}
public static boolean isUserEvent(String eventType) {
if (eventType.contains("_user")) {
return true;
} else {
return false;
}
}
private static boolean isGroupEvent(String eventType) {
if (eventType.contains("_group")) {
return true;
} else {
return false;
}
}
public static boolean isRecordEvent(String eventType) {
return isFolderEvent(eventType) ||
isDocumentEvent(eventType) ||
isTaskEvent(eventType) ||
isContainerEvent(eventType) ||
eventType.equals(EventType.PDF_A_GENERATION);
}
private static boolean isContainerEvent(String eventType) {
//FIXME list all events
if (eventType.contains("_container")) {
return true;
} else {
return false;
}
}
private static boolean isDocumentEvent(String eventType) {
//FIXME list all events
if (eventType.contains("_document")) {
return true;
} else {
return false;
}
}
private static boolean isTaskEvent(String eventType) {
//FIXME list all events
if (eventType.contains("_userTask")) {
return true;
} else {
return false;
}
}
private static boolean isFolderEvent(String eventType) {
//FIXME list all events
if (eventType.contains("_folder")) {
return true;
} else {
return false;
}
}
private static boolean isPermissionEvent(String eventType) {
if (eventType.contains(EventType.DELETE_PERMISSION) ||
eventType.contains(EventType.GRANT_PERMISSION) ||
eventType.contains(EventType.MODIFY_PERMISSION)) {
return true;
} else {
return false;
}
}
private static List<String> getEventPermissionMetadata(MetadataSchema metadataSchema) {
List<String> metadataCodes = new ArrayList<>();
Metadata permissionDatesMetadata = metadataSchema.getMetadata(Event.PERMISSION_DATE_RANGE);
Metadata permissionRolesMetadata = metadataSchema.getMetadata(Event.PERMISSION_ROLES);
Metadata permissionUsersMetadata = metadataSchema.getMetadata(Event.PERMISSION_USERS);
metadataCodes.add(permissionDatesMetadata.getCode());
metadataCodes.add(permissionRolesMetadata.getCode());
metadataCodes.add(permissionUsersMetadata.getCode());
return metadataCodes;
}
private static List<String> getEventRecordMetadata(MetadataSchema metadataSchema) {
List<String> metadataCodes = new ArrayList<>();
Metadata recordIdMetadata = metadataSchema.getMetadata(Event.RECORD_ID);
Metadata eventTitleMetadata = metadataSchema.getMetadata(Schemas.TITLE.getLocalCode());
metadataCodes.add(recordIdMetadata.getCode());
metadataCodes.add(eventTitleMetadata.getCode());
return metadataCodes;
}
public static boolean isModificationEvent(String eventType) {
//FIXME list all events
if (eventType.contains("modify_")) {
return true;
} else if(asList(EventType.BORROW_FOLDER, EventType.BORROW_CONTAINER,
EventType.BORROW_REQUEST_FOLDER, EventType.BORROW_EXTENSION_REQUEST_FOLDER,
EventType.BORROW_REQUEST_CONTAINER, EventType.BORROW_EXTENSION_REQUEST_CONTAINER)
.contains(eventType)) {
return true;
} else {
return false;
}
}
}