001package conexp.fx.gui.exploration;
002
003/*
004 * #%L
005 * Concept Explorer FX
006 * %%
007 * Copyright (C) 2010 - 2023 Francesco Kriegel
008 * %%
009 * This program is free software: you can redistribute it and/or modify
010 * it under the terms of the GNU General Public License as
011 * published by the Free Software Foundation, either version 3 of the
012 * License, or (at your option) any later version.
013 * 
014 * This program is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 * 
019 * You should have received a copy of the GNU General Public
020 * License along with this program.  If not, see
021 * <http://www.gnu.org/licenses/gpl-3.0.html>.
022 * #L%
023 */
024
025import java.util.Collections;
026import java.util.Set;
027
028import conexp.fx.core.algorithm.exploration.CounterExample;
029import conexp.fx.core.algorithm.exploration.Expert;
030import conexp.fx.core.context.Implication;
031import conexp.fx.core.context.MatrixContext;
032import conexp.fx.gui.dialog.FXDialog.Return;
033
034public final class HumanExpert implements Expert<String, String> {
035
036  private final MatrixContext<String, String> context;
037
038  public HumanExpert(final MatrixContext<String, String> context) {
039    super();
040    this.context = context;
041  }
042
043  @SuppressWarnings("incomplete-switch")
044  @Override
045  public final Set<CounterExample<String, String>> getCounterExamples(final Implication<String, String> implication)
046      throws InterruptedException {
047    final Return<CounterExample<String, String>> result = new CounterExampleDialog(context, implication).showAndWait();
048    switch (result.result()) {
049    case YES:
050      return Collections.emptySet();
051    case NO:
052      return Collections.singleton(result.value());
053    case CANCEL:
054      throw new InterruptedException("Attribute Exploration has been interrupted by user.");
055    }
056    return null;
057  }
058
059}