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 newProject() {
   closeCurrentProject();
   ProjectImpl project = new ProjectImpl(projects.nextProjectId());
   projects.addProject(project);
   openProject(project);
 }