[Gvsig_desarrolladores] Tablas - gvsig
maro1 en alu.um.es
maro1 en alu.um.es
Jue Nov 22 17:33:30 CET 2007
Hola buenas tardes,
El código que os envié sí compila y se ejecuta.
No entiendo que es lo que está mal del código.
Lo que os envíado es un trozo de código de una clase creada.
No entiendo muy bien lo de la variable lyrparcelas, ¿que es lo que está mal?
¿Como debería declararse?
Muchas gracias
SAludos
Este texto ha sido envíado por María Aránzazu Rincón Oliva
----- Original Message -----
From: Vicente Caballero Navarro
To: "RINCON OLIVA, Mª ARANZAZU" ; Cesar ; jaume dominguez faus
Sent: Thursday, November 22, 2007 11:04 AM
Subject: Re: [Gvsig_desarrolladores] Tablas - gvsig
Hola Mª ARANZAZU.
Por política de empresa no debo contestarte al correo privado, debo hacerlo a través de la lista de desarrolladores, pero sí te diré que conforme está el código que has enviado es imposible que te compile, ya que tienes una variable "lyrparcelas" tres líneas por encima de donde se crea y eso en java no es posible.
Y otra cosa, es que el acceso a la tabla podrás hacerlo si realmente sobre el proyecto tienes una tabla abierta, cosa que no creo que esté pasando. Para acceder a los datos puedes hacerlo sin la tabla directamente desde la capa vectorial "FLyrVect", la cual puedes obtenerla de la siguiente forma:
ProjectExtension pe = (ProjectExtension)PluginServices.getExtension(ProjectExtension.class);
ArrayList views = pe.getDocumentsByType("ProjectView");
ProjectView view = (ProjectView) views.get(0);
view.getMapContext().getLayers().getLayer(indice de la capa);
RINCON OLIVA, Mª ARANZAZU escribió:
Hola buenos día,
al final he conseguido compilar y ejecutar la aplicación, pero no me graba los datos que modifico de la tabla, cuando le doi al botón de grabar, me sale el siguietne error:
java.lang.NullPointerException java.lang.NullPointerException: null com.iver.cit.gvsig.infoMapa.panels.ProvinciasPanel.grabardatosmodificados(ProvinciasPanel.java:469)
La línea de código donde se produce el error es en:
ProjectTable table = pe.getProject().getTable(lyrparcelas);
El código es el siguiente:
//campos a modificar.
//campos a modificar.
Value camposmodificados[] = new Value[9];
camposmodificados[0]=ValueFactory.createValue(codgrupo);
camposmodificados[1] = ValueFactory.createValue(codcultivo);
camposmodificados[2]= ValueFactory.createValue(codvariedad);
camposmodificados[3] = ValueFactory.createValue(codsistriego);
camposmodificados[4] = ValueFactory.createValue(codmetriego);
camposmodificados[5] = ValueFactory.createValue(codedad);
camposmodificados[6] = ValueFactory.createValue(codfuente);
camposmodificados[7] = ValueFactory.createValue(observacion);
camposmodificados[8] = ValueFactory.createValue(bal);
//grabamos los datos modificados
//grabamos los datos de parcelas
int i=this.lyrparcelas.getSource().getRecordset().getSelection().nextSetBit(0);
ProjectExtension pe = (ProjectExtension)PluginServices.getExtension(ProjectExtension.class);
ProjectTable table = pe.getProject().getTable(lyrparcelas);
FLyrVect lyrparcelas=(FLyrVect)table.getAssociatedTable();
IEditableSource ies = (VectorialEditableAdapter) lyrparcelas.getSource();
IRow feat=null;
try {
feat = ies.getRow(i).getLinkedRow().cloneRow();
} catch (DriverIOException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
//aquí obtengo los atributos
Value[] values = feat.getAttributes();
//variedad
values[7]=camposmodificados[2];
//nota
values[9]=camposmodificados[7];
//grup_cult
values[11]=camposmodificados[0];
//cultiv
values[12]=camposmodificados[1];
//sistemaMarie
values[13]=camposmodificados[3];
//metodocult
values[14]=camposmodificados[4];
//fuente
values[15]=camposmodificados[6];
//balsa
values[16]=camposmodificados[8];
//edadcultivo
values[17]=camposmodificados[5];
feat.setAttributes(values);
IRowEdited edRow = new DefaultRowEdited(feat,
IRowEdited.STATUS_MODIFIED, i);
try {
ies.modifyRow(edRow.getIndex(), edRow.getLinkedRow(), "",
EditionEvent.ALPHANUMERIC);
} catch (IOException e) {
e.printStackTrace();
} catch (DriverIOException e) {
e.printStackTrace();
}
Muchas gracias
Un saludo
Vicente Caballero Navarro <vicente.caballero en iver.es> escribi�
Hola.
En primer lugar, no he compilado tu código y por tanto no sé
exactamente que otros problemas te puedes encontrar, pero respecto
del objeto table, decirte que no lo necesitas. La capa lyrparcelas es
de tipo vectorial y por tanto a través de ella puedes acceder a sus
atributos sin necesidad de la tabla, que simplemente es la
representación en pantalla de esos atributos.
Por tanto, para resolver tu problema puedes quitar toda referencia a
table y directamente acceder con lyrparcelas a los atributos y
modificarlos siempre que pongas la capa en edición y después cuando
quieras guardar los cambios lo hagas para esto te puede ayudar ver
los métodos execute() de las clases StartEditing y StopEditing del
proyecto extCAD.
Y si quieres en algún momento acceder al modelo de una tabla asociada
a una capa, lo puedes hacer así:
ProjectExtension pe = (ProjectExtension) PluginServices
.getExtension(ProjectExtension.class);
ProjectTable pt = pe.getProject().getTable(lyrparcelas);
Espero haber ayudado. Un saludo.
-- Vicente Caballero Navarro Grupo desarrollo gvSIG. IVER TI S.A.
C/ Lérida, 20 46005-Valencia Tlf.+34963354983 www.iver.es
www.gvsig.com
maro1 en alu.um.es escribió: Hola buenos día,
Te adjunto el fichero con el código.
También lo pego en el correo por si hubiese problemas con ficheros
adjuntos
- código -
package com.iver.cit.gvsig.infoMapa.tools;
import java.awt.Cursor;
import java.awt.geom.Point2D;
import java.io.IOException;
import com.hardcode.gdbms.engine.data.DataSource;
import com.hardcode.gdbms.engine.values.Value;
import com.iver.andami.PluginServices;
import com.iver.cit.gvsig.fmap.DriverException;
import com.iver.cit.gvsig.fmap.MapControl;
import com.iver.cit.gvsig.fmap.core.IRow;
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited;
import com.iver.cit.gvsig.fmap.edition.EditionEvent;
import com.iver.cit.gvsig.fmap.edition.IEditableSource;
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
import com.iver.cit.gvsig.fmap.layers.FBitSet;
import com.iver.cit.gvsig.fmap.layers.FLayers;
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
import
com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
import com.iver.cit.gvsig.fmap.tools.BehaviorException;
import com.iver.cit.gvsig.fmap.tools.Events.PointEvent;
import com.iver.cit.gvsig.fmap.tools.Listeners.PointListener;
import com.iver.cit.gvsig.infoMapa.panels.ProvinciasPanel;
import com.iver.cit.gvsig.project.documents.view.gui.IView;
public class InfoByPointListener implements PointListener{
private MapControl mapControl = null;
public InfoByPointListener(MapControl mapControl){
this.mapControl = mapControl;
}
public void point(PointEvent event) throws BehaviorException {
//LECTURA DE LOS CAMPOS
IView view =
(IView)PluginServices.getMDIManager().getActiveWindow();
FLayers layers = view.getMapControl().getMapContext().getLayers();
FLyrVect lyrparcelas = (FLyrVect)layers.getLayer("parcelas.shp");
Point2D pReal = event.getPoint();
Point2D mapPoint =
mapControl.getViewPort().toMapPoint((int)pReal.getX(), (int)
pReal.getY());
double tol = mapControl.getViewPort().toMapDistance(1);
//Obtenemos los campos de la fila seleccionada dela tabla asignada
a la capa cuando el usuario hace click sobre la capa
try {
FBitSet selection = lyrparcelas.queryByPoint(mapPoint,tol);
if (!selection.isEmpty()){
DataSource ds = ((AlphanumericData)lyrparcelas).getRecordset();
ds.start();
// PESTAÑA INFO
int idmunicipio = ds.getFieldIndexByName("MUNICIPIO");
int idparcela = ds.getFieldIndexByName("PARCELA");
int idpoligono = ds.getFieldIndexByName("POLIGONO");
int idrecinto = ds.getFieldIndexByName("RECINTO");
int idfvalidacion = ds.getFieldIndexByName("fvalidaci");
int idarea = ds.getFieldIndexByName("Shape_Area");
//------------------------------------------------------
int idgrupo = ds.getFieldIndexByName("GRUP_CULT");
int idcultivo= ds.getFieldIndexByName("CULTIV");
int idvariedad = ds.getFieldIndexByName("VARIED");
int idriego = ds.getFieldIndexByName("SISTEMARIE");
int idmetodo = ds.getFieldIndexByName("METODOCULT");
int idedad = ds.getFieldIndexByName("EDADCULT");
int idfuente = ds.getFieldIndexByName("Fuente");
int idnota = ds.getFieldIndexByName("NOTA");
int idbalsa =ds.getFieldIndexByName("BALSA");
Value strmunicipio = ds.getFieldValue(selection.nextSetBit(0),
idmunicipio);
Value strparcela = ds.getFieldValue(selection.nextSetBit(0),
idparcela);
Value strpoligono = ds.getFieldValue(selection.nextSetBit(0),
idpoligono);
Value strrecinto = ds.getFieldValue(selection.nextSetBit(0),
idrecinto);
Value strfvalidacion =
ds.getFieldValue(selection.nextSetBit(0), idfvalidacion);
Value strgrupo = ds.getFieldValue(selection.nextSetBit(0),
idgrupo);
Value strcultivo = ds.getFieldValue(selection.nextSetBit(0),
idcultivo);
Value strvariedad = ds.getFieldValue(selection.nextSetBit(0),
idvariedad);
Value strsistriego = ds.getFieldValue(selection.nextSetBit(0),
idriego);
Value strmtdcultivo = ds.getFieldValue(selection.nextSetBit(0),
idmetodo);
Value stredad = ds.getFieldValue(selection.nextSetBit(0),
idedad);
Value strfuente = ds.getFieldValue(selection.nextSetBit(0),
idfuente);
Value strnota = ds.getFieldValue(selection.nextSetBit(0),
idnota);
Value strarea= ds.getFieldValue(selection.nextSetBit(0),
idarea);
Value strbalsa = ds.getFieldValue(selection.nextSetBit(0),
idbalsa);
ds.stop();
//creamos una ventana de tipo (frame dialog) donde se visualiza
una ventana donde sale la información del punto seleccionado por el
usuario en la capa
//paso como parámetro los campos de la fila seleccionada de la
tabla.
ProvinciasPanel panel = new
ProvinciasPanel("Modificar","Cultivos",strparcela.toString(),strmunicipio.toString(),strpoligono.toString(),strrecinto.toString(),strfvalidacion.toString(),strarea.toString(),strgrupo.toString(),strcultivo.toString(),strvariedad.toString(),strsistriego.toString(),strmtdcultivo.toString(),stredad.toString(),strfuente.toString(),strnota.toString(),strbalsa.toString());
PluginServices.getMDIManager().addWindow(panel);
// La ventana que se le muestra al usuario puede modificar los
datos, y cambiarlos ( la ventana contiene cajas de texto y comobox
donde el usuario puede
//modificar la información y poner otra.
//EL CÓDIGO QUE VIENE A CONTINUACIÓN es el que me da problema al
compilar en la línea de código
lyrparcelas=(FLyrVect)table.getModel().getAssociatedTable();
//obtengo los valores modificados de la ventana
Values[]valores panel.obtenerdatosmodificados();
//Aquí con este código tengo que grabar:
int
i=lyrparcelas.getSource().getRecordset().getSelection().nextSetBit(0);
lyrparcelas=(FLyrVect)table.getModel().getAssociatedTable();
IEditableSource ies = (VectorialEditableAdapter)
lyrparcelas.getSource();
IRow feat=null;
try {
feat = ies.getRow(i).getLinkedRow().cloneRow();
} catch (DriverIOException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
Value[] values = feat.getAttributes();
values[selectedIndex] = value;
feat.setAttributes(values);
IRowEdited edRow = new DefaultRowEdited(feat,
IRowEdited.STATUS_MODIFIED, i);
try {
ies.modifyRow(edRow.getIndex(), edRow.getLinkedRow(),
"",
EditionEvent.ALPHANUMERIC);
} catch (IOException e) {
e.printStackTrace();
} catch (DriverIOException e) {
e.printStackTrace();
}
}
} catch (DriverException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void pointDoubleClick(PointEvent event) throws
BehaviorException {
// TODO Auto-generated method stub
}
public Cursor getCursor() {
// TODO Auto-generated method stub
return null;
}
public boolean cancelDrawing() {
// TODO Auto-generated method stub
return false;
}
}
----- Original Message ----- From: "César Martínez Izquierdo"
<cesar.martinez en iver.es>
To: "Lista de Desarrolladores de gvSIG"
<gvsig_desarrolladores en runas.cap.gva.es>
Sent: Tuesday, November 20, 2007 3:52 PM
Subject: Re: [Gvsig_desarrolladores] Tablas - gvsig
Hola de nuevo,
Seguramente "table" te da error porque es una variable que no has
declarado.
¿puedes enviar el código completo de la función que estás haciendo
para que entendamos mejor lo que quieres hacer? ¿Quieres obtener una
vista, o su vista asociada? ¿U otra cosa distinta?
Saludos,
RINCON OLIVA, Mª ARANZAZU escribió:
Hola buenos días,
Tengo un problema al obtener la tabla asociada a la capa.
Me da un error de compilación en la palabra "table".
He importado el paquete: import
com.iver.cit.gvsig.project.documents.table.*, pero el error de
compilación persiste.
El código es el siguiente:
int
i=lyrparcelas.getSource().getRecordset().getSelection().nextSetBit(0);
FLyrVect lyrparcelas
=(FLyrVect)table.getModel().getAssociatedTable();-->error
IEditableSource ies = (VectorialEditableAdapter) lv.getSource();
Muchas gracias
Un saludo
--
César Martínez Izquierdo
Equipo de desarrollo gvSIG
http://www.gvsig.gva.es
IVER T.I.
C/ Lérida 20
46009 Valencia - Spain
http://www.iver.es
Este mensaje y sus archivos son confidenciales. No está permitida su
reproducción o distribución sin la autorización expresa de "IVER
Tecnologías de la Información". Si usted no es el destinatario
previsto, queda desautorizado cualquier uso, acceso o copia de este
mensaje. Si ha recibido este mensaje por error, por favor bórrelo e
infórmenos por esta misma vía.
_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores en runas.cap.gva.es
http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
-------------------------
_______________________________________________ gvSIG_desarrolladores
mailing list gvSIG_desarrolladores en runas.cap.gva.es
http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
Este mensaje y sus archivos son confidenciales. No está permitida su
reproducción o distribución sin la autorización expresa de "IVER
Tecnologías de la Información". Si usted no es el destinatario
previsto, queda desautorizado cualquier uso, acceso o copia de este
mensaje. Si ha recibido este mensaje por error, por favor bórrelo e
infórmenos por esta misma vía.
--
Vicente Caballero Navarro
Grupo desarrollo gvSIG.
IVER TI S.A.
C/ Lérida, 20
46005-Valencia
Tlf.+34963354983
www.iver.es
www.gvsig.com
Este mensaje y sus archivos son confidenciales. No está permitida su reproducción o distribución sin la autorización expresa de "IVER Tecnologías de la Información". Si usted no es el destinatario previsto, queda desautorizado cualquier uso, acceso o copia de este mensaje. Si ha recibido este mensaje por error, por favor bórrelo e infórmenos por esta misma vía.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20071122/517aa2d5/attachment-0001.htm
Más información sobre la lista de distribución gvSIG_desarrolladores