/*
* Copyright 2017 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.library.client.widgets;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.kie.workbench.common.screens.library.api.ProjectInfo;
import org.kie.workbench.common.screens.library.client.util.LibraryPlaces;
import org.kie.workbench.common.screens.library.client.util.ResourceUtils;
import org.kie.workbench.common.widgets.client.handlers.NewProjectHandler;
import org.kie.workbench.common.widgets.client.handlers.NewResourcePresenter;
import org.uberfire.client.mvp.UberElement;
import org.uberfire.mvp.Command;
public class NewProjectButtonWidget {
public interface View extends UberElement<NewProjectButtonWidget> {
void addNewProjectHandler(String description,
NewProjectHandler newProjectHandler);
void addNewProjectHandler(String description,
Command command);
void addHeader(String title);
String getDefaultProjectHeaderTitle();
String getQuickSetupDescription();
String getAdvancedSetupDescription();
String getOtherProjectsHeaderTitle();
}
private View view;
private ManagedInstance<NewProjectHandler> newProjectHandlers;
private org.kie.workbench.common.screens.projecteditor.client.handlers.NewProjectHandler newDefaultProjectHandler;
private NewResourcePresenter newResourcePresenter;
private LibraryPlaces libraryPlaces;
@Inject
public NewProjectButtonWidget(final View view,
final ManagedInstance<NewProjectHandler> newProjectHandlers,
final org.kie.workbench.common.screens.projecteditor.client.handlers.NewProjectHandler newDefaultProjectHandler,
final NewResourcePresenter newResourcePresenter,
final LibraryPlaces libraryPlaces) {
this.view = view;
this.newProjectHandlers = newProjectHandlers;
this.newDefaultProjectHandler = newDefaultProjectHandler;
this.newResourcePresenter = newResourcePresenter;
this.libraryPlaces = libraryPlaces;
}
@PostConstruct
public void init() {
view.init(this);
view.addHeader(view.getDefaultProjectHeaderTitle());
if (newDefaultProjectHandler.canCreate()) {
addNewProjectHandler(view.getQuickSetupDescription(),
() -> libraryPlaces.goToNewProject());
addNewProjectHandler(view.getAdvancedSetupDescription(),
newDefaultProjectHandler);
}
view.addHeader(view.getOtherProjectsHeaderTitle());
for (NewProjectHandler newProjectHandler : getNewProjectHandlers()) {
if (!ResourceUtils.isDefaultProjectHandler(newProjectHandler) && newProjectHandler.canCreate()) {
addNewProjectHandler(newProjectHandler.getDescription(),
newProjectHandler);
}
}
}
private void addNewProjectHandler(final String description,
final NewProjectHandler newProjectHandler) {
newProjectHandler.setOpenEditorOnCreation(false);
newProjectHandler.setCreationSuccessCallback(project -> {
if (project != null) {
final ProjectInfo projectInfo = new ProjectInfo(libraryPlaces.getSelectedOrganizationalUnit(),
libraryPlaces.getSelectedRepository(),
libraryPlaces.getSelectedBranch(),
project);
libraryPlaces.goToProject(projectInfo);
}
});
view.addNewProjectHandler(description,
newProjectHandler);
}
private void addNewProjectHandler(final String description,
final Command command) {
view.addNewProjectHandler(description,
command);
}
public void openImportWizard() {
libraryPlaces.goToImportProjectWizard();
}
public NewResourcePresenter getNewResourcePresenter() {
return newResourcePresenter;
}
public View getView() {
return view;
}
Iterable<NewProjectHandler> getNewProjectHandlers() {
return newProjectHandlers;
}
}