/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.openproject;
import org.eclipse.che.api.project.gwt.client.ProjectServiceClient;
import org.eclipse.che.api.project.shared.dto.ProjectReference;
import org.eclipse.che.ide.api.event.OpenProjectEvent;
import org.eclipse.che.ide.collections.Array;
import org.eclipse.che.ide.rest.AsyncRequestCallback;
import org.eclipse.che.ide.rest.DtoUnmarshallerFactory;
import org.eclipse.che.ide.util.loging.Log;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
/**
* Provides opening project.
*
* @author Andrey Plotnikov
*/
@Singleton
public class OpenProjectPresenter implements OpenProjectView.ActionDelegate {
private DtoUnmarshallerFactory dtoUnmarshallerFactory;
private ProjectServiceClient projectServiceClient;
private EventBus eventBus;
private OpenProjectView view;
private ProjectReference selectedProject;
/** Create presenter. */
@Inject
protected OpenProjectPresenter(OpenProjectView view,
DtoUnmarshallerFactory dtoUnmarshallerFactory,
ProjectServiceClient projectServiceClient,
EventBus eventBus) {
this.view = view;
this.dtoUnmarshallerFactory = dtoUnmarshallerFactory;
this.projectServiceClient = projectServiceClient;
this.eventBus = eventBus;
this.view.setDelegate(this);
updateComponents();
}
/** Updates change workspace view components. */
private void updateComponents() {
view.setOpenButtonEnabled(selectedProject != null);
}
/** {@inheritDoc} */
@Override
public void onOpenClicked() {
eventBus.fireEvent(new OpenProjectEvent(selectedProject.getName()));
view.close();
}
/** {@inheritDoc} */
@Override
public void onCancelClicked() {
view.close();
}
/** {@inheritDoc} */
@Override
public void selectedProject(ProjectReference projectName) {
this.selectedProject = projectName;
updateComponents();
}
/** Show dialog. */
public void showDialog() {
projectServiceClient.getProjects(
new AsyncRequestCallback<Array<ProjectReference>>(dtoUnmarshallerFactory.newArrayUnmarshaller(ProjectReference.class)) {
@Override
protected void onSuccess(Array<ProjectReference> result) {
view.setProjects(result);
view.showDialog();
}
@Override
protected void onFailure(Throwable throwable) {
Log.error(OpenProjectPresenter.class, "Can not get list of projects", throwable);
}
});
}
}