/*
* 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.forms.editor.client.handler;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import com.google.gwt.user.client.ui.IsWidget;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.ui.client.local.spi.TranslationService;
import org.kie.workbench.common.forms.editor.client.handler.formModel.FormModelsPresenter;
import org.kie.workbench.common.forms.editor.client.resources.i18n.FormEditorConstants;
import org.kie.workbench.common.forms.editor.client.type.FormDefinitionResourceType;
import org.kie.workbench.common.forms.editor.service.shared.FormEditorService;
import org.kie.workbench.common.widgets.client.handlers.DefaultNewResourceHandler;
import org.kie.workbench.common.widgets.client.handlers.NewResourcePresenter;
import org.kie.workbench.common.widgets.client.resources.i18n.CommonConstants;
import org.uberfire.backend.vfs.Path;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.commons.data.Pair;
import org.uberfire.ext.editor.commons.client.validation.ValidatorWithReasonCallback;
import org.uberfire.ext.widgets.common.client.common.BusyPopup;
import org.uberfire.ext.widgets.common.client.common.popups.errors.ErrorPopup;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.mvp.impl.PathPlaceRequest;
import org.uberfire.workbench.events.NotificationEvent;
import org.uberfire.workbench.type.ResourceTypeDefinition;
@ApplicationScoped
public class NewFormDefinitionlHandler extends DefaultNewResourceHandler {
private Caller<FormEditorService> modelerService;
private PlaceManager placeManager;
private FormDefinitionResourceType resourceType;
private Event<NotificationEvent> notificationEvent;
private TranslationService translationService;
private FormModelsPresenter formModelsPresenter;
@Inject
public NewFormDefinitionlHandler(Caller<FormEditorService> modelerService,
PlaceManager placeManager,
FormDefinitionResourceType resourceType,
Event<NotificationEvent> notificationEvent,
TranslationService translationService,
FormModelsPresenter formModelsPresenter) {
this.modelerService = modelerService;
this.placeManager = placeManager;
this.resourceType = resourceType;
this.notificationEvent = notificationEvent;
this.translationService = translationService;
this.formModelsPresenter = formModelsPresenter;
}
@PostConstruct
private void setupExtensions() {
extensions.add(new Pair<String, IsWidget>(translationService.getTranslation(FormEditorConstants.NewFormDefinitionlHandlerSelectFormUse),
formModelsPresenter));
}
@Override
public String getDescription() {
return translationService.getTranslation(FormEditorConstants.NewFormDefinitionlHandlerForm);
}
@Override
public IsWidget getIcon() {
return resourceType.getIcon();
}
@Override
public ResourceTypeDefinition getResourceType() {
return resourceType;
}
@Override
public List<Pair<String, ? extends IsWidget>> getExtensions() {
formModelsPresenter.initialize(context.getActiveProject().getRootPath());
return super.getExtensions();
}
@Override
public void validate(String baseFileName,
ValidatorWithReasonCallback callback) {
boolean isValid = formModelsPresenter.isValid();
if (!isValid) {
callback.onFailure();
} else {
super.validate(baseFileName,
callback);
}
}
@Override
public void create(org.guvnor.common.services.project.model.Package pkg,
String baseFileName,
final NewResourcePresenter presenter) {
BusyPopup.showMessage(translationService.getTranslation(FormEditorConstants.NewFormDefinitionlHandlerSelectFormUse));
modelerService.call(path -> {
BusyPopup.close();
presenter.complete();
notifySuccess();
PlaceRequest place = new PathPlaceRequest((Path) path,
"FormEditor");
placeManager.goTo(place);
},
(message, throwable) -> {
BusyPopup.close();
ErrorPopup.showMessage(CommonConstants.INSTANCE.SorryAnItemOfThatNameAlreadyExistsInTheRepositoryPleaseChooseAnother());
return false;
}
).createForm(pkg.getPackageMainResourcesPath(),
buildFileName(baseFileName,
resourceType),
formModelsPresenter.getFormModel());
}
}