package com.constellio.app.ui.pages.management.labels; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.services.borrowingServices.BorrowingServices; import com.constellio.app.modules.rm.ui.components.document.fields.CustomDocumentField; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.rm.wrappers.PrintableLabel; import com.constellio.app.modules.rm.wrappers.type.ContainerRecordType; import com.constellio.app.ui.entities.MetadataSchemaVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.builders.MetadataSchemaToVOBuilder; import com.constellio.app.ui.framework.builders.MetadataSchemaTypeToVOBuilder; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.framework.data.RecordVODataProvider; import com.constellio.app.ui.framework.data.SchemaTypeVODataProvider; import com.constellio.app.ui.pages.base.SchemaPresenterUtils; import com.constellio.app.ui.pages.base.SingleSchemaBasePresenter; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.extensions.ModelLayerCollectionExtensions; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; import org.apache.commons.lang3.StringUtils; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; /** * Created by Marco on 2017-01-19. */ public class AddEditLabelPresenter extends SingleSchemaBasePresenter<AddEditLabelView> { private MetadataSchemaToVOBuilder schemaVOBuilder; private transient RMConfigs rmConfigs; private transient RMSchemasRecordsServices rmSchemasRecordsServices; private transient BorrowingServices borrowingServices; private transient MetadataSchemasManager metadataSchemasManager; private transient RecordServices recordServices; private transient ModelLayerCollectionExtensions extensions; protected RecordVO container; public AddEditLabelPresenter(AddEditLabelView view) { super(view); initTransientObjects(); } public RecordVO getRecordVO(String id, RecordVO.VIEW_MODE mode) { LogicalSearchCondition condition = from(modelLayerFactory.getMetadataSchemasManager().getSchemaTypes(collection).getSchema(PrintableLabel.SCHEMA_NAME)).where(Schemas.IDENTIFIER).isEqualTo(id); Record r = searchServices().searchSingleResult(condition); RecordToVOBuilder voBuilder = new RecordToVOBuilder(); return voBuilder.build(r, mode, view.getSessionContext()); } private void initTransientObjects() { schemaVOBuilder = new MetadataSchemaToVOBuilder(); rmSchemasRecordsServices = new RMSchemasRecordsServices(collection, appLayerFactory); borrowingServices = new BorrowingServices(collection, modelLayerFactory); metadataSchemasManager = modelLayerFactory.getMetadataSchemasManager(); recordServices = modelLayerFactory.newRecordServices(); extensions = modelLayerFactory.getExtensions().forCollection(collection); rmConfigs = new RMConfigs(modelLayerFactory.getSystemConfigurationsManager()); } @Override protected boolean hasPageAccess(String params, User user) { return true; } public RecordVODataProvider getLabelFolderDataProvider() { final MetadataSchemaVO labelSchemaVo = schemaVOBuilder .build(modelLayerFactory.getMetadataSchemasManager().getSchemaTypes(collection).getSchema(PrintableLabel.DEFAULT_SCHEMA), RecordVO.VIEW_MODE.TABLE, view.getSessionContext()); return new RecordVODataProvider(labelSchemaVo, new RecordToVOBuilder(), modelLayerFactory, view.getSessionContext()) { @Override protected LogicalSearchQuery getQuery() { MetadataSchema schema = modelLayerFactory.getMetadataSchemasManager().getSchemaTypes(collection).getSchema(PrintableLabel.SCHEMA_NAME); return new LogicalSearchQuery( from(modelLayerFactory.getMetadataSchemasManager().getSchemaTypes(collection).getSchema(PrintableLabel.SCHEMA_NAME)) .where(schema.getMetadata(PrintableLabel.TYPE_LABEL)).isEqualTo(Folder.SCHEMA_TYPE)); } }; } public RecordVODataProvider getLabelContainerDataProvider() { final MetadataSchemaVO labelSchemaVo = schemaVOBuilder .build(modelLayerFactory.getMetadataSchemasManager().getSchemaTypes(collection).getSchema(PrintableLabel.DEFAULT_SCHEMA), RecordVO.VIEW_MODE.TABLE, view.getSessionContext()); return new RecordVODataProvider(labelSchemaVo, new RecordToVOBuilder(), modelLayerFactory, view.getSessionContext()) { @Override protected LogicalSearchQuery getQuery() { MetadataSchema schema = modelLayerFactory.getMetadataSchemasManager().getSchemaTypes(collection).getSchema(PrintableLabel.SCHEMA_NAME); return new LogicalSearchQuery( from(modelLayerFactory.getMetadataSchemasManager().getSchemaTypes(collection).getSchema(PrintableLabel.SCHEMA_NAME)) .where(schema.getMetadata(PrintableLabel.TYPE_LABEL)).isEqualTo(ContainerRecord.SCHEMA_TYPE)); } }; } public void addLabelButtonClicked() { view.navigate().to().addLabel(); } public void saveButtonClicked(RecordVO rvo) throws Exception { RecordServices rs = appLayerFactory.getModelLayerFactory().newRecordServices(); SchemaPresenterUtils utils = new SchemaPresenterUtils(PrintableLabel.SCHEMA_NAME, view.getConstellioFactories(), view.getSessionContext()); Record record = utils.toRecord(rvo); record.set(metadataSchemasManager.getSchemaTypes(collection).getMetadata(PrintableLabel.SCHEMA_NAME + "_" + PrintableLabel.ISDELETABLE), true); Transaction trans = new Transaction(); trans.update(record); rs.execute(trans); view.navigate().to().previousView(); } public void cancelButtonClicked() { view.navigate().to().previousView(); } public void customFieldValueChanged(CustomDocumentField<?> field) { } @Override protected Record newRecord() { super.setSchemaCode(PrintableLabel.SCHEMA_NAME); Record record = super.newRecord(); PrintableLabel report = rmSchemasRecordsServices.wrapPrintableLabel(record); return record; } public SchemaTypeVODataProvider getDataProvider() { return new SchemaTypeVODataProvider(new MetadataSchemaTypeToVOBuilder(), appLayerFactory, collection); } public void editButtonClicked(RecordVO record, String schema) { view.navigate().to().editLabel(record.getId()); } public RecordVO getRecordsWithIndex(String schema, String itemId) { RecordVODataProvider dataProvider = schema.equals(Folder.SCHEMA_TYPE) ? this.getLabelFolderDataProvider() : this.getLabelContainerDataProvider(); RecordVO records = dataProvider.getRecordVO(Integer.parseInt(itemId)); return records; } public void displayButtonClicked(RecordVO record, String schema) { view.navigate().to().viewLabel(record.getId()); } public void typeSelected(String type) { String newSchemaCode = getLinkedSchemaCodeOf(type); if (container.getSchema().getCode().equals(newSchemaCode)) { return; } // setSchemaCode(newSchemaCode); // container = copyMetadataToSchema(view.getUpdatedContainer(), newSchemaCode); // container.set(ContainerRecord.TYPE, type); // view.reloadWithContainer(container); } private String getLinkedSchemaCodeOf(String id) { String linkedSchemaCode; ContainerRecordType type = new RMSchemasRecordsServices(view.getCollection(), appLayerFactory).getContainerRecordType(id); if (type == null || StringUtils.isBlank(type.getLinkedSchema())) { linkedSchemaCode = ContainerRecord.DEFAULT_SCHEMA; } else { linkedSchemaCode = type.getLinkedSchema(); } return linkedSchemaCode; } public void removeRecord(String itemId, String schema) { SchemaPresenterUtils utils = new SchemaPresenterUtils(PrintableLabel.SCHEMA_NAME, view.getConstellioFactories(), view.getSessionContext()); Record record = utils.toRecord(this.getRecordsWithIndex(schema, itemId)); delete(record); view.navigate().to().manageLabels(); } public void backButtonClicked() { view.navigate().to().previousView(); } }