/* * 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.server.management.client.container.config.rules; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Composite; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.TextBox; import org.gwtbootstrap3.client.ui.constants.ValidationState; 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.EventHandler; import org.jboss.errai.ui.shared.api.annotations.Templated; import org.kie.workbench.common.screens.server.management.client.resources.i18n.Constants; import org.kie.workbench.common.screens.server.management.client.util.State; import org.kie.workbench.common.screens.server.management.client.widget.NumericTextBox; import org.uberfire.ext.widgets.common.client.common.StyleHelper; @Dependent @Templated public class ContainerRulesConfigView extends Composite implements ContainerRulesConfigPresenter.View { private ContainerRulesConfigPresenter presenter; private TranslationService translationService; @DataField("container-config-alert-span") Element alert = DOM.createSpan(); @DataField("container-config-scanner-form") Element scannerForm = DOM.createDiv(); @DataField("container-config-scanner-label") Element scannerLabel = DOM.createLabel(); @Inject @DataField("container-config-interval-textbox") NumericTextBox interval; @Inject @DataField("container-config-stop-scanner") Button stopScanner; @Inject @DataField("container-config-start-scanner") Button startScanner; @Inject @DataField("container-config-scan-now") Button scanNow; @DataField("container-config-version-form") Element versionForm = DOM.createDiv(); @DataField("container-config-version-label") Element versionLabel = DOM.createLabel(); @Inject @DataField("container-config-version-textbox") TextBox version; @Inject @DataField("container-config-upgrade-button") Button upgrade; @Inject public ContainerRulesConfigView( final TranslationService translationService ) { super(); this.translationService = translationService; } private org.uberfire.mvp.Command stopScannerActive = new org.uberfire.mvp.Command() { @Override public void execute() { Scheduler.get().scheduleDeferred( new Command() { @Override public void execute() { stopScanner.setActive( true ); startScanner.setActive( false ); } } ); } }; @Override public void init( final ContainerRulesConfigPresenter presenter ) { this.presenter = presenter; } @PostConstruct public void init() { version.addChangeHandler( new ChangeHandler() { @Override public void onChange( ChangeEvent event ) { if ( !version.getText().trim().isEmpty() ) { StyleHelper.addUniqueEnumStyleName( versionForm, ValidationState.class, ValidationState.NONE ); } } } ); version.getElement().setAttribute( "placeholder", getVersionTextBoxPlaceholder() ); interval.addChangeHandler( new ChangeHandler() { @Override public void onChange( ChangeEvent event ) { if ( !interval.getText().trim().isEmpty() ) { StyleHelper.addUniqueEnumStyleName( scannerForm, ValidationState.class, ValidationState.NONE ); } } } ); interval.getElement().setAttribute( "placeholder", getIntervalTextBoxPlaceholder() ); interval.getElement().setAttribute( "data-original-title", getIntervalTextBoxDataOriginalTitle() ); } @Override public void setContent( final String interval, final String version, final State startScanner, final State stopScanner, final State scanNow, final State upgrade ) { StyleHelper.addUniqueEnumStyleName( scannerForm, ValidationState.class, ValidationState.NONE ); StyleHelper.addUniqueEnumStyleName( versionForm, ValidationState.class, ValidationState.NONE ); if ( interval == null || interval.trim().isEmpty() ) { this.interval.setText( "" ); } else { try { this.interval.setText( Integer.valueOf( interval ).toString() ); } catch ( final NumberFormatException ex ) { this.interval.setText( "" ); } } this.version.setText( version != null ? version : "" ); this.interval.setText( interval ); setStartScannerState( startScanner ); setStopScannerState( stopScanner ); setScanNowState( scanNow ); setUpgradeState( upgrade ); } @Override public void setStartScannerState( final State state ) { this.startScanner.setEnabled( state.equals( State.ENABLED ) ); this.startScanner.setActive( !state.equals( State.ENABLED ) ); } @Override public void setStopScannerState( final State state ) { this.stopScanner.setEnabled( state.equals( State.ENABLED ) ); this.stopScanner.setActive( !state.equals( State.ENABLED ) ); } @Override public void setScanNowState( final State state ) { this.scanNow.setEnabled( state.equals( State.ENABLED ) ); } @Override public void setUpgradeState( final State state ) { this.upgrade.setEnabled( state.equals( State.ENABLED ) ); } @Override public void disableActions() { startScanner.setEnabled( false ); scanNow.setEnabled( false ); stopScanner.setEnabled( false ); upgrade.setEnabled( false ); } @Override public void errorOnInterval() { startScanner.setEnabled( true ); startScanner.setActive( false ); StyleHelper.addUniqueEnumStyleName( scannerForm, ValidationState.class, ValidationState.ERROR ); interval.setFocus( true ); } @Override public String getInterval() { return interval.getText(); } @Override public String getVersion() { return version.getText(); } @Override public void setVersion( final String version ) { this.version.setText( version ); } @EventHandler("container-config-start-scanner") public void startScanner( final ClickEvent event ) { if ( startScanner.isActive() ) { return; } try { presenter.startScanner( getInterval() ); } catch ( final IllegalArgumentException ex ) { StyleHelper.addUniqueEnumStyleName( scannerForm, ValidationState.class, ValidationState.ERROR ); stopScannerActive.execute(); } } @EventHandler("container-config-stop-scanner") public void stopScanner( final ClickEvent e ) { if ( stopScanner.isActive() ) { return; } stopScannerActive.execute(); presenter.stopScanner(); } @EventHandler("container-config-scan-now") public void scanNow( final ClickEvent e ) { stopScannerActive.execute(); presenter.scanNow(); } @EventHandler("container-config-upgrade-button") public void upgrade( final ClickEvent e ) { try { presenter.upgrade( version.getText() ); } catch ( final IllegalArgumentException ex ) { StyleHelper.addUniqueEnumStyleName( versionForm, ValidationState.class, ValidationState.ERROR ); } } @Override public String getStartScannerErrorMessage() { return translationService.format( Constants.ContainerRulesConfigView_StartScannerErrorMessage ); } @Override public String getStopScannerErrorMessage() { return translationService.format( Constants.ContainerRulesConfigView_StopScannerErrorMessage ); } @Override public String getScanNowErrorMessage() { return translationService.format( Constants.ContainerRulesConfigView_ScanNowErrorMessage ); } @Override public String getUpgradeErrorMessage() { return translationService.format( Constants.ContainerRulesConfigView_UpgradeErrorMessage ); } @Override public String getUpgradeSuccessMessage() { return translationService.format( Constants.ContainerRulesConfigView_UpgradeSuccessMessage, version.getText() ); } private String getVersionTextBoxPlaceholder() { return translationService.format( Constants.ContainerRulesConfigView_VersionTextBoxPlaceholder ); } private String getIntervalTextBoxPlaceholder() { return translationService.format( Constants.ContainerRulesConfigView_IntervalTextBoxPlaceholder ); } private String getIntervalTextBoxDataOriginalTitle() { return translationService.format( Constants.ContainerRulesConfigView_IntervalTextBoxDataOriginalTitle ); } }