[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