/* * 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.widgets.client.handlers; import java.util.List; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Style; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Label; import org.guvnor.common.services.project.model.Package; import org.gwtbootstrap3.client.ui.Column; import org.gwtbootstrap3.client.ui.FormLabel; import org.gwtbootstrap3.client.ui.HelpBlock; import org.gwtbootstrap3.client.ui.Row; import org.gwtbootstrap3.client.ui.TextBox; import org.gwtbootstrap3.client.ui.constants.ColumnSize; import org.gwtbootstrap3.client.ui.constants.ValidationState; import org.jboss.errai.common.client.ui.ElementWrapperWidget; import org.jboss.errai.ui.client.local.api.IsElement; import org.jboss.errai.ui.client.local.spi.TranslationService; import org.jboss.errai.ui.shared.api.annotations.DataField; import org.jboss.errai.ui.shared.api.annotations.Templated; import org.kie.workbench.common.widgets.client.resources.i18n.KieWorkbenchWidgetsConstants; import org.uberfire.commons.data.Pair; import org.uberfire.ext.editor.commons.client.validation.ValidatorWithReasonCallback; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.footers.ModalFooterOKCancelButtons; @Templated @ApplicationScoped public class NewResourceViewImpl implements NewResourceView, IsElement { @DataField DivElement fileNameGroup = Document.get().createDivElement(); @DataField FormLabel fileTypeLabel = new FormLabel(); @Inject @DataField TextBox fileNameTextBox; @Inject @DataField HelpBlock fileNameHelpInline; @Inject @DataField PackageListBox packageListBox; @DataField DivElement packageGroup = Document.get().createDivElement(); @Inject @DataField HelpBlock packageHelpInline; @DataField DivElement handlerExtensionsGroup = Document.get().createDivElement(); @Inject @DataField FlowPanel handlerExtensions; TranslationService translationService; BaseModal modal; private NewResourcePresenter presenter; private final Command okCommand = new Command() { @Override public void execute() { onOKButtonClick(); } }; private final Command cancelCommand = new Command() { @Override public void execute() { hide(); } }; private final ModalFooterOKCancelButtons footer = new ModalFooterOKCancelButtons( okCommand, cancelCommand ); @Inject public NewResourceViewImpl( TranslationService translationService ) { this.translationService = translationService; footer.enableOkButton( true ); } @PostConstruct public void init() { modal = new BaseModal(); modal.setBody( ElementWrapperWidget.getWidget( this.getElement() ) ); modal.add( footer ); fileNameTextBox.setPlaceholder( translationService.getTranslation( KieWorkbenchWidgetsConstants.NewResourceViewResourceNamePlaceholder ) ); fileTypeLabel.setShowRequiredIndicator( true ); } @Override public void init( final NewResourcePresenter presenter ) { this.presenter = presenter; } @Override public void show() { //Clear previous resource name fileNameTextBox.setText( "" ); clearErrors(); modal.show(); } @Override public void hide() { modal.hide(); } @Override public void setActiveHandler( final NewResourceHandler handler ) { final List<Pair<String, ? extends IsWidget>> extensions = handler.getExtensions(); final boolean showExtensions = !( extensions == null || extensions.isEmpty() ); fileTypeLabel.setText( handler.getDescription() ); packageListBox.setContext( handler.getProjectContext(), handler.supportsDefaultPackage() ); handlerExtensions.clear(); handlerExtensionsGroup.getStyle().setDisplay( showExtensions ? Style.Display.BLOCK : Style.Display.NONE ); if ( showExtensions ) { extensions.forEach( pair -> { handlerExtensions.add( pair.getK2() ); } ); } } void onOKButtonClick() { clearErrors(); //Generic validation final String fileName = fileNameTextBox.getText(); if ( fileName == null || fileName.trim().isEmpty() ) { fileNameGroup.addClassName( ValidationState.ERROR.getCssName() ); fileNameHelpInline.setText( translationService.getTranslation( KieWorkbenchWidgetsConstants.NewResourceViewFileNameIsMandatory ) ); return; } if ( packageListBox.getSelectedPackage() == null ) { packageGroup.addClassName( ValidationState.ERROR.getCssName() ); packageHelpInline.setText( translationService.getTranslation( KieWorkbenchWidgetsConstants.NewResourceViewMissingPath ) ); return; } //Specialized validation presenter.validate( fileName, new ValidatorWithReasonCallback() { @Override public void onSuccess() { presenter.makeItem( fileName ); } @Override public void onFailure() { } @Override public void onFailure( final String reason ) { fileNameGroup.addClassName( ValidationState.ERROR.getCssName() ); fileNameHelpInline.setText( reason ); } } ); } @Override public Package getSelectedPackage() { return packageListBox.getSelectedPackage(); } @Override public void setTitle( String title ) { modal.setTitle( title ); } @Override public void setResourceName( String resourceName ) { fileNameTextBox.setText( resourceName ); } protected void clearErrors() { fileNameGroup.removeClassName( ValidationState.ERROR.getCssName() ); fileNameHelpInline.clearError(); packageGroup.removeClassName( ValidationState.ERROR.getCssName() ); packageHelpInline.clearError(); } }