public void openProject(Project project) {
    final ProjectImpl projectImpl = (ProjectImpl) project;
    final ProjectInformationImpl projectInformationImpl =
        projectImpl.getLookup().lookup(ProjectInformationImpl.class);
    final WorkspaceProviderImpl workspaceProviderImpl =
        project.getLookup().lookup(WorkspaceProviderImpl.class);

    if (projects.hasCurrentProject()) {
      closeCurrentProject();
    }
    projects.addProject(projectImpl);
    projects.setCurrentProject(projectImpl);
    projectInformationImpl.open();

    for (Workspace ws : project.getLookup().lookup(WorkspaceProviderImpl.class).getWorkspaces()) {
      fireWorkspaceEvent(EventType.INITIALIZE, ws);
    }

    if (!workspaceProviderImpl.hasCurrentWorkspace()) {
      if (workspaceProviderImpl.getWorkspaces().length == 0) {
        Workspace workspace = newWorkspace(project);
        openWorkspace(workspace);
      } else {
        Workspace workspace = workspaceProviderImpl.getWorkspaces()[0];
        openWorkspace(workspace);
      }
    } else {
      fireWorkspaceEvent(EventType.SELECT, workspaceProviderImpl.getCurrentWorkspace());
    }
  }
  @Override
  public void deleteWorkspace(Workspace workspace) {
    Project project = workspace.getProject();
    WorkspaceProviderImpl workspaceProvider =
        project.getLookup().lookup(WorkspaceProviderImpl.class);

    Workspace toSelectWorkspace = null;
    if (getCurrentWorkspace() == workspace) {
      toSelectWorkspace = workspaceProvider.getPrecedingWorkspace(workspace);
    }

    workspaceProvider.removeWorkspace(workspace);

    // Event
    fireWorkspaceEvent(EventType.CLOSE, workspace);

    if (getCurrentWorkspace() == workspace) {
      // Select the one before, or after
      if (toSelectWorkspace == null) {
        closeCurrentProject();
      } else {
        openWorkspace(toSelectWorkspace);
      }
    }
  }