package org.openjump.core.ui.plugin.datastore; import java.awt.Color; import java.util.Collection; import javax.swing.SwingUtilities; import org.openjump.core.ui.plugin.file.open.ChooseProjectPanel; import org.openjump.core.ui.swing.wizard.AbstractWizardGroup; import com.vividsolutions.jump.I18N; import com.vividsolutions.jump.coordsys.CoordinateSystemRegistry; import com.vividsolutions.jump.feature.FeatureCollection; import com.vividsolutions.jump.io.datasource.Connection; import com.vividsolutions.jump.io.datasource.DataSource; import com.vividsolutions.jump.io.datasource.DataSourceQuery; import com.vividsolutions.jump.task.TaskMonitor; import com.vividsolutions.jump.workbench.WorkbenchContext; import com.vividsolutions.jump.workbench.datastore.ConnectionDescriptor; import com.vividsolutions.jump.workbench.model.Category; import com.vividsolutions.jump.workbench.model.Layer; import com.vividsolutions.jump.workbench.model.LayerManager; import com.vividsolutions.jump.workbench.model.StandardCategoryNames; import com.vividsolutions.jump.workbench.ui.images.IconLoader; import com.vividsolutions.jump.workbench.ui.plugin.AddNewLayerPlugIn; import com.vividsolutions.jump.workbench.ui.plugin.datastore.AddDatastoreLayerPanel; import com.vividsolutions.jump.workbench.ui.plugin.datastore.DataStoreDataSource; import com.vividsolutions.jump.workbench.ui.wizard.WizardDialog; public class AddDataStoreLayerWizard extends AbstractWizardGroup { private static final String KEY = AddDataStoreLayerWizard.class.getName(); private AddDataStoreLayerWizardPanel dataStoreWizardPanel; private WorkbenchContext workbenchContext; private ChooseProjectPanel chooseProjectPanel; public AddDataStoreLayerWizard(WorkbenchContext workbenchContext) { super(I18N.get(KEY), IconLoader.icon("database_add.png"), AddDataStoreLayerWizardPanel.class.getName()); this.workbenchContext = workbenchContext; dataStoreWizardPanel = new AddDataStoreLayerWizardPanel(workbenchContext); addPanel(dataStoreWizardPanel); chooseProjectPanel = new ChooseProjectPanel(workbenchContext, dataStoreWizardPanel.getID()); addPanel(chooseProjectPanel); } public String getFirstId() { String firstId = super.getFirstId(); if (!chooseProjectPanel.hasActiveTaskFrame() && chooseProjectPanel.hasTaskFrames()) { chooseProjectPanel.setNextID(firstId); return chooseProjectPanel.getID(); } else { return firstId; } } public void run(WizardDialog dialog, TaskMonitor monitor) throws Exception { chooseProjectPanel.activateSelectedProject(); //try { AddDatastoreLayerPanel dataStorePanel = dataStoreWizardPanel.getDataStorePanel(); final Layer layer = createLayer(dataStorePanel, monitor); SwingUtilities.invokeLater(new Runnable() { public void run() { Collection<Category> selectedCategories = workbenchContext.getLayerNamePanel() .getSelectedCategories(); LayerManager layerManager = workbenchContext.getLayerManager(); String categoryName = StandardCategoryNames.WORKING; if (!selectedCategories.isEmpty()) { categoryName = selectedCategories.iterator().next().getName(); } try {workbenchContext.getLayerViewPanel().getViewport().update(); } catch(Exception e) {} layerManager.addLayerable(categoryName, layer); } }); workbenchContext.getLayerViewPanel().getViewport().update(); //} catch (Exception e) { // monitor.report(e); // throw e; //} } private Layer createLayer(final AddDatastoreLayerPanel panel, TaskMonitor monitor) throws Exception { String datasetName = panel.getDatasetName(); LayerManager layerManager = workbenchContext.getLayerManager(); Color fillColor = layerManager.generateLayerFillColor(); FeatureCollection featureCollection = AddNewLayerPlugIn.createBlankFeatureCollection(); Layer layer = new Layer(datasetName, fillColor, featureCollection, layerManager); String geometryAttributeName = panel.getGeometryAttributeName(); String whereClause = panel.getWhereClause(); ConnectionDescriptor connectionDescriptor = panel.getConnectionDescriptor(); boolean caching = panel.isCaching(); DataStoreDataSource ds = new DataStoreDataSource(datasetName, geometryAttributeName, whereClause, connectionDescriptor, caching, workbenchContext); DataSourceQuery dsq = new DataSourceQuery(ds, null, datasetName); layer.setDataSourceQuery(dsq); CoordinateSystemRegistry crsRegistry = CoordinateSystemRegistry.instance(workbenchContext.getBlackboard()); try { layerManager.setFiringEvents(false); // added by michaudm on 2009-04-05 load(layer, crsRegistry, monitor); layerManager.setFiringEvents(true); // added by michaudm on 2009-04-05 } finally {layerManager.setFiringEvents(true);} return layer; } public static void load(Layer layer, CoordinateSystemRegistry registry, TaskMonitor monitor) throws Exception { layer.setFeatureCollection(executeQuery(layer.getDataSourceQuery() .getQuery(), layer.getDataSourceQuery().getDataSource(), registry, monitor)); layer.setFeatureCollectionModified(false); } private static FeatureCollection executeQuery(String query, DataSource dataSource, CoordinateSystemRegistry registry, TaskMonitor monitor) throws Exception { Connection connection = dataSource.getConnection(); try { return dataSource.installCoordinateSystem(connection.executeQuery(query, monitor), registry); } finally { connection.close(); } } }