/*
* 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.jbpm.client.formModel;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.text.shared.Renderer;
import org.gwtbootstrap3.client.ui.ValueListBox;
import org.gwtbootstrap3.client.ui.constants.ValidationState;
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.forms.jbpm.client.resources.i18n.Constants;
import org.kie.workbench.common.forms.jbpm.model.authoring.JBPMFormModel;
import org.kie.workbench.common.forms.jbpm.model.authoring.JBPMProcessModel;
import org.kie.workbench.common.forms.jbpm.model.authoring.process.BusinessProcessFormModel;
import org.kie.workbench.common.forms.jbpm.model.authoring.task.TaskFormModel;
@Templated
public class JBPMFormModelCreationViewImpl implements JBPMFormModelCreationView,
IsElement {
@DataField
DivElement formGroup = Document.get().createDivElement();
@DataField
DivElement modelHelpBlock = Document.get().createDivElement();
@DataField
protected ValueListBox<JBPMProcessModel> processes = new ValueListBox(new Renderer<JBPMProcessModel>() {
@Override
public String render(JBPMProcessModel model) {
if (model == null) {
return "";
}
return model.getProcessFormModel().getProcessName();
}
@Override
public void render(JBPMProcessModel model,
Appendable appendable) throws IOException {
appendable.append(render(model));
}
});
@DataField
protected ValueListBox<JBPMFormModel> tasks = new ValueListBox<>(new Renderer<JBPMFormModel>() {
@Override
public String render(JBPMFormModel model) {
String result = "";
if (model != null) {
if (model instanceof BusinessProcessFormModel) {
result = translationService.getTranslation(Constants.JBPMFormModelCreationViewImplStartProcessForm);
} else if (model instanceof TaskFormModel) {
TaskFormModel taskFormModel = (TaskFormModel) model;
result = taskFormModel.getTaskName();
}
if (model.getFormName() != null && !model.getFormName().isEmpty()) {
result += " ( " + model.getFormName() + " )";
}
}
return result;
}
@Override
public void render(JBPMFormModel object,
Appendable appendable) throws IOException {
appendable.append(render(object));
}
});
protected TranslationService translationService;
protected Presenter presenter;
@Inject
public JBPMFormModelCreationViewImpl(TranslationService translationService) {
this.translationService = translationService;
}
@PostConstruct
protected void init() {
processes.addValueChangeHandler(event -> {
JBPMProcessModel model = processes.getValue();
if (model != null) {
List<JBPMFormModel> models = new ArrayList<JBPMFormModel>();
models.add(model.getProcessFormModel());
models.addAll(model.getTaskFormModels());
tasks.setValue(null);
tasks.setAcceptableValues(models);
} else {
tasks.setAcceptableValues(new ArrayList<>());
tasks.setValue(null,
true);
}
});
tasks.addValueChangeHandler(event -> {
presenter.setModel(event.getValue());
clearValidationErrors();
});
}
@Override
public void init(Presenter presenter) {
this.presenter = presenter;
}
@Override
public void setProcessModels(List<JBPMProcessModel> processModels) {
processes.setValue(null);
processes.setAcceptableValues(processModels);
}
@Override
public void reset() {
processes.setValue(null);
tasks.setValue(null);
tasks.setAcceptableValues(new ArrayList<>());
clearValidationErrors();
}
@Override
public void clearValidationErrors() {
formGroup.removeClassName(ValidationState.ERROR.getCssName());
modelHelpBlock.setInnerText("");
}
@Override
public void setErrorMessage(String errorMessage) {
formGroup.addClassName(ValidationState.ERROR.getCssName());
modelHelpBlock.setInnerText(errorMessage);
}
}