package de.lmu.ifi.dbs.elki.gui.multistep.panels;
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
Copyright (C) 2014
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
import java.lang.ref.WeakReference;
import de.lmu.ifi.dbs.elki.database.Database;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
/**
* Panel to handle data processing
*
* @author Erich Schubert
*/
public class AlgorithmTabPanel extends ParameterTabPanel {
/**
* Serial version.
*/
private static final long serialVersionUID = 1L;
/**
* The data input configured
*/
private AlgorithmStep algorithms = null;
/**
* Database we ran last onn
*/
private WeakReference> basedOnDatabase = null;
/**
* Input step to run on.
*/
private final InputTabPanel input;
/**
* Constructor. We depend on an input panel.
*
* @param input Input panel to depend on.
*/
public AlgorithmTabPanel(InputTabPanel input) {
super();
this.input = input;
input.addPanelListener(this);
}
@Override
protected synchronized void configureStep(Parameterization config) {
algorithms = config.tryInstantiate(AlgorithmStep.class);
if (config.getErrors().size() > 0) {
algorithms = null;
}
basedOnDatabase = null;
}
@Override
protected void executeStep() {
if (input.canRun() && !input.isComplete()) {
input.execute();
}
if (!input.isComplete()) {
throw new AbortException("Input data not available.");
}
// Get the database and run the algorithms
Database database = input.getInputStep().getDatabase();
algorithms.runAlgorithms(database);
basedOnDatabase = new WeakReference