/* * 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.wizard.datasource; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.enterprise.event.Event; import javax.inject.Inject; import com.google.gwt.user.client.ui.Widget; 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.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.DataSourceDef; import org.kie.workbench.common.screens.datasource.management.service.DataSourceDefEditorService; import org.uberfire.backend.vfs.Path; import org.uberfire.client.callbacks.Callback; import org.uberfire.ext.widgets.common.client.callbacks.DefaultErrorCallback; import org.uberfire.ext.widgets.core.client.wizards.AbstractWizard; import org.uberfire.ext.widgets.core.client.wizards.WizardPage; import org.uberfire.java.nio.file.FileAlreadyExistsException; import org.uberfire.mvp.Command; import org.uberfire.mvp.ParameterizedCommand; import org.uberfire.workbench.events.NotificationEvent; @Dependent public class NewDataSourceDefWizard extends AbstractWizard { private final List<WizardPage> pages = new ArrayList<>( ); private DataSourceDefPage dataSourceDefPage; private DataSourceDef dataSourceDef; private Caller<DataSourceDefEditorService> dataSourceDefService; private TranslationService translationService; private PopupsUtil popupsUtil; private Event<NotificationEvent> notification; private Project project; @Inject public NewDataSourceDefWizard( final DataSourceDefPage dataSourceDefPage, final Caller<DataSourceDefEditorService> dataSourceDefService, final TranslationService translationService, final PopupsUtil popupsUtil, final Event<NotificationEvent> notification ) { this.dataSourceDefPage = dataSourceDefPage; this.dataSourceDefService = dataSourceDefService; this.translationService = translationService; this.popupsUtil = popupsUtil; this.notification = notification; } @PostConstruct public void init() { pages.add( dataSourceDefPage ); } @Override public void start() { dataSourceDefPage.clear(); dataSourceDefPage.setComplete( false ); dataSourceDef = new DataSourceDef(); dataSourceDefPage.setDataSourceDef( dataSourceDef ); dataSourceDefPage.setProject( project ); dataSourceDefPage.loadDrivers( getLoadDriversSuccessCommand(), getLoadDriversFailureCommand() ); } @Override public List<WizardPage> getPages() { return pages; } @Override public Widget getPageWidget( int pageNumber ) { return pages.get( pageNumber ).asWidget(); } @Override public String getTitle() { return translationService.getTranslation( DataSourceManagementConstants.NewDataSourceDefWizard_title ); } @Override public int getPreferredHeight() { return 600; } @Override public int getPreferredWidth() { return 700; } @Override public void isComplete( Callback<Boolean> callback ) { dataSourceDefPage.isComplete( callback ); } @Override public void complete() { doComplete(); } public void setProject( final Project project ) { this.project = project; } public void setGlobal() { this.project = null; } private void doComplete() { if ( isGlobal() ) { dataSourceDefService.call( getCreateSuccessCallback(), getCreateErrorCallback() ).createGlobal( dataSourceDef ); } else { dataSourceDefService.call( getCreateSuccessCallback(), getCreateErrorCallback() ).create( dataSourceDef, project ); } } private RemoteCallback<Path> getCreateSuccessCallback() { return new RemoteCallback<Path>() { @Override public void callback( Path path ) { notification.fire( new NotificationEvent( translationService.format( DataSourceManagementConstants.NewDataSourceDefWizard_DataSourceCreatedMessage, path.toString() ) ) ); NewDataSourceDefWizard.super.complete(); } }; } private ErrorCallback<?> getCreateErrorCallback() { return new DefaultErrorCallback() { @Override public boolean error( Message message, Throwable throwable ) { popupsUtil.showErrorPopup( translationService.format( DataSourceManagementConstants.NewDataSourceDefWizard_DataSourceCreateErrorMessage, buildOnCreateErrorMessage( throwable ) ) ); return false; } }; } private Command getLoadDriversSuccessCommand() { return new Command() { @Override public void execute() { NewDataSourceDefWizard.super.start(); } }; } private ParameterizedCommand<Throwable> getLoadDriversFailureCommand() { return new ParameterizedCommand<Throwable>() { @Override public void execute( Throwable parameter ) { popupsUtil.showErrorPopup( translationService.format( DataSourceManagementConstants.NewDataSourceDefWizard_WizardStartErrorMessage, parameter.getMessage() ) ); } }; } private String buildOnCreateErrorMessage( Throwable t ) { if ( t instanceof FileAlreadyExistsException ) { return translationService.format( DataSourceManagementConstants.NewDataSourceDefWizard_FileExistsErrorMessage, ((FileAlreadyExistsException )t).getFile() ); } else { return t.getMessage(); } } private boolean isGlobal() { return project == null; } }