protected AbstractPerspective(
      @NotNull String perspectiveId,
      @NotNull PerspectiveViewImpl view,
      @NotNull PartStackPresenterFactory stackPresenterFactory,
      @NotNull PartStackViewFactory partViewFactory,
      @NotNull WorkBenchControllerFactory controllerFactory,
      @NotNull EventBus eventBus) {
    this.view = view;
    this.perspectiveId = perspectiveId;
    this.partStacks = new HashMap<>();

    PartStackView navigationView = partViewFactory.create(LEFT, view.getLeftPanel());

    leftPartController =
        controllerFactory.createController(view.getSplitPanel(), view.getNavigationPanel());
    PartStack navigationPartStack =
        stackPresenterFactory.create(navigationView, leftPartController);
    partStacks.put(NAVIGATION, navigationPartStack);

    PartStackView informationView = partViewFactory.create(BELOW, view.getBottomPanel());

    belowPartController =
        controllerFactory.createController(view.getSplitPanel(), view.getInformationPanel());
    PartStack informationStack = stackPresenterFactory.create(informationView, belowPartController);
    partStacks.put(INFORMATION, informationStack);

    PartStackView toolingView = partViewFactory.create(RIGHT, view.getRightPanel());

    rightPartController =
        controllerFactory.createController(view.getSplitPanel(), view.getToolPanel());
    PartStack toolingPartStack = stackPresenterFactory.create(toolingView, rightPartController);
    partStacks.put(TOOLING, toolingPartStack);

    /* Makes splitters much better */
    view.tuneSplitters();

    eventBus.addHandler(ActivePartChangedEvent.TYPE, this);
  }
  @Before
  public void setUp() {

    when(view.getLeftPanel()).thenReturn(panel);
    when(view.getRightPanel()).thenReturn(panel);
    when(view.getBottomPanel()).thenReturn(panel);

    when(view.getSplitPanel()).thenReturn(layoutPanel);

    when(view.getNavigationPanel()).thenReturn(simplePanel);
    when(view.getInformationPanel()).thenReturn(simpleLayoutPanel);
    when(view.getToolPanel()).thenReturn(simplePanel);

    when(controllerFactory.createController(
            Matchers.<SplitLayoutPanel>anyObject(), Matchers.<SimplePanel>anyObject()))
        .thenReturn(workBenchController);

    when(partViewFactory.create(
            Matchers.<PartStackView.TabPosition>anyObject(), Matchers.<FlowPanel>anyObject()))
        .thenReturn(partStackView);

    when(stackPresenterFactory.create(
            Matchers.<PartStackView>anyObject(), Matchers.<WorkBenchPartController>anyObject()))
        .thenReturn(partStackPresenter);

    perspective =
        new ProjectPerspective(
            view,
            editorMultiPartStackPresenter,
            stackPresenterFactory,
            partViewFactory,
            controllerFactory,
            eventBus,
            dynaProvider,
            notificationManager);
  }