package com.constellio.app.ui.framework.navigation;
import java.io.IOException;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.model.entities.records.Record;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.schemas.SchemaUtils;
public abstract class AbstractRecordNavigationHandler implements RecordNavigationHandler {
protected transient ConstellioFactories constellioFactories;
public AbstractRecordNavigationHandler(ConstellioFactories constellioFactories) {
this.constellioFactories = constellioFactories;
initTransientObjects();
}
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
initTransientObjects();
}
private void initTransientObjects() {
if (constellioFactories == null) {
constellioFactories = ConstellioFactories.getInstance();
}
}
@Override
public boolean isViewForRecordId(String recordId) {
String schemaCode = getSchemaCodeForRecordId(recordId);
return isViewForSchemaCode(schemaCode);
}
@Override
public boolean isViewForSchemaCode(String schemaCode) {
String schemaTypeCode = getSchemaTypeCodeForSchemaCode(schemaCode);
return isViewForSchemaTypeCode(schemaTypeCode);
}
@Override
public boolean isView(RecordVO recordVO) {
String schemaCode = recordVO.getSchema().getCode();
String schemaTypeCode = getSchemaTypeCodeForSchemaCode(schemaCode);
return isViewForSchemaTypeCode(schemaTypeCode);
}
protected String getSchemaCodeForRecordId(String recordId) {
RecordServices recordServices = constellioFactories.getModelLayerFactory().newRecordServices();
Record record = recordServices.getDocumentById(recordId);
return record.getSchemaCode();
}
protected String getSchemaTypeCodeForSchemaCode(String schemaCode) {
return new SchemaUtils().getSchemaTypeCode(schemaCode);
}
@Override
public void navigateToView(String recordId) {
String schemaCode = getSchemaCodeForRecordId(recordId);
String schemaTypeCode = getSchemaTypeCodeForSchemaCode(schemaCode);
navigateToView(recordId, schemaTypeCode);
}
@Override
public void navigateToView(RecordVO recordVO) {
String schemaCode = recordVO.getSchema().getCode();
String schemaTypeCode = getSchemaTypeCodeForSchemaCode(schemaCode);
navigateToView(recordVO.getId(), schemaTypeCode);
}
protected abstract void navigateToView(String recordId, String schemaTypeCode);
}