/*
* Constellation - An open source and standard compliant SDI
* http://www.constellation-sdi.org
*
* Copyright 2014 Geomatys.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.constellation.gui.observation;
// J2SE dependencies
import org.constellation.catalog.CatalogException;
import org.constellation.coverage.catalog.Catalog;
import org.constellation.coverage.model.Descriptor;
import org.constellation.observation.MeasurementTableFiller;
import org.constellation.observation.fishery.sql.EnvironmentTable;
import org.constellation.observation.sql.MeasurementTable;
import org.constellation.observation.sql.StationTable;
import org.geotools.resources.Arguments;
import java.util.Set;
// Geotools dependencies
// Constellation dependencies
/**
* Composante graphique pour démarrer le remplissage de la table des mesures. Cette composante
* graphique demandera à l'utilisateur de sélectionner un sous-ensemble de descripteurs parmis
* les descripteurs qui ont été spécifiés à {@link MeasurementTableFiller}. Si l'utilisateur
* appuie sur le bouton "Exécuter" après cette sélection, alors cette objet appelera
* {@link MeasurementTableFiller#execute} pour les descripteurs sélectionnés.
* <p>
* Pour faire apparaître cette composante graphique et permettre ainsi le lancement du
* remplissage de la table des mesures, appelez {@link #show}.
*
* @version $Id$
* @author Martin Desruisseaux
*
* @todo Eviter une référence directe à {@link EnvironmentTable}. Il faut trouver un moyen de
* laisser ce choix à l'utilisateur.
*/
@SuppressWarnings("serial")
public class FillerWizard extends DescriptorChooser {
/**
* Le contrôleur pour remplir la table des mesures.
*/
private final MeasurementTableFiller filler;
/**
* Construit une composante graphique pour les descripteurs actuellement déclarés dans
* l'objet {@link MeasurementTableFiller}.
*/
public FillerWizard(final MeasurementTableFiller filler) {
super(filler.descriptors());
this.filler = filler;
}
/**
* Appelée automatiquement lorsque l'utilisateur a appuyé sur le bouton "Exécuter".
* L'implémentation par défaut réduit les descripteur de {@link MeasurementTableFiller}
* à l'ensemble sélectionné par l'utilisateur, et appelle
* {@link MeasurementTableFiller#start start()}.
*/
@Override
protected void execute() {
synchronized (filler) {
final Set<Descriptor> descriptors = filler.descriptors();
descriptors.clear();
descriptors.addAll(getDescriptors(true));
filler.start();
}
}
/**
* Appelée automatiquement lorsque l'utilisateur a appuyé sur le bouton "Annuler".
* L'implémentation par défaut interrompt l'exécution lancée par
* {@link MeasurementTableFiller#start start()}.
*/
@Override
protected void cancel() {
filler.cancel();
super.cancel();
}
/**
* Fait apparaître la boîte de dialogue qui suggère à l'utilisateur de sélectionner des
* descripteurs du paysage océanique. La liste des descripteurs sera puisée dans la base
* de données. Si l'utilisateur appuie sur le bouton "Exécuter", l'exécution démarrera
* immédiatement.
*/
public static void main(String[] args) {
final FillerWizard wizard;
final Arguments arguments = new Arguments(args);
final String provider = arguments.getRequiredString("-provider");
args = arguments.getRemainingArguments(0);
final MeasurementTable table;
final MeasurementTableFiller filler;
try {
table = new EnvironmentTable(Catalog.getDefault().getDatabase(), StationTable.class, provider);
filler = new MeasurementTableFiller(table);
filler.addDefaultDescriptors();
filler.addDefaultStations();
wizard = new FillerWizard(filler);
} catch (CatalogException exception) {
exception.printStackTrace(arguments.err);
return;
}
wizard.show(null);
}
}