package com.constellio.app.ui.framework.components.converters; import java.util.Locale; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.application.ConstellioUI; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.model.entities.records.Record; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesRuntimeException.NoSuchRecordWithId; import com.vaadin.data.util.converter.Converter; public class StringToRecordVOConverter implements Converter<String, RecordVO> { private static final Logger LOGGER = LoggerFactory.getLogger(StringToRecordVOConverter.class); private VIEW_MODE viewMode; public StringToRecordVOConverter(VIEW_MODE viewMode) { this.viewMode = viewMode; } @Override public RecordVO convertToModel(String value, Class<? extends RecordVO> targetType, Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { RecordVO recordVO; if (StringUtils.isNotBlank(value)) { ConstellioFactories constellioFactories = ConstellioFactories.getInstance(); ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory(); RecordServices recordServices = modelLayerFactory.newRecordServices(); try { Record record = recordServices.getDocumentById(value); recordVO = new RecordToVOBuilder().build(record, viewMode, ConstellioUI.getCurrentSessionContext()); } catch (NoSuchRecordWithId e) { LOGGER.warn(e.getMessage(), e); recordVO = null; } } else { recordVO = null; } return recordVO; } @Override public String convertToPresentation(RecordVO value, Class<? extends String> targetType, Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { return value != null ? value.getId() : null; } @Override public Class<RecordVO> getModelType() { return RecordVO.class; } @Override public Class<String> getPresentationType() { return String.class; } }