/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.screens.datasource.management.client.editor.datasource.selector; import java.util.Collection; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import com.google.gwt.view.client.ListDataProvider; import org.guvnor.common.services.project.model.Project; import org.jboss.errai.bus.client.api.messaging.Message; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.common.client.api.ErrorCallback; import org.jboss.errai.common.client.api.RemoteCallback; import org.jboss.errai.ui.client.local.spi.TranslationService; import org.kie.workbench.common.screens.datamodeller.client.widgets.datasourceselector.DataSourceInfo; import org.kie.workbench.common.screens.datasource.management.client.resources.i18n.DataSourceManagementConstants; import org.kie.workbench.common.screens.datasource.management.client.util.PopupsUtil; import org.kie.workbench.common.screens.datasource.management.model.DataSourceDefInfo; import org.kie.workbench.common.screens.datasource.management.service.DataSourceDefQueryService; import org.uberfire.ext.widgets.common.client.callbacks.DefaultErrorCallback; import org.uberfire.mvp.Command; import org.uberfire.mvp.ParameterizedCommand; @ApplicationScoped public class DataSourceSelector implements DataSourceSelectorView.Presenter, org.kie.workbench.common.screens.datamodeller.client.widgets.datasourceselector.DataSourceSelector { private DataSourceSelectorView view; private PopupsUtil popupsUtil; private TranslationService translationService; private ListDataProvider<DataSourceSelectorPageRow> dataProvider = new ListDataProvider<> ( ); private ParameterizedCommand<DataSourceInfo> onSelectCommand; private Project project; private Command onCloseCommand; private Caller<DataSourceDefQueryService> queryService; public DataSourceSelector() { } @Inject public DataSourceSelector( DataSourceSelectorView view, PopupsUtil popupsUtil, TranslationService translationService, Caller<DataSourceDefQueryService> queryService ) { this.view = view; this.queryService = queryService; this.popupsUtil = popupsUtil; this.translationService = translationService; view.init( this ); dataProvider.addDataDisplay( view.getDisplay() ); } @Override public void setProjectSelection( Project project ) { this.project = project; } @Override public void setGlobalSelection() { this.project = null; } public boolean isGlobalSelection() { return project == null; } public void show(ParameterizedCommand<DataSourceInfo> onSelectCommand, Command onCloseCommand ) { this.onSelectCommand = onSelectCommand; this.onCloseCommand = onCloseCommand; if ( isGlobalSelection() ) { queryService.call( getLoadSuccessCallback(), getLoadErrorCallback() ).findGlobalDataSources( true ); } else { queryService.call( getLoadSuccessCallback(), getLoadErrorCallback() ).findProjectDataSources( project ); } } @Override public void onClose() { dataProvider.getList().clear(); if ( onCloseCommand != null ) { onCloseCommand.execute(); } } @Override public void onSelect() { if ( onSelectCommand != null ) { onSelectCommand.execute( new DataSourceInfo() { @Override public boolean isDeployed() { return view.getSelectedRow().getDataSourceDefInfo().isDeployed(); } @Override public String getJndi() { if ( view.getSelectedRow().getDataSourceDefInfo().getDeploymentInfo() != null ) { return view.getSelectedRow().getDataSourceDefInfo().getDeploymentInfo().getJndi(); } return null; } @Override public String getUuid() { return view.getSelectedRow().getDataSourceDefInfo().getUuid(); } } ); } } private RemoteCallback<Collection<DataSourceDefInfo>> getLoadSuccessCallback() { return new RemoteCallback<Collection<DataSourceDefInfo>>() { @Override public void callback( Collection<DataSourceDefInfo> dataSourceDefInfos ) { loadDataSources( dataSourceDefInfos ); } }; } private ErrorCallback<?> getLoadErrorCallback() { return new DefaultErrorCallback() { @Override public boolean error( Message message, Throwable throwable ) { popupsUtil.showErrorPopup( translationService.format( DataSourceManagementConstants.DataSourceSelector_DataSourcesLoadError ) ); onClose(); return false; } }; } private void loadDataSources( Collection<DataSourceDefInfo> dataSourceDefInfos ) { dataProvider.getList().clear(); for ( DataSourceDefInfo defInfo : dataSourceDefInfos ) { dataProvider.getList().add( new DataSourceSelectorPageRow( defInfo ) ); } dataProvider.flush(); view.show(); } }