package com.constellio.app.modules.es.ui.pages; import static com.constellio.app.ui.i18n.i18n.$; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import java.util.ArrayList; import java.util.List; import com.constellio.app.modules.es.connectors.ConnectorUtilsServices; import com.constellio.app.modules.es.model.connectors.ConnectorInstance; import com.constellio.app.modules.es.model.connectors.ConnectorType; import com.constellio.app.modules.es.model.connectors.RegisteredConnector; import com.constellio.app.modules.es.navigation.ESViews; import com.constellio.app.modules.es.services.ConnectorManager; import com.constellio.app.ui.entities.MetadataSchemaVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.MetadataSchemaToVOBuilder; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.framework.data.RecordVODataProvider; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.data.utils.ImpossibleRuntimeException; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; public class WizardConnectorInstancePresenter extends AddEditConnectorInstancePresenter { public static final String SELECT_CONNECTOR_TYPE_TAB = "selectConnectorType"; public static final String ADD_CONNECTOR_INSTANCE = "addConnectorInstance"; public WizardConnectorInstancePresenter(WizardConnectorInstanceView view) { super(view); } @Override public void forParams(String params) { RecordVODataProvider connectorTypeDataProvider = getConnectorTypeDataProvider(); ((WizardConnectorInstanceView) view).setConnectorTypeDataProvider(connectorTypeDataProvider); } RecordVODataProvider getConnectorTypeDataProvider() { List<String> metadataCodes = new ArrayList<>(); MetadataSchemaToVOBuilder schemaVOBuilder = new MetadataSchemaToVOBuilder(); SessionContext sessionContext = view.getSessionContext(); RecordToVOBuilder voBuilder = new RecordToVOBuilder(); MetadataSchemaVO schemaVO = schemaVOBuilder .build(schema(ConnectorType.DEFAULT_SCHEMA), VIEW_MODE.TABLE, metadataCodes, sessionContext); return new RecordVODataProvider(schemaVO, voBuilder, modelLayerFactory, sessionContext) { @Override protected LogicalSearchQuery getQuery() { LogicalSearchCondition condition = from(schemaType(ConnectorType.SCHEMA_TYPE)).returnAll(); return new LogicalSearchQuery().setCondition(condition).sortAsc(Schemas.SCHEMA); } }; } @Override public void cancelButtonClicked() { view.navigate().to(ESViews.class).listConnectorInstances(); } @Override public void saveButtonClicked(RecordVO recordVO) { Record record = toRecord(recordVO); ConnectorInstance<?> connectorInstance = esSchemasRecordsServices.wrapConnectorInstance(record); esSchemasRecordsServices.getConnectorManager().createConnector(connectorInstance); view.navigate().to(ESViews.class).displayConnectorInstance(connectorInstance.getId()); } public void connectorTypeSelected(String id) { setConnectorTypeId(id); Record record; if (connectorTypeId != null) { ConnectorType connectorType = esSchemasRecordsServices.getConnectorType(connectorTypeId); ConnectorInstance<?> connectorInstance = null; ConnectorManager connectorManager = esSchemasRecordsServices.getConnectorManager(); for (RegisteredConnector connector : connectorManager.getRegisteredConnectors()) { if (connector.getConnectorCode().equals(connectorType.getCode())) { ConnectorUtilsServices<?> services = connector.getServices(); connectorInstance = services.newConnectorInstance(); } } if (connectorInstance == null) { throw new ImpossibleRuntimeException( "Invalid connector type/or ConnectorUtilsServices returns null when call of newConnectorInstance"); } record = connectorInstance.getWrappedRecord(); setRecordVO(voBuilder.build(record, VIEW_MODE.FORM, view.getSessionContext())); setCurrentSchemaCode(recordVO.getSchema().getCode()); setSchemaCode(currentSchemaCode); view.setRecordVO(recordVO); } else { view.setRecordVO(null); } ((WizardConnectorInstanceView) view).refreshConnectorForm(); } @Override public String getTitle() { return $("WizardConnectorInstanceView.viewTitle"); } }