package com.constellio.app.modules.rm.ui.components.container;
import com.constellio.app.modules.rm.constants.RMPermissionsTo;
import com.constellio.app.modules.rm.ui.components.RMRecordFieldFactory;
import com.constellio.app.modules.rm.ui.components.container.fields.ContainerStorageSpaceLookupField;
import com.constellio.app.modules.rm.ui.components.folder.fields.CustomFolderField;
import com.constellio.app.modules.rm.ui.pages.containers.edit.AddEditContainerPresenter;
import com.constellio.app.modules.rm.wrappers.ContainerRecord;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.entities.RecordVO;
import com.vaadin.ui.Field;
public class ContainerFieldFactory extends RMRecordFieldFactory {
private String containerRecordType;
private Double containerCapacity;
private AddEditContainerPresenter presenter;
public ContainerFieldFactory(String containerRecordType, Double containerCapacity, AddEditContainerPresenter presenter) {
this.containerRecordType = containerRecordType;
this.containerCapacity = containerCapacity;
this.presenter = presenter;
}
@Override
public Field<?> build(RecordVO recordVO, MetadataVO metadataVO) {
Field<?> field;
switch (metadataVO.getLocalCode()) {
case ContainerRecord.STORAGE_SPACE:
field = new ContainerStorageSpaceLookupField(containerRecordType, containerCapacity, presenter);
if(!presenter.getCurrentUser().has(RMPermissionsTo.MANAGE_STORAGE_SPACES).globally()) {
field.setVisible(false);
field.setEnabled(false);
}
break;
default:
field = super.build(recordVO, metadataVO);
}
if (field instanceof CustomFolderField) {
postBuild(field, recordVO, metadataVO);
}
return field;
}
public ContainerStorageSpaceLookupField rebuildContainerStorageSpaceLookupField(RecordVO containerVo, AddEditContainerPresenter presenter) {
ContainerStorageSpaceLookupField field = new ContainerStorageSpaceLookupField(
(String) containerVo.get(ContainerRecord.TYPE), (Double) containerVo.get(ContainerRecord.CAPACITY), presenter);
postBuild(field, containerVo, containerVo.getMetadata(ContainerRecord.STORAGE_SPACE));
return field;
}
}