package com.constellio.app.ui.framework.components.fields.comment;
import java.io.Serializable;
import java.util.List;
import com.constellio.app.modules.rm.wrappers.structures.Comment;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.pages.base.SchemaPresenterUtils;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.security.AuthorizationsServices;
public class RecordCommentsEditorPresenter implements Serializable {
private RecordCommentsEditor editor;
private String recordId;
private String metadataCode;
private SchemaPresenterUtils presenterUtils;
public RecordCommentsEditorPresenter(RecordCommentsEditor editor) {
this.editor = editor;
}
public void forRecordVO(RecordVO recordVO, String metadataCode) {
this.recordId = recordVO.getId();
this.metadataCode = metadataCode;
init();
}
public void forRecordId(String recordId, String metadataCode) {
this.recordId = recordId;
this.metadataCode = metadataCode;
init();
}
private void init() {
SessionContext sessionContext = editor.getSessionContext();
ConstellioFactories constellioFactories = editor.getConstellioFactories();
ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory();
RecordServices recordServices = modelLayerFactory.newRecordServices();
AuthorizationsServices authorizationsServices = modelLayerFactory.newAuthorizationsServices();
Record record = recordServices.getDocumentById(recordId);
String schemaCode = record.getSchemaCode();
presenterUtils = new SchemaPresenterUtils(schemaCode, constellioFactories, sessionContext);
Metadata metadata = presenterUtils.getMetadata(metadataCode);
String caption = metadata.getLabel(Language.withCode(presenterUtils.getCurrentLocale().getLanguage()));
List<Comment> comments = record.get(metadata);
editor.setComments(comments);
editor.setCaption(caption);
User currentUser = presenterUtils.getCurrentUser();
if (!authorizationsServices.canWrite(currentUser, record)) {
editor.setVisible(false);
}
}
public void commentsChanged(List<Comment> newComments) {
if (newComments != null) {
Metadata metadata = presenterUtils.getMetadata(metadataCode);
Record record = presenterUtils.getRecord(recordId);
List<Comment> existingComments = record.get(metadata);
if (!newComments.equals(existingComments)) {
User user = presenterUtils.getCurrentUser();
ConstellioFactories constellioFactories = editor.getConstellioFactories();
ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory();
AuthorizationsServices authorizationsServices = modelLayerFactory.newAuthorizationsServices();
record.set(metadata, newComments);
if (authorizationsServices.canWrite(user, record)) {
presenterUtils.addOrUpdate(record);
}
}
}
}
}