/* * Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU 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 General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package org.esa.snap.timeseries.ui.assistant; import com.bc.ceres.core.ProgressMonitor; import com.bc.ceres.swing.progress.ProgressMonitorSwingWorker; import org.esa.snap.core.datamodel.Product; import org.esa.snap.core.datamodel.ProductManager; import org.esa.snap.core.ui.assistant.AbstractAssistantPage; import org.esa.snap.rcp.SnapApp; import org.esa.snap.timeseries.core.timeseries.datamodel.AbstractTimeSeries; import org.esa.snap.timeseries.core.timeseries.datamodel.TimeSeriesFactory; import org.esa.snap.timeseries.ui.ProductLocationsPaneModel; import org.esa.snap.timeseries.ui.VariableSelectionPaneModel; import org.esa.snap.util.Debug; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.Component; abstract class AbstractTimeSeriesAssistantPage extends AbstractAssistantPage { private final TimeSeriesAssistantModel assistantModel; private final MyChangeListener changeListener; AbstractTimeSeriesAssistantPage(String pageTitle, TimeSeriesAssistantModel model) { super(pageTitle); assistantModel = model; changeListener = new MyChangeListener(); assistantModel.addChangeListener(changeListener); } protected TimeSeriesAssistantModel getAssistantModel() { return assistantModel; } @Override public boolean performFinish() { TimeSeriesAssistantModel model = getAssistantModel(); final TimeSeriesCreator creator = new TimeSeriesCreator(model, this.getPageComponent()); creator.executeWithBlocking(); removeModeListener(); return true; } @Override public void performCancel() { removeModeListener(); } protected void removeModeListener() { assistantModel.removeChangeListener(changeListener); } private void addTimeSeriesProductToVisat(TimeSeriesAssistantModel assistantModel, ProgressMonitor pm) { pm.beginTask("Creating Time Series", 50); final ProductLocationsPaneModel locationsModel = assistantModel.getProductLocationsModel(); pm.worked(1); final VariableSelectionPaneModel variablesModel = assistantModel.getVariableSelectionModel(); pm.worked(1); final AbstractTimeSeries timeSeries = TimeSeriesFactory.create(assistantModel.getTimeSeriesName(), locationsModel.getProductLocations(), variablesModel.getSelectedVariableNames()); pm.worked(42); ProductManager productManager = SnapApp.getDefault().getProductManager(); Product tsProduct = timeSeries.getTsProduct(); productManager.addProduct(tsProduct); pm.worked(6); } private class MyChangeListener implements ChangeListener { @Override public void stateChanged(ChangeEvent e) { getContext().updateState(); } } private class TimeSeriesCreator extends ProgressMonitorSwingWorker<Void, TimeSeriesAssistantModel> { private final TimeSeriesAssistantModel model; private TimeSeriesCreator(TimeSeriesAssistantModel model, Component parentComponent) { super(parentComponent, "Creating Time Series..."); this.model = model; } @Override protected Void doInBackground(ProgressMonitor pm) throws Exception { addTimeSeriesProductToVisat(model, pm); return null; } @Override protected void done() { try { get(); } catch (Exception e) { Debug.trace(e); getContext().showErrorDialog(e.getMessage()); } } } }