/*
* 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.wizard.template;
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.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.kie.workbench.common.screens.server.management.client.util.ContentChangeHandler;
import org.kie.workbench.common.screens.server.management.service.SpecManagementService;
import org.uberfire.client.callbacks.Callback;
import org.uberfire.client.mvp.UberView;
import org.uberfire.ext.widgets.core.client.wizards.WizardPage;
import org.uberfire.ext.widgets.core.client.wizards.WizardPageStatusChangeEvent;
import static org.uberfire.commons.validation.PortablePreconditions.*;
@Dependent
public class NewTemplatePresenter implements WizardPage {
public boolean hasProcessCapability() {
return view.getProcessCapabilityCheck();
}
public String getTemplateName() {
return view.getTemplateName();
}
public interface View extends UberView<NewTemplatePresenter> {
String getTitle();
void clear();
void addContentChangeHandler( final ContentChangeHandler contentChangeHandler );
boolean getProcessCapabilityCheck();
String getTemplateName();
boolean isRuleCapabilityChecked();
boolean isProcessCapabilityChecked();
boolean isPlanningCapabilityChecked();
void errorOnTemplateName();
void errorOnTemplateName( String s );
void noErrorOnTemplateName();
void errorCapability();
void noErrorOnCapability();
void noErrors();
String getInvalidErrorMessage();
String getNewServerTemplateWizardTitle();
String getNewServerTemplateWizardSaveSuccess();
String getNewServerTemplateWizardSaveError();
}
private final View view;
private final Caller<SpecManagementService> specManagementService;
private final Event<WizardPageStatusChangeEvent> wizardPageStatusChangeEvent;
@Inject
public NewTemplatePresenter( final View view,
final Caller<SpecManagementService> specManagementService,
final Event<WizardPageStatusChangeEvent> wizardPageStatusChangeEvent ) {
this.view = view;
this.specManagementService = specManagementService;
this.wizardPageStatusChangeEvent = wizardPageStatusChangeEvent;
}
@PostConstruct
public void init() {
this.view.init( this );
}
@Override
public String getTitle() {
return view.getTitle();
}
@Override
public void isComplete( final Callback<Boolean> callback ) {
if ( isValid() ) {
specManagementService.call( new RemoteCallback<Boolean>() {
@Override
public void callback( final Boolean result ) {
if ( result.equals( Boolean.FALSE ) ) {
view.errorOnTemplateName( view.getInvalidErrorMessage() );
callback.callback( false );
} else {
callback.callback( true );
}
}
} ).isNewServerTemplateIdValid( view.getTemplateName() );
} else {
callback.callback( false );
}
}
public void addContentChangeHandler( final ContentChangeHandler contentChangeHandler ) {
checkNotNull( "contentChangeHandler", contentChangeHandler );
view.addContentChangeHandler( new ContentChangeHandler() {
@Override
public void onContentChange() {
contentChangeHandler.onContentChange();
wizardPageStatusChangeEvent.fire( new WizardPageStatusChangeEvent( NewTemplatePresenter.this ) );
}
} );
}
@Override
public void initialise() {
}
@Override
public void prepareView() {
}
@Override
public Widget asWidget() {
return view.asWidget();
}
public boolean isValid() {
boolean hasError = false;
if ( isTemplateNameValid() ) {
view.noErrorOnTemplateName();
} else {
view.errorOnTemplateName();
hasError = true;
}
if ( isCapabilityValid() ) {
view.noErrorOnCapability();
} else {
view.errorCapability();
hasError = true;
}
return !hasError;
}
public boolean isTemplateNameValid() {
final String templateName = view.getTemplateName();
return templateName == null ? false : !templateName.trim().isEmpty();
}
public boolean isCapabilityValid() {
if ( view.isPlanningCapabilityChecked() && view.isRuleCapabilityChecked() ) {
return true;
}
if ( view.isProcessCapabilityChecked() || view.isRuleCapabilityChecked() ) {
return true;
}
return false;
}
public void clear() {
view.clear();
}
public boolean isRuleCapabilityChecked() {
return view.isRuleCapabilityChecked();
}
public boolean isProcessCapabilityChecked() {
return view.isProcessCapabilityChecked();
}
public boolean isPlanningCapabilityChecked() {
return view.isPlanningCapabilityChecked();
}
public View getView() {
return this.view;
}
}