/* * Copyright 2012 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.guvnor.structure.client.editors.repository.clone; import javax.enterprise.context.Dependent; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.event.logical.shared.HasCloseHandlers; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Widget; import org.guvnor.structure.client.resources.i18n.CommonConstants; import org.guvnor.structure.organizationalunit.OrganizationalUnit; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.CheckBox; import org.gwtbootstrap3.client.ui.FormGroup; import org.gwtbootstrap3.client.ui.FormLabel; import org.gwtbootstrap3.client.ui.HelpBlock; import org.gwtbootstrap3.client.ui.Input; import org.gwtbootstrap3.client.ui.TextBox; import org.gwtbootstrap3.client.ui.constants.ValidationState; import org.gwtbootstrap3.extras.select.client.ui.Option; import org.gwtbootstrap3.extras.select.client.ui.Select; import org.uberfire.ext.widgets.common.client.common.BusyPopup; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.errors.ErrorPopup; import org.uberfire.ext.widgets.core.client.resources.i18n.CoreConstants; @Dependent public class CloneRepositoryViewImpl extends BaseModal implements CloneRepositoryView, HasCloseHandlers<CloneRepositoryViewImpl> { interface CloneRepositoryFormBinder extends UiBinder<Widget, CloneRepositoryViewImpl> { } private CloneRepositoryView.Presenter presenter; private static CloneRepositoryFormBinder uiBinder = GWT.create( CloneRepositoryFormBinder.class ); @UiField Button clone; @UiField Button cancel; @UiField FormGroup organizationalUnitGroup; @UiField Select organizationalUnitDropdown; @UiField HelpBlock organizationalUnitHelpInline; @UiField FormGroup nameGroup; @UiField TextBox nameTextBox; @UiField HelpBlock nameHelpInline; @UiField FormGroup urlGroup; @UiField TextBox gitURLTextBox; @UiField HelpBlock urlHelpInline; @UiField TextBox usernameTextBox; @UiField Input passwordTextBox; @UiField FormLabel ouLabel; @UiField BaseModal popup; @UiField FormGroup managedReposiotryGroup; @UiField CheckBox managedRepository; @UiHandler("clone") public void onCloneClick( final ClickEvent e ) { presenter.handleCloneClick(); } @UiHandler("cancel") public void onCancelClick( final ClickEvent e ) { presenter.handleCancelClick(); } @Override public void init( final CloneRepositoryView.Presenter presenter, final boolean isOuMandatory ) { this.presenter = presenter; setBody( uiBinder.createAndBindUi( this ) ); setTitle( CoreConstants.INSTANCE.CloneRepository() ); ouLabel.setShowRequiredIndicator( isOuMandatory ); nameTextBox.addKeyPressHandler( new KeyPressHandler() { @Override public void onKeyPress( final KeyPressEvent event ) { nameGroup.setValidationState( ValidationState.NONE ); nameHelpInline.setText( "" ); } } ); organizationalUnitDropdown.addValueChangeHandler( e -> { organizationalUnitGroup.setValidationState( ValidationState.NONE ); organizationalUnitHelpInline.setText( "" ); } ); gitURLTextBox.addKeyPressHandler( new KeyPressHandler() { @Override public void onKeyPress( final KeyPressEvent event ) { urlGroup.setValidationState( ValidationState.NONE ); urlHelpInline.setText( "" ); } } ); } @Override public void addOrganizationalUnitSelectEntry() { final Option option = new Option(); option.setText( CoreConstants.INSTANCE.SelectEntry() ); organizationalUnitDropdown.add( option ); organizationalUnitDropdown.refresh(); } @Override public void addOrganizationalUnit( final OrganizationalUnit ou ) { final String text = ou.getName(); final String value = ou.getName(); final Option option = new Option(); option.setText( text ); option.setValue( value ); organizationalUnitDropdown.add( option ); organizationalUnitDropdown.refresh(); } @Override public void deleteOrganizationalUnit( final OrganizationalUnit ou ) { Option optToDelete = null; for ( int i = 0; i < organizationalUnitDropdown.getWidgetCount(); i++ ) { final Widget w = organizationalUnitDropdown.getWidget( i ); if ( w instanceof Option ) { final Option o = (Option) w; if ( o.getText().equals( ou.getName() ) ) { optToDelete = o; break; } } } if ( optToDelete != null ) { organizationalUnitDropdown.remove( optToDelete ); organizationalUnitDropdown.refresh(); } } @Override public String getSelectedOrganizationalUnit() { return organizationalUnitDropdown.getValue(); } @Override public boolean isGitUrlEmpty() { return gitURLTextBox.getText() == null || gitURLTextBox.getText().trim().isEmpty(); } @Override public boolean isNameEmpty() { return nameTextBox.getText() == null || nameTextBox.getText().trim().isEmpty(); } @Override public String getGitUrl() { return gitURLTextBox.getText().trim(); } @Override public String getUsername() { return usernameTextBox.getText(); } @Override public String getPassword() { return passwordTextBox.getText(); } @Override public String getName() { return nameTextBox.getText(); } @Override public void setName( final String name ) { nameTextBox.setText( name ); } @Override public void showUrlHelpMandatoryMessage() { urlHelpInline.setText( CoreConstants.INSTANCE.URLMandatory() ); } @Override public void showUrlHelpInvalidFormatMessage() { urlHelpInline.setText( CoreConstants.INSTANCE.InvalidUrlFormat() ); } @Override public void setUrlGroupType( final ValidationState state ) { urlGroup.setValidationState( state ); } @Override public void showNameHelpMandatoryMessage() { nameHelpInline.setText( CoreConstants.INSTANCE.RepositoryNaneMandatory() ); } @Override public void setNameGroupType( final ValidationState state ) { nameGroup.setValidationState( state ); } @Override public void showOrganizationalUnitHelpMandatoryMessage() { organizationalUnitHelpInline.setText( CoreConstants.INSTANCE.OrganizationalUnitMandatory() ); } @Override public void setOrganizationalUnitGroupType( final ValidationState state ) { organizationalUnitGroup.setValidationState( state ); } @Override public void setNameEnabled( final boolean enabled ) { nameTextBox.setEnabled( enabled ); } @Override public void setOrganizationalUnitEnabled( final boolean enabled ) { organizationalUnitDropdown.setEnabled( enabled ); organizationalUnitDropdown.refresh(); } @Override public void setGitUrlEnabled( final boolean enabled ) { gitURLTextBox.setEnabled( enabled ); } @Override public void setUsernameEnabled( final boolean enabled ) { usernameTextBox.setEnabled( enabled ); } @Override public void setPasswordEnabled( final boolean enabled ) { passwordTextBox.setEnabled( enabled ); } @Override public void setCloneEnabled( final boolean enabled ) { clone.setEnabled( enabled ); } @Override public void setCancelEnabled( final boolean enabled ) { cancel.setEnabled( enabled ); } @Override public void setPopupCloseVisible( final boolean closeVisible ) { setClosable( closeVisible ); } @Override public void showBusyPopupMessage() { BusyPopup.showMessage( CoreConstants.INSTANCE.Cloning() ); } @Override public void closeBusyPopup() { BusyPopup.close(); } @Override public boolean showAgreeNormalizeNameWindow( final String normalizedName ) { return Window.confirm( CoreConstants.INSTANCE.RepositoryNameInvalid() + " \"" + normalizedName + "\". " + CoreConstants.INSTANCE.DoYouAgree() ); } @Override public void alertRepositoryCloned() { Window.alert( CoreConstants.INSTANCE.RepoCloneSuccess() + "\n\n" + CommonConstants.INSTANCE.IndexClonedRepositoryWarning() ); } @Override public void errorRepositoryAlreadyExist() { ErrorPopup.showMessage( CoreConstants.INSTANCE.RepoAlreadyExists() ); } @Override public void errorCloneRepositoryFail( final Throwable cause ) { ErrorPopup.showMessage( CommonConstants.INSTANCE.RepoCloneFail() + " \n" + cause.getMessage() ); } @Override public void errorLoadOrganizationalUnitsFail( final Throwable cause ) { ErrorPopup.showMessage( CoreConstants.INSTANCE.CantLoadOrganizationalUnits() + " \n" + cause.getMessage() ); } @Override public HandlerRegistration addCloseHandler( final CloseHandler<CloneRepositoryViewImpl> handler ) { return addHandler( handler, CloseEvent.getType() ); } @Override public void reset() { nameTextBox.setText( "" ); nameGroup.setValidationState( ValidationState.NONE ); nameHelpInline.setText( "" ); organizationalUnitDropdown.setValue( "" ); organizationalUnitDropdown.refresh(); organizationalUnitGroup.setValidationState( ValidationState.NONE ); organizationalUnitHelpInline.setText( "" ); gitURLTextBox.setText( "" ); urlGroup.setValidationState( ValidationState.NONE ); urlHelpInline.setText( "" ); usernameTextBox.setText( "" ); passwordTextBox.setText( "" ); managedRepository.setValue(Boolean.FALSE); } @Override public boolean isManagedRepository() { return managedRepository.getValue(); } @Override public void enableManagedRepoCreation( boolean enabled ) { managedReposiotryGroup.setVisible( enabled ); } @Override public void show() { popup.show(); } @Override public void hide() { popup.hide(); CloseEvent.fire( this, this ); } }