/*
* 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.formModel;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.kie.workbench.common.forms.editor.client.handler.formModel.container.FormModelCreationContainer;
import org.kie.workbench.common.forms.model.FormModel;
import org.uberfire.backend.vfs.Path;
import org.uberfire.commons.validation.PortablePreconditions;
@Dependent
public class FormModelsPresenter implements IsWidget {
protected FormModelsView view;
protected List<FormModelCreationContainer> containers;
protected FormModelCreationContainer currentManager;
protected ManagedInstance<FormModelCreationContainer> containerInstance;
protected ManagedInstance<FormModelCreationViewManager> modelManagerInstance;
@Inject
public FormModelsPresenter(FormModelsView view,
ManagedInstance<FormModelCreationContainer> containerInstance,
ManagedInstance<FormModelCreationViewManager> modelManagerInstance) {
this.view = view;
this.containerInstance = containerInstance;
this.modelManagerInstance = modelManagerInstance;
}
@PostConstruct
protected void init() {
containers = getRegisteredCreationManagers();
containers.sort(Comparator.comparingInt(o -> o.getCreationViewManager().getPriority()));
view.setCreationViews(containers);
}
protected List<FormModelCreationContainer> getRegisteredCreationManagers() {
List<FormModelCreationContainer> registeredContainers = new ArrayList<>();
modelManagerInstance.forEach(modelManager -> {
FormModelCreationContainer container = containerInstance.get();
container.setup(modelManager,
this::selectContainer);
registeredContainers.add(container);
});
return registeredContainers;
}
public void initialize(Path projectPath) {
view.reset();
currentManager = containers.get(0);
currentManager.selectManager();
containers.forEach(container -> {
container.initData(projectPath);
});
}
public boolean isValid() {
return currentManager.isValid();
}
public FormModel getFormModel() {
return currentManager.getCreationViewManager().getFormModel();
}
public void selectContainer(FormModelCreationContainer container) {
PortablePreconditions.checkNotNull("container",
container);
if (currentManager != null) {
currentManager.hideCreationView();
}
currentManager = container;
currentManager.showCreationView();
}
@Override
public Widget asWidget() {
return view.asWidget();
}
}