/* * 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.pages.repository; 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.gwtbootstrap3.client.ui.constants.ValidationState; import org.jboss.errai.common.client.api.Caller; 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.pages.BaseExamplesWizardPage; import org.kie.workbench.common.screens.examples.model.ExampleRepository; import org.kie.workbench.common.screens.examples.service.ExamplesService; import org.uberfire.client.callbacks.Callback; import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent; import org.uberfire.util.URIUtil; @Dependent public class RepositoryPage extends BaseExamplesWizardPage implements RepositoryPageView.Presenter { private RepositoryPageView view; private ExampleRepository stockRepository; public RepositoryPage() { //Zero-argument constructor for CDI proxies } @Inject public RepositoryPage(final RepositoryPageView view, final TranslationService translator, final Caller<ExamplesService> examplesService, final Event<WizardPageStatusChangeEvent> pageStatusChangedEvent) { super(translator, examplesService, pageStatusChangedEvent); this.view = view; } @PostConstruct public void init() { view.init(this); view.setPlaceHolder(translator.format(ExamplesScreenConstants.RepositoryPage_WizardRepositoriesPlaceHolder)); } @Override public void initialise() { view.initialise(); } @Override public String getTitle() { return translator.format(ExamplesScreenConstants.RepositoryPage_WizardSelectRepositoryPageTitle); } @Override public void prepareView() { } @Override public Widget asWidget() { return view.asWidget(); } @Override public void isComplete(final Callback<Boolean> callback) { final ExampleRepository selectedRepository = model.getSelectedRepository(); callback.callback(validateUrl(selectedRepository)); } @Override public void setPlaygroundRepository(ExampleRepository stockRepository) { this.stockRepository = stockRepository; if (stockRepository == null) { view.showRepositoryUrlInputForm(); view.setCustomRepositoryOption(); view.disableStockRepositoryOption(); model.setSelectedRepository(null); } else { view.hideRepositoryUrlInputForm(); view.setStockRepositoryOption(); model.setSelectedRepository(stockRepository); } } @Override public void playgroundRepositorySelected() { model.setSelectedRepository(stockRepository); view.hideRepositoryUrlInputForm(); view.setCustomRepositoryValue(null); pageStatusChangedEvent.fire(new WizardPageStatusChangeEvent(this)); } @Override public void onCustomRepositorySelected() { view.showRepositoryUrlInputForm(); pageStatusChangedEvent.fire(new WizardPageStatusChangeEvent(this)); } @Override public void onCustomRepositoryValueChanged() { model.setSelectedRepository(new ExampleRepository(view.getCustomRepositoryValue())); pageStatusChangedEvent.fire(new WizardPageStatusChangeEvent(this)); } private boolean validateUrl(final ExampleRepository selectedRepository) { if (selectedRepository == null) { view.setUrlGroupType(ValidationState.ERROR); view.showUrlHelpMessage(translator.format(ExamplesScreenConstants.RepositoryPage_WizardSelectRepositoryURLMandatory)); return false; } final String url = selectedRepository.getUrl(); if (url == null || url.trim().isEmpty()) { selectedRepository.setUrlValid(false); view.setUrlGroupType(ValidationState.ERROR); view.showUrlHelpMessage(translator.format(ExamplesScreenConstants.RepositoryPage_WizardSelectRepositoryURLMandatory)); return false; } else if (!isUrlValid(url)) { selectedRepository.setUrlValid(false); view.setUrlGroupType(ValidationState.ERROR); view.showUrlHelpMessage(translator.format(ExamplesScreenConstants.RepositoryPage_WizardSelectRepositoryURLFormatInvalid)); return false; } else { selectedRepository.setUrlValid(true); view.setUrlGroupType(ValidationState.NONE); view.hideUrlHelpMessage(); return true; } } boolean isUrlValid(final String url) { return URIUtil.isValid(url); } }