// Save the current state of the Workbench
  private void saveState() {

    onClose();

    final PerspectiveDefinition perspective = panelManager.getPerspective();

    if (perspective == null) {
      // On startup the Workbench has not been set to contain a perspective
      loadState();

    } else if (perspective.isTransient()) {
      // Transient Perspectives are not saved
      placeManager.closeAllPlaces();
      loadState();

    } else {
      // Save first, then close all places before loading persisted state
      wbServices
          .call(
              new RemoteCallback<Void>() {
                @Override
                public void callback(Void response) {
                  placeManager.closeAllPlaces();
                  loadState();
                }
              })
          .save(perspective);
    }
  }
  // Load the persisted state of the Workbench or use the default Perspective definition if no saved
  // state found
  private void loadState() {

    // Call OnStartup before getting the Perspective definition in case any setup is required by
    // @WorkbenchPerspective's
    onStartup(place);

    final PerspectiveDefinition perspective = getPerspective();

    if (perspective.isTransient()) {
      // Transient Perspectives are not saved and hence cannot be loaded
      initialisePerspective(perspective);

    } else {

      wbServices
          .call(
              new RemoteCallback<PerspectiveDefinition>() {
                @Override
                public void callback(PerspectiveDefinition response) {
                  if (response == null) {
                    initialisePerspective(perspective);
                  } else {
                    initialisePerspective(response);
                  }
                }
              })
          .load(perspective.getName());
    }
  }
 @Perspective
 public PerspectiveDefinition getPerspective() {
   final PerspectiveDefinition p =
       new PerspectiveDefinitionImpl(MultiListWorkbenchPanelPresenter.class.getName());
   p.setName("Jobs");
   p.getRoot().addPart(new PartDefinitionImpl(new DefaultPlaceRequest("Requests List")));
   return p;
 }
 @Perspective
 public PerspectiveDefinition buildPerspective() {
   final PerspectiveDefinition p =
       new PerspectiveDefinitionImpl(MultiListWorkbenchPanelPresenter.class.getName());
   p.setName("Simple Perspective No Context");
   p.getRoot().addPart("welcome");
   return p;
 }
  PerspectiveDefinition buildPerspective() {
    PerspectiveDefinition perspective =
        new PerspectiveDefinitionImpl(MultiListWorkbenchPanelPresenter.class.getName());
    perspective.setName("Preferences");

    final PanelDefinition actionsBar =
        new PanelDefinitionImpl(StaticWorkbenchPanelPresenter.class.getName());
    actionsBar.setHeight(80);
    actionsBar.addPart(
        new PartDefinitionImpl(
            new DefaultPlaceRequest(PreferencesCentralActionsScreen.IDENTIFIER)));

    perspective.getRoot().insertChild(CompassPosition.SOUTH, actionsBar);

    return perspective;
  }
  @Test
  public void checkPerspectiveDefinition() {
    final ServerManagementPerspective perspective = new ServerManagementPerspective();
    final PerspectiveDefinition definition = perspective.buildPerspective();

    assertNotNull(definition);

    assertEquals("ServerManagementPerspective", definition.getName());
    assertEquals(
        SimpleWorkbenchPanelPresenter.class.getName(), definition.getRoot().getPanelType());

    assertEquals(1, definition.getRoot().getParts().size());

    final PartDefinition partDefinition = definition.getRoot().getParts().iterator().next();

    assertTrue(partDefinition.getPlace() instanceof DefaultPlaceRequest);

    assertEquals("ServerManagementBrowser", partDefinition.getPlace().getIdentifier());
  }
  @Perspective
  public PerspectiveDefinition getPerspective() {
    final PerspectiveDefinition perspective =
        new PerspectiveDefinitionImpl(MultiListWorkbenchPanelPresenter.class.getName());
    perspective.setName(constants.Administration());

    perspective
        .getRoot()
        .addPart(new PartDefinitionImpl(new DefaultPlaceRequest("RepositoriesEditor")));

    final PanelDefinition west =
        new PanelDefinitionImpl(SimpleWorkbenchPanelPresenter.class.getName());
    west.setWidth(300);
    west.setMinWidth(200);
    west.addPart(new PartDefinitionImpl(new DefaultPlaceRequest("FileExplorer")));

    perspective.getRoot().insertChild(CompassPosition.WEST, west);

    return perspective;
  }