/* * 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.examples.client.wizard; import java.util.ArrayList; import java.util.List; import java.util.Set; 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.context.ProjectContextChangeEvent; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.common.client.api.RemoteCallback; import org.jboss.errai.ui.client.local.spi.TranslationService; import org.kie.workbench.common.screens.examples.client.resources.i18n.ExamplesScreenConstants; import org.kie.workbench.common.screens.examples.client.wizard.model.ExamplesWizardModel; import org.kie.workbench.common.screens.examples.client.wizard.pages.ExamplesWizardPage; import org.kie.workbench.common.screens.examples.client.wizard.pages.organizationalunit.OUPage; import org.kie.workbench.common.screens.examples.client.wizard.pages.project.ProjectPage; import org.kie.workbench.common.screens.examples.client.wizard.pages.repository.RepositoryPage; import org.kie.workbench.common.screens.examples.model.ExampleOrganizationalUnit; import org.kie.workbench.common.screens.examples.model.ExampleRepository; import org.kie.workbench.common.screens.examples.model.ExampleTargetRepository; import org.kie.workbench.common.screens.examples.model.ExamplesMetaData; import org.kie.workbench.common.screens.examples.service.ExamplesService; import org.uberfire.client.callbacks.Callback; import org.uberfire.ext.widgets.common.client.callbacks.HasBusyIndicatorDefaultErrorCallback; import org.uberfire.ext.widgets.common.client.common.BusyIndicatorView; import org.uberfire.ext.widgets.core.client.wizards.AbstractWizard; import org.uberfire.ext.widgets.core.client.wizards.WizardPage; /** * Wizard to import Example Repositories */ @Dependent public class ExamplesWizard extends AbstractWizard { private static final int PREFERRED_WIDTH = 800; private static final int PREFERRED_HEIGHT = 800; private ExamplesWizardModel model; private List<WizardPage> pages = new ArrayList<WizardPage>(); private RepositoryPage repositoryPage; private OUPage organizationalUnitPage; private BusyIndicatorView busyIndicatorView; private Caller<ExamplesService> examplesService; private Event<ProjectContextChangeEvent> event; private TranslationService translator; public ExamplesWizard() { //Zero parameter constructor for CDI proxies } @Inject public ExamplesWizard(final RepositoryPage repositoryPage, final ProjectPage projectPage, final OUPage organizationalUnitPage, final BusyIndicatorView busyIndicatorView, final Caller<ExamplesService> examplesService, final Event<ProjectContextChangeEvent> event, final TranslationService translator) { pages.add(repositoryPage); pages.add(projectPage); pages.add(organizationalUnitPage); this.repositoryPage = repositoryPage; this.organizationalUnitPage = organizationalUnitPage; this.busyIndicatorView = busyIndicatorView; this.examplesService = examplesService; this.event = event; this.translator = translator; model = new ExamplesWizardModel(); } @Override public void start() { for (WizardPage page : pages) { page.initialise(); ((ExamplesWizardPage) page).setModel(model); } examplesService.call(new RemoteCallback<ExamplesMetaData>() { @Override public void callback(final ExamplesMetaData metaData) { final ExampleRepository repository = metaData.getRepository(); repositoryPage.setPlaygroundRepository(repository); final Set<ExampleOrganizationalUnit> organizationalUnits = metaData.getOrganizationalUnits(); organizationalUnitPage.setOrganizationalUnits(organizationalUnits); ExamplesWizard.super.start(); } }).getMetaData(); } @Override public void close() { for (WizardPage page : pages) { ((ExamplesWizardPage) page).destroy(); } super.close(); } @Override public List<WizardPage> getPages() { return pages; } @Override public Widget getPageWidget(final int pageNumber) { WizardPage page = pages.get(pageNumber); page.prepareView(); return page.asWidget(); } @Override public String getTitle() { final String title = translator.format(ExamplesScreenConstants.ExamplesWizard_WizardTitle); return title != null && !title.isEmpty() ? title : "Import Example"; } @Override public int getPreferredHeight() { return PREFERRED_HEIGHT; } @Override public int getPreferredWidth() { return PREFERRED_WIDTH; } @Override public void isComplete(final Callback<Boolean> callback) { callback.callback(true); //only when all pages are complete we can say the wizard is complete. for (WizardPage page : this.pages) { page.isComplete(new Callback<Boolean>() { @Override public void callback(final Boolean result) { if (Boolean.FALSE.equals(result)) { callback.callback(false); } } }); } } @Override public void complete() { busyIndicatorView.showBusyIndicator(translator.format(ExamplesScreenConstants.ExamplesWizard_SettingUpExamples)); examplesService.call(new RemoteCallback<ProjectContextChangeEvent>() { @Override public void callback(final ProjectContextChangeEvent context) { busyIndicatorView.hideBusyIndicator(); ExamplesWizard.super.complete(); event.fire(context); } }, new HasBusyIndicatorDefaultErrorCallback(busyIndicatorView)).setupExamples(model.getTargetOrganizationalUnit(), model.getTargetRepository(), model.getSelectedBranch(), model.getProjects()); } public void setDefaultTargetOrganizationalUnit(final String ouName) { final ExampleOrganizationalUnit targetOrganizationalUnit = new ExampleOrganizationalUnit(ouName); this.organizationalUnitPage.setTargetOrganizationalUnit(targetOrganizationalUnit); } public void setDefaultTargetRepository(final String repositoryAlias) { final ExampleTargetRepository targetRepository = new ExampleTargetRepository(repositoryAlias); this.organizationalUnitPage.setTargetRepository(targetRepository); } }