@Override
 public void profileSelectionChanged(final Optional<MutableProfile> profile) {
   okButton.setEnabled(model.isSaveAllowed());
   deleteProfile.setEnabled(model.getSelectedProfile().isPresent());
   if (profile.isPresent()) {
     final int index = profilesModel.indexOf(profile.get());
     selectionModel.setLeadSelectionIndex(index);
   } else {
     selectionModel.setLeadSelectionIndex(-1);
   }
   addNickname.setEnabled(model.getSelectedProfile().isPresent());
   editNickname.setEnabled(model.getSelectedProfile().isPresent());
   addHighlight.setEnabled(model.getSelectedProfile().isPresent());
   editHighlight.setEnabled(model.getSelectedProfile().isPresent());
   name.setEnabled(model.getSelectedProfile().isPresent());
   name.setText(model.getSelectedProfileName().orElse(""));
   nicknames.setEnabled(model.getSelectedProfile().isPresent());
   nicknamesModel.clear();
   nicknamesModel.addAll(model.getSelectedProfileNicknames().orElse(Lists.newArrayList()));
   highlights.setEnabled(model.getSelectedProfile().isPresent());
   highlightsModel.clear();
   highlightsModel.addAll(model.getSelectedProfileHighlights().orElse(Lists.newArrayList()));
   realname.setEnabled(model.getSelectedProfile().isPresent());
   realname.setText(model.getSelectedProfileRealname().orElse(""));
   ident.setEnabled(model.getSelectedProfile().isPresent());
   ident.setText(model.getSelectedProfileIdent().orElse(""));
 }
 @Override
 public void selectedProfileHighlightEdited(final String oldHighlight, final String newHighlight) {
   okButton.setEnabled(model.isSaveAllowed());
   highlightsModel.set(highlightsModel.indexOf(oldHighlight), newHighlight);
   deleteHighlight.setEnabled(model.isSelectedProfileHighlightsValid());
   editHighlight.setEnabled(model.isSelectedProfileHighlightsValid());
 }
 @Override
 public void selectedProfileNicknameEdited(final String oldNickname, final String newNickname) {
   okButton.setEnabled(model.isSaveAllowed());
   nicknamesModel.set(nicknamesModel.indexOf(oldNickname), newNickname);
   addNickname.setEnabled(model.isSelectedProfileNicknamesValid());
   editNickname.setEnabled(model.isSelectedProfileNicknamesValid());
 }
 @Override
 public void selectedProfileHighlightAdded(final String highlight) {
   okButton.setEnabled(model.isSaveAllowed());
   highlightsModel.add(highlight);
   deleteHighlight.setEnabled(model.isSelectedProfileHighlightsValid());
   editHighlight.setEnabled(model.isSelectedProfileHighlightsValid());
 }
 @Override
 public void profileRemoved(final MutableProfile profile) {
   addNickname.setEnabled(model.isProfileListValid());
   addHighlight.setEnabled(model.isProfileListValid());
   okButton.setEnabled(model.isSaveAllowed());
   profilesModel.remove(profile);
 }
 private void setupProfileHighlights(final ReorderableJList<String> highlights) {
   highlightsModel = highlights.getModel();
   highlightsModel.addAll(model.getSelectedProfileHighlights().orElse(Lists.newArrayList()));
   highlights.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
   highlights.setEnabled(model.getSelectedProfileHighlights().isPresent());
   highlights.addListSelectionListener(
       l ->
           model.setSelectedProfileSelectedHighlight(
               Optional.ofNullable(highlights.getSelectedValue())));
 }
 private void setupProfileNicknames(final ReorderableJList<String> nicknames) {
   nicknamesModel = nicknames.getModel();
   nicknamesModel.addAll(model.getSelectedProfileNicknames().orElse(Lists.newArrayList()));
   nicknames.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
   nicknames.setEnabled(model.getSelectedProfileNicknames().isPresent());
   nicknames.addListSelectionListener(
       l ->
           model.setSelectedProfileSelectedNickname(
               Optional.ofNullable(nicknames.getSelectedValue())));
 }
 private void setupProfileList(final JList<MutableProfile> profileList) {
   selectionModel = new VetoableListSelectionModel();
   profilesModel = (GenericListModel<MutableProfile>) profileList.getModel();
   profilesModel.addAll(model.getProfileList());
   profileList.setSelectionModel(selectionModel);
   selectionModel.addVetoableSelectionListener(
       e -> {
         if (!model.canSwitchProfiles()) {
           throw new PropertyVetoException("Cannot switch with invalid profile", e);
         }
       });
   profileList.addListSelectionListener(
       l -> {
         if (!selectionModel.isSelectionEmpty()) {
           model.setSelectedProfile(Optional.ofNullable(profileList.getSelectedValue()));
         }
       });
 }
 @Override
 public void selectedProfileHighlightRemoved(final String highlight) {
   okButton.setEnabled(model.isSaveAllowed());
   highlightsModel.remove(highlight);
 }
 @Override
 public void selectedProfileNicknameRemoved(final String nickname) {
   okButton.setEnabled(model.isSaveAllowed());
   nicknamesModel.remove(nickname);
 }