/*******************************************************************************
* 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.api.event;
import org.eclipse.che.api.project.shared.dto.ProjectDescriptor;
import com.google.gwt.event.shared.GwtEvent;
/**
* Event that describes the fact that Project Action (opened/closed) has been performed.
*
* @author Nikolay Zamosenchuk
*/
public class ProjectActionEvent extends GwtEvent<ProjectActionHandler> {
/** Type class used to register this event. */
public static Type<ProjectActionHandler> TYPE = new Type<>();
private final ProjectDescriptor project;
private final ProjectAction projectAction;
private final boolean closingBeforeOpening;
/**
* Create new {@link ProjectActionEvent}.
*
* @param project
* an instance of affected project
* @param projectAction
* the type of action
* @param closingBeforeOpening
* whether is this closing project before opening another one
*/
protected ProjectActionEvent(ProjectDescriptor project, ProjectAction projectAction, boolean closingBeforeOpening) {
this.project = project;
this.projectAction = projectAction;
this.closingBeforeOpening = closingBeforeOpening;
}
/**
* Creates a Project Opened Event.
*
* @param project
* an instance of affected project
* @see OpenProjectEvent
*/
public static ProjectActionEvent createProjectOpenedEvent(ProjectDescriptor project) {
return new ProjectActionEvent(project, ProjectAction.OPENED, false);
}
/**
* Creates a Project Closed Event.
*
* @param project
* an instance of affected project
* @see CloseCurrentProjectEvent
*/
public static ProjectActionEvent createProjectClosedEvent(ProjectDescriptor project, boolean closingBeforeOpening) {
return new ProjectActionEvent(project, ProjectAction.CLOSED, closingBeforeOpening);
}
@Override
public Type<ProjectActionHandler> getAssociatedType() {
return TYPE;
}
/** @return the instance of affected project */
public ProjectDescriptor getProject() {
return project;
}
/** @return the type of action */
public ProjectAction getProjectAction() {
return projectAction;
}
/** @return {@code true} if this is a Project Close Event that preceding opening other project. */
public boolean isCloseBeforeOpening() {
return closingBeforeOpening;
}
@Override
protected void dispatch(ProjectActionHandler handler) {
switch (projectAction) {
case OPENED:
handler.onProjectOpened(this);
break;
case CLOSED:
handler.onProjectClosed(this);
break;
default:
break;
}
}
/** Set of possible Project Actions */
public static enum ProjectAction {
OPENED, CLOSED
}
}