提交 5526a461 编写于 作者: S serge-rider

#4461 PostgreSQL + GIS: support new geometry values create

上级 94fd026b
......@@ -11,4 +11,5 @@ Require-Bundle: org.jkiss.dbeaver.model,
org.eclipse.jface,
com.vividsolutions.jts
Bundle-ClassPath: .
Export-Package: org.jkiss.dbeaver.data.gis.handlers
Export-Package: org.jkiss.dbeaver.data.gis.handlers,
org.jkiss.dbeaver.model.gis
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.model.gis;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
/**
* GisAttribute.
*/
public interface GisAttribute {
int getAttributeSRID(DBRProgressMonitor monitor);
}
......@@ -19,11 +19,14 @@ package org.jkiss.dbeaver.ui.data.managers;
import com.vividsolutions.jts.geom.Geometry;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.gis.GisAttribute;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSTypedObject;
import org.jkiss.dbeaver.ui.data.IValueController;
import org.jkiss.dbeaver.ui.data.editors.StringInlineEditor;
/**
* GeometryInlineEditor.
* GisAttribute.
* Edits value as string. Also manager SRID.
*/
public class GeometryInlineEditor extends StringInlineEditor {
......@@ -40,13 +43,21 @@ public class GeometryInlineEditor extends StringInlineEditor {
if (value instanceof Geometry) {
this.valueSRID = ((Geometry) value).getSRID();
}
if (valueSRID == 0) {
DBSTypedObject column = valueController.getValueType();
if (column instanceof GisAttribute) {
valueSRID = ((GisAttribute) column).getAttributeSRID(new VoidProgressMonitor());
}
}
}
@Override
public Object extractEditorValue() throws DBCException {
Object geometry = super.extractEditorValue();
if (geometry instanceof Geometry && valueSRID != 0) {
((Geometry) geometry).setSRID(valueSRID);
if (geometry instanceof Geometry) {
if (valueSRID != 0) {
((Geometry) geometry).setSRID(valueSRID);
}
}
return geometry;
}
......
......@@ -17,17 +17,27 @@
package org.jkiss.dbeaver.ext.postgresql.model;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.postgresql.PostgreUtils;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.gis.GisAttribute;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import java.sql.SQLException;
import java.util.Collection;
/**
* PostgreTableColumn
*/
public class PostgreTableColumn extends PostgreAttribute<PostgreTableBase> implements PostgrePermissionsOwner
public class PostgreTableColumn extends PostgreAttribute<PostgreTableBase> implements PostgrePermissionsOwner, GisAttribute
{
private static final Log log = Log.getLog(PostgreTableColumn.class);
private int srid = -1;
public PostgreTableColumn(PostgreTableBase table) {
super(table);
}
......@@ -51,4 +61,19 @@ public class PostgreTableColumn extends PostgreAttribute<PostgreTableBase> imple
return PostgreUtils.extractPermissionsFromACL(monitor, this, getAcl());
}
@Override
public int getAttributeSRID(DBRProgressMonitor monitor) {
if (srid == -1) {
try (JDBCSession session = DBUtils.openMetaSession(monitor, this, "Load table inheritance info")) {
Object sridValue = JDBCUtils.queryObject(session, "SELECT Find_SRID('" + getSchema().getName() + "', '" + getTable().getName() + "', '" + getName() + "')");
if (sridValue instanceof Number) {
srid = ((Number) sridValue).intValue();
}
} catch (SQLException e) {
log.debug("Error reading attribute " + getName() + " SRID", e);
srid = 0;
}
}
return srid;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册