/**
   * Adds the given part to the view returned by {@link #getPanelView()}, ignoring the given {@code
   * contextId}. Subclasses that care about context id's will override this method.
   */
  @Override
  public void addPart(final WorkbenchPartPresenter part, final String contextId) {

    // special case: when new perspectives are being built up based on definitions,
    // our definition will already say it contains the given part! We should not try to add it
    // again.
    if (!definition.getParts().contains(part.getDefinition())) {
      definition.addPart(part.getDefinition());
    }
    getPanelView().addPart(part.getPartView());
  }
  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;
  }
  @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;
  }