/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.commons.cismap.io; import com.vividsolutions.jts.geom.Geometry; import org.apache.log4j.Logger; import org.openide.WizardDescriptor; import org.openide.util.NbBundle; import java.awt.EventQueue; import java.util.concurrent.ExecutorService; import de.cismet.cismap.commons.Crs; import de.cismet.commons.cismap.io.converters.GeometryConverter; import de.cismet.commons.concurrency.CismetConcurrency; import de.cismet.commons.converter.Converter; import de.cismet.commons.gui.wizard.AbstractWizardPanel; import de.cismet.commons.gui.wizard.converter.AbstractConverterChooseWizardPanel; /** * DOCUMENT ME! * * @author martin.scholl@cismet.de * @version 1.0 */ // TODO: cancellable public final class AddGeometriesToMapPreviewWizardPanel extends AbstractWizardPanel { //~ Static fields/initializers --------------------------------------------- public static final String PROP_GEOMETRY = "__prop_geometry__"; // NOI18N /** LOGGER. */ private static final transient Logger LOG = Logger.getLogger(AddGeometriesToMapPreviewWizardPanel.class); //~ Instance fields -------------------------------------------------------- private transient Geometry geometry; private transient boolean busy; private transient String statusMessage; private transient String previewUrl; private transient Crs currentCrs; //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Geometry getGeometry() { return geometry; } /** * DOCUMENT ME! * * @param geometry DOCUMENT ME! */ public void setGeometry(final Geometry geometry) { final Runnable r = new Runnable() { @Override public void run() { AddGeometriesToMapPreviewWizardPanel.this.geometry = geometry; changeSupport.fireChange(); } }; if (EventQueue.isDispatchThread()) { r.run(); } else { EventQueue.invokeLater(r); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean isBusy() { return busy; } /** * DOCUMENT ME! * * @param busy DOCUMENT ME! */ public void setBusy(final boolean busy) { final Runnable r = new Runnable() { @Override public void run() { AddGeometriesToMapPreviewWizardPanel.this.busy = busy; changeSupport.fireChange(); } }; if (EventQueue.isDispatchThread()) { r.run(); } else { EventQueue.invokeLater(r); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getStatusMessage() { return statusMessage; } /** * DOCUMENT ME! * * @param statusMessage DOCUMENT ME! */ public void setStatusMessage(final String statusMessage) { final Runnable r = new Runnable() { @Override public void run() { AddGeometriesToMapPreviewWizardPanel.this.statusMessage = statusMessage; changeSupport.fireChange(); } }; if (EventQueue.isDispatchThread()) { r.run(); } else { EventQueue.invokeLater(r); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public String getPreviewUrl() { return previewUrl; } /** * DOCUMENT ME! * * @param previewUrl DOCUMENT ME! */ public void setPreviewUrl(final String previewUrl) { this.previewUrl = previewUrl; changeSupport.fireChange(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Crs getCurrentCrs() { return currentCrs; } /** * DOCUMENT ME! * * @param currentCrs DOCUMENT ME! */ public void setCurrentCrs(final Crs currentCrs) { this.currentCrs = currentCrs; changeSupport.fireChange(); } @Override protected AddGeometriesToMapPreviewVisualPanel createComponent() { return new AddGeometriesToMapPreviewVisualPanel(this); } @Override protected void read(final WizardDescriptor wizard) { geometry = (Geometry)wizard.getProperty(PROP_GEOMETRY); previewUrl = (String)wizard.getProperty(AddGeometriesToMapWizardAction.PROP_PREVIEW_GETMAP_URL); currentCrs = (Crs)wizard.getProperty(AddGeometriesToMapWizardAction.PROP_CURRENT_CRS); // TODO: user proper executor final ExecutorService executor = CismetConcurrency.getInstance("cismap-commons").getDefaultExecutor(); // NOI18N executor.execute(new Thread("AddGeometriesToMapPreviewWizardPanel read()") { @Override public void run() { setGeometry(null); setStatusMessage( NbBundle.getMessage( AddGeometriesToMapPreviewWizardPanel.class, "AddGeometriesToMapPreviewWizardPanel.read(WizardDescriptor).runnable.statusMessage.convertingData")); // NOI18N setBusy(true); final Converter converter = (Converter)wizard.getProperty( AbstractConverterChooseWizardPanel.PROP_CONVERTER); final Object data = wizard.getProperty(AddGeometriesToMapEnterDataWizardPanel.PROP_COORDINATE_DATA); final Crs crs = (Crs)wizard.getProperty(AddGeometriesToMapWizardAction.PROP_CURRENT_CRS); assert converter instanceof GeometryConverter : "illegal wizard initialisation"; // NOI18N final GeometryConverter geomConverter = (GeometryConverter)converter; try { @SuppressWarnings("unchecked") final Geometry geom = geomConverter.convertForward(data, crs.getCode()); setStatusMessage( NbBundle.getMessage( AddGeometriesToMapPreviewWizardPanel.class, "AddGeometriesToMapPreviewWizardPanel.read(WizardDescriptor).runnable.statusMessage.conversionSuccessful")); // NOI18N setGeometry(geom); } catch (final Exception ex) { LOG.error("cannot convert geometry: [converter=" + geomConverter + "|data=" + data + "]", ex); // NOI18N setStatusMessage( NbBundle.getMessage( AddGeometriesToMapPreviewWizardPanel.class, "AddGeometriesToMapPreviewWizardPanel.read(WizardDescriptor).runnable.statusMessage.convertError", // NOI18N ex.getLocalizedMessage())); } finally { setBusy(false); } } }); } @Override protected void store(final WizardDescriptor wizard) { wizard.putProperty(PROP_GEOMETRY, geometry); } }