package es.icarto.gvsig.navtableforms.utils;
import javax.swing.JInternalFrame;
import com.hardcode.gdbms.engine.data.DataSource;
import com.hardcode.gdbms.engine.data.DataSourceFactory;
import com.iver.andami.PluginServices;
import com.iver.andami.ui.mdiManager.IWindow;
import com.iver.cit.gvsig.ProjectExtension;
import com.iver.cit.gvsig.fmap.edition.EditableAdapter;
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
import com.iver.cit.gvsig.project.ProjectFactory;
import com.iver.cit.gvsig.project.documents.table.ProjectTable;
import com.iver.cit.gvsig.project.documents.table.gui.Table;
import com.iver.cit.gvsig.project.documents.view.gui.BaseView;
import es.udc.cartolab.gvsig.users.utils.DBSession;
/**
* DBConnectionBaseFormFactory
*
* This abstract class provides some code that can be used by other factories
* which load layers and tables through extDBConnection.
*
* @author Jorge L�pez Fern�ndez <jlopez@cartolab.es>
*/
public abstract class DBConnectionBaseFormFactory extends FormFactory {
@Override
public boolean checkLayerLoaded(String layerName) {
return (new TOCLayerManager().getLayerByName(layerName) != null);
}
@Override
public boolean checkTableLoaded(String tableName) {
return (new TOCTableManager().getTableModelByName(tableName) != null);
}
protected void loadLayer(String layerName, String dbSchema) {
IWindow[] windows = PluginServices.getMDIManager().getOrderedWindows();
BaseView view = null;
for (IWindow w : windows) {
if (w instanceof BaseView) {
view = (BaseView) w;
break;
}
}
try {
view.getMapControl()
.getMapContext()
.getLayers()
.addLayer(
DBSession.getCurrentSession().getLayer(layerName,
layerName, dbSchema, null,
view.getProjection()));
} catch (Exception e) {
e.printStackTrace();
}
}
protected void loadTable(String tableName, String dbSchema) {
IWindow[] ws = PluginServices.getMDIManager().getAllWindows();
IWindow baseView = null;
for (IWindow w : ws) {
if (w instanceof BaseView) {
baseView = w;
}
}
DBSession session = DBSession.getCurrentSession();
String completeTableName = session.getCompleteTableName(tableName,
dbSchema);
LayerFactory.getDataSourceFactory().addDBDataSourceByTable(tableName,
session.getServer(), session.getPort(), session.getUserName(),
session.getPassword(), session.getDatabase(),
completeTableName, session.getAlphanumericDriverName());
try {
DataSource dataSource;
dataSource = LayerFactory.getDataSourceFactory()
.createRandomDataSource(tableName,
DataSourceFactory.AUTOMATIC_OPENING);
SelectableDataSource sds = new SelectableDataSource(dataSource);
EditableAdapter auxea = new EditableAdapter();
auxea.setOriginalDataSource(sds);
ProjectTable projectTable = ProjectFactory.createTable(tableName,
auxea);
Table t = new Table();
t.setModel(projectTable);
PluginServices.getMDIManager().addWindow(t);
JInternalFrame frame = (JInternalFrame) t.getRootPane().getParent();
ProjectExtension ext = (ProjectExtension) PluginServices
.getExtension(ProjectExtension.class);
ext.getProject().addDocument(projectTable);
frame.toBack();
frame.setSelected(false);
if (baseView != null) {
JInternalFrame frameBaseView = (JInternalFrame) ((BaseView) baseView)
.getRootPane().getParent();
frameBaseView.setSelected(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}