private void addMagicLearnView(final SpellView view) {
    final MagicLearnView magicLearnView = view.addMagicLearnView(properties);
    MagicLearnPresenter learnPresenter = new MagicLearnPresenter(magicLearnView);
    learnPresenter.initPresentation(properties);
    learnPresenter.addChangeListener(
        new MagicViewListener() {
          @Override
          public void removeMagicRequested(Object[] removedSpells) {
            List<Spell> spellList = convertToList(removedSpells);
            spellConfiguration.removeSpells(spellList);
          }

          @Override
          public void addMagicRequested(Object[] addedSpells) {
            List<Spell> spellList = convertToList(addedSpells);
            spellConfiguration.addSpells(spellList);
          }
        });
    circleModel.addSelectionListener(
        newValue -> {
          showAvailableSpells(magicLearnView);
          updateCircleInView(newValue, view);
          learnPresenter.updateButtons();
        });
    spellConfiguration.addChangeListener(() -> refreshSpellListsInView(magicLearnView));
    refreshSpellListsInView(magicLearnView);
    updateCircleInView(circleModel.getSelectedCircle(), view);
    charmsModel.addCharmLearnListener(
        new CharmLearnAdapter() {
          @Override
          public void charmLearned(Charm charm) {
            learnPresenter.updateButtons();
          }

          @Override
          public void charmForgotten(Charm charm) {
            learnPresenter.updateButtons();
          }
        });
  }
 private void updateCircleInView(CircleType newValue, SpellView view) {
   view.showSelectedCircle(newValue);
 }
 public void initPresentation() {
   Collection<Identifier> circles = new ArrayList<>(circleModel.getCircles());
   view.addCircleSelection(circles, properties);
   addMagicLearnView(view);
   view.addCircleSelectionListener(circleModel::selectCircle);
 }