package com.constellio.app.modules.rm.ui.builders; import java.io.IOException; import java.util.List; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.ui.entities.DocumentVO; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.entities.MetadataValueVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.model.entities.records.Content; import com.constellio.model.entities.records.ContentVersion; import com.constellio.model.entities.records.ParsedContent; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.services.contents.ContentManagerRuntimeException.ContentManagerRuntimeException_NoSuchContent; import com.constellio.model.services.factories.ModelLayerFactory; public class DocumentToVOBuilder extends RecordToVOBuilder { transient boolean parsedContentFetched; transient ParsedContent parsedContent; transient ModelLayerFactory modelLayerFactory; transient AppLayerFactory appLayerFactory; public DocumentToVOBuilder(ModelLayerFactory modelLayerFactory) { this.modelLayerFactory = modelLayerFactory; } private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); init(); } private void init() { modelLayerFactory = ConstellioFactories.getInstance().getModelLayerFactory(); appLayerFactory = ConstellioFactories.getInstance().getAppLayerFactory(); } @Override public DocumentVO build(Record record, VIEW_MODE viewMode, SessionContext sessionContext) { return (DocumentVO) super.build(record, viewMode, sessionContext); } @Override protected DocumentVO newRecordVO(String id, List<MetadataValueVO> metadataValueVOs, VIEW_MODE viewMode) { return new DocumentVO(id, metadataValueVOs, viewMode); } @Override protected Object getValue(Record record, Metadata metadata) { if (isExtractedMetadata(metadata)) { if (!parsedContentFetched) { parsedContentFetched = true; ConstellioFactories constellioFactories = ConstellioFactories.getInstance(); ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory(); RMSchemasRecordsServices rm = new RMSchemasRecordsServices(record.getCollection(), modelLayerFactory); Content content = rm.wrapDocument(record).getContent(); if (content != null) { ContentVersion contentVersion = content.getCurrentVersion(); try { parsedContent = modelLayerFactory.getContentManager().getParsedContent(contentVersion.getHash()); } catch (ContentManagerRuntimeException_NoSuchContent e) { //OK } } } } return super.getValue(record, metadata); } private boolean isExtractedMetadata(Metadata metadata) { String localCode = metadata.getLocalCode(); return localCode.equals("author") || localCode.equals("company") || localCode.equals("subject"); } }