package com.constellio.app.ui.pages.base;
import java.util.List;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.entities.ContentVersionVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.util.MessageUtils;
import com.constellio.data.dao.dto.records.RecordsFlushing;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.batchprocess.BatchProcess;
import com.constellio.model.entities.records.Content;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.services.records.RecordServicesRuntimeException.RecordServicesRuntimeException_CannotLogicallyDeleteRecord;
public abstract class SingleSchemaBasePresenter<T extends BaseView> extends BasePresenter<T> {
private SchemaPresenterUtils schemaPresenterUtils;
public SingleSchemaBasePresenter(T view) {
this(view, "");
}
public SingleSchemaBasePresenter(T view, String schemaCode) {
this(view, schemaCode, view.getConstellioFactories(), view.getSessionContext());
}
public SingleSchemaBasePresenter(T view, String schemaCode, ConstellioFactories constellioFactories,
SessionContext sessionContext) {
super(view, constellioFactories, sessionContext);
this.schemaPresenterUtils = new SchemaPresenterUtils(schemaCode, constellioFactories, sessionContext);
}
public final String getSchemaCode() {
return schemaPresenterUtils.schemaCode;
}
public final String getLabel() {
Language language = Language.withCode(view.getSessionContext().getCurrentLocale().getLanguage());
return schema().getLabel(language);
}
public final void setSchemaCode(String schemaCode) {
this.schemaPresenterUtils.setSchemaCode(schemaCode);
}
protected Record newRecord() {
return schemaPresenterUtils.newRecord();
}
protected Record getRecord(String id) {
return schemaPresenterUtils.getRecord(id);
}
public final Metadata getMetadata(String code) {
return schemaPresenterUtils.getMetadata(code);
}
protected List<BatchProcess> addOrUpdate(Record record, RecordsFlushing recordsFlushing) {
return schemaPresenterUtils.addOrUpdate(record, getCurrentUser(), recordsFlushing);
}
protected List<BatchProcess> addOrUpdate(Record record) {
return schemaPresenterUtils.addOrUpdate(record);
}
protected List<BatchProcess> addOrUpdateWithoutUser(Record record) {
return schemaPresenterUtils.addOrUpdateWithoutUser(record);
}
protected final void delete(Record record) {
delete(record, null, true);
}
protected final void delete(Record record, String reason) {
delete(record, reason, true);
}
protected final void delete(Record record, boolean physically) {
delete(record, null, physically);
}
protected final void delete(Record record, String reason, boolean physically) {
try {
schemaPresenterUtils.delete(record, reason, physically);
} catch (RecordServicesRuntimeException_CannotLogicallyDeleteRecord exception) {
view.showErrorMessage(MessageUtils.toMessage(exception));
}
}
protected Record toRecord(RecordVO recordVO) {
return schemaPresenterUtils.toRecord(recordVO);
}
protected Record toRecord(RecordVO recordVO, boolean newMinorEmpty) {
return schemaPresenterUtils.toRecord(recordVO, newMinorEmpty);
}
protected Content toContent(ContentVersionVO contentVersionVO) {
return schemaPresenterUtils.toContent(contentVersionVO);
}
protected Content toContent(ContentVersionVO contentVersionVO, boolean newMinorEmpty) {
return schemaPresenterUtils.toContent(contentVersionVO, newMinorEmpty);
}
@Deprecated
//Use schema(schemaCode) instead
protected MetadataSchema schema() {
return schemaPresenterUtils.schema();
}
protected MetadataSchema schema(String schemaCode) {
return schemaPresenterUtils.schema(schemaCode);
}
protected MetadataSchema defaultSchema() {
return schemaPresenterUtils.defaultSchema();
}
}