/* * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI * for visualizing and manipulating spatial features with geometry and attributes. * * Copyright (C) 2003 Vivid Solutions * * 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 2 * 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * For more information, contact: * * Vivid Solutions * Suite #1A * 2328 Government Street * Victoria BC V8T 5G5 * Canada * * (250)385-6040 * www.vividsolutions.com */ package com.vividsolutions.jump.io.datasource; import java.util.ArrayList; import java.util.Collection; import com.vividsolutions.jump.coordsys.CoordinateSystem; import com.vividsolutions.jump.feature.FeatureCollection; import com.vividsolutions.jump.io.DriverProperties; import com.vividsolutions.jump.io.JUMPReader; import com.vividsolutions.jump.io.JUMPWriter; import com.vividsolutions.jump.task.TaskMonitor; /** * Adapts the old JUMP I/O API (Readers and Writers) to the new JUMP I/O API * (DataSources). */ public class ReaderWriterFileDataSource extends DataSource { protected JUMPReader reader; protected JUMPWriter writer; public ReaderWriterFileDataSource(JUMPReader reader, JUMPWriter writer) { this.reader = reader; this.writer = writer; } public Connection getConnection() { return new Connection() { public FeatureCollection executeQuery(String query, Collection exceptions, TaskMonitor monitor) { try { return reader.read(getReaderDriverProperties()); } catch (Exception e) { exceptions.add(e); return null; //<<TODO>> Modify Readers and Writers to store exceptions and continue //processing. [Jon Aquino] } } public void executeUpdate(String update, FeatureCollection featureCollection, TaskMonitor monitor) throws Exception { writer.write(featureCollection, getWriterDriverProperties()); } public void close() {} public FeatureCollection executeQuery(String query, TaskMonitor monitor) throws Exception { ArrayList exceptions = new ArrayList(); FeatureCollection featureCollection = executeQuery(query, exceptions, monitor); if (!exceptions.isEmpty()) { throw (Exception) exceptions.iterator().next(); } return featureCollection; } }; } protected DriverProperties getReaderDriverProperties() { return getDriverProperties(); } protected DriverProperties getWriterDriverProperties() { return getDriverProperties(); } private DriverProperties getDriverProperties() { DriverProperties properties = new DriverProperties(); properties.putAll(getProperties()); return properties; } }