/* * Copyright 2015 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. * * 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.projecteditor.client.handlers; import com.google.gwt.core.client.Callback; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.IsWidget; import org.guvnor.asset.management.model.RepositoryStructureModel; import org.guvnor.asset.management.service.RepositoryStructureService; import org.guvnor.common.services.project.client.security.ProjectController; import org.guvnor.common.services.project.context.ProjectContext; import org.guvnor.common.services.project.model.Package; import org.guvnor.common.services.project.model.Project; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.common.client.api.RemoteCallback; import org.kie.workbench.common.screens.projecteditor.client.resources.ProjectEditorResources; import org.kie.workbench.common.screens.projecteditor.client.wizard.NewProjectWizard; import org.kie.workbench.common.screens.projecteditor.client.wizard.POMBuilder; import org.kie.workbench.common.widgets.client.handlers.NewResourcePresenter; import org.uberfire.commons.data.Pair; import org.uberfire.ext.editor.commons.client.validation.ValidatorWithReasonCallback; import org.uberfire.mvp.Command; import org.uberfire.workbench.type.AnyResourceTypeDefinition; import org.uberfire.workbench.type.ResourceTypeDefinition; import javax.enterprise.context.Dependent; import javax.inject.Inject; import java.util.Collections; import java.util.List; /** * Handler for the creation of new Projects */ @Dependent public class NewProjectHandler implements org.kie.workbench.common.widgets.client.handlers.NewProjectHandler { private NewProjectHandlerView view; private ProjectContext context; private NewProjectWizard wizard; private Caller<RepositoryStructureService> repoStructureService; private ProjectController projectController; //We don't really need this for Packages but it's required by DefaultNewResourceHandler private AnyResourceTypeDefinition resourceType; private boolean openEditorOnCreation = true; private org.uberfire.client.callbacks.Callback<Project> creationSuccessCallback; public NewProjectHandler() { //Zero argument constructor for CDI proxies } @Inject public NewProjectHandler(final NewProjectHandlerView view, final ProjectContext context, final NewProjectWizard wizard, final Caller<RepositoryStructureService> repoStructureService, final ProjectController projectController, final AnyResourceTypeDefinition resourceType) { this.view = view; this.context = context; this.wizard = wizard; this.repoStructureService = repoStructureService; this.projectController = projectController; this.resourceType = resourceType; } @Override public List<Pair<String, ? extends IsWidget>> getExtensions() { return Collections.emptyList(); } @Override public String getDescription() { return ProjectEditorResources.CONSTANTS.newProjectDescription(); } @Override public IsWidget getIcon() { return new Image(ProjectEditorResources.INSTANCE.newProjectIcon()); } @Override public ResourceTypeDefinition getResourceType() { return resourceType; } @Override public boolean canCreate() { return projectController.canCreateProjects(); } @Override public void create(final Package pkg, final String projectName, final NewResourcePresenter presenter) { //This is not supported by the NewProjectHandler. It is invoked via NewResourceView that has bypassed for NewProjectHandler throw new UnsupportedOperationException(); } @Override public void validate(final String projectName, final ValidatorWithReasonCallback callback) { //This is not supported by the NewProjectHandler. It is invoked via NewResourceView that has bypassed for NewProjectHandler throw new UnsupportedOperationException(); } @Override public void acceptContext(final Callback<Boolean, Void> response) { if (context.getActiveRepository() != null) { //You can always create a new Project (provided a repository has been selected) repoStructureService.call(new RemoteCallback<RepositoryStructureModel>() { @Override public void callback(RepositoryStructureModel repoModel) { if (repoModel != null && repoModel.isManaged()) { boolean isMultiModule = repoModel.isMultiModule(); response.onSuccess(isMultiModule); } else { response.onSuccess(true); } } }).load(context.getActiveRepository(), context.getActiveBranch()); } else { response.onSuccess(false); } } @Override public Command getCommand(final NewResourcePresenter newResourcePresenter) { return new Command() { @Override public void execute() { if (context.getActiveRepository() != null) { repoStructureService.call(new RemoteCallback<RepositoryStructureModel>() { @Override public void callback(final RepositoryStructureModel repositoryStructureModel) { POMBuilder builder = new POMBuilder(); if (repositoryStructureModel != null && repositoryStructureModel.isManaged()) { builder.setProjectName("") .setGroupId(repositoryStructureModel.getPOM().getGav().getGroupId()) .setVersion(repositoryStructureModel.getPOM().getGav().getVersion()); } else { builder.setProjectName("") .setGroupId(context.getActiveOrganizationalUnit().getDefaultGroupId()); } wizard.initialise(builder.build()); wizard.start(creationSuccessCallback, openEditorOnCreation); } }).load(context.getActiveRepository(), context.getActiveBranch()); } else { view.showNoRepositorySelectedPleaseSelectARepository(); } } }; } @Override public ProjectContext getProjectContext() { return context; } @Override public void setCreationSuccessCallback(final org.uberfire.client.callbacks.Callback<Project> creationSuccessCallback) { this.creationSuccessCallback = creationSuccessCallback; } @Override public void setOpenEditorOnCreation(final boolean openEditorOnCreation) { this.openEditorOnCreation = openEditorOnCreation; } }