Statistics
| Revision:

gvsig-raster / org.gvsig.raster.lizardtech / trunk / org.gvsig.raster.lizardtech / org.gvsig.raster.lizardtech.jni / src / main / native / jmrsid / ltimetadatarecord.cpp @ 2452

History | View | Annotate | Download (13.7 KB)

1
/**********************************************************************
2
 * $Id: ltimetadatarecord.cpp 3539 2006-01-09 12:23:20Z nacho $
3
 *
4
 * Name:     ltimetadatarecord.c
5
 * Project:  JMRSID. Interfaz java to MrSID (Lizardtech).
6
 * Purpose:  
7
 * Author:   Nacho Brodin, brodin_ign@gva.es
8
 *
9
 **********************************************************************/
10
/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
11
*
12
* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
13
*
14
* This program is free software; you can redistribute it and/or
15
* modify it under the terms of the GNU General Public License
16
* as published by the Free Software Foundation; either version 2
17
* of the License, or (at your option) any later version.
18
*
19
* This program is distributed in the hope that it will be useful,
20
* but WITHOUT ANY WARRANTY; without even the implied warranty of
21
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22
* GNU General Public License for more details.
23
*
24
* You should have received a copy of the GNU General Public License
25
* along with this program; if not, write to the Free Software
26
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
27
*
28
* For more information, contact:
29
*
30
*  Generalitat Valenciana
31
*   Conselleria d'Infraestructures i Transport
32
*   Av. Blasco Ib��ez, 50
33
*   46010 VALENCIA
34
*   SPAIN
35
*
36
*      +34 963862235
37
*   gvsig@gva.es
38
*      www.gvsig.gva.es
39
*
40
*    or
41
*
42
*   IVER T.I. S.A
43
*   Salamanca 50
44
*   46005 Valencia
45
*   Spain
46
*
47
*   +34 963163400
48
*   dac@iver.es
49
*/
50

    
51

    
52
#include <jni.h>
53
#include <string.h>
54
#include "es_gva_cit_jmrsid_LTIMetadataRecord.h"
55
#include "es_gva_cit_jmrsid_JNIBase.h"
56
#include "lti_metadataRecord.h"
57

    
58
LT_USE_NAMESPACE(LizardTech);
59

    
60
/******************************************************************************/
61
//                                                         getTagName
62
/******************************************************************************/
63

    
64
JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getTagNameNat
65
  (JNIEnv *env, jobject obj, jlong cPtr){
66
          
67
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
68
          jstring res=NULL;
69
          const char *tagname;
70
                    
71
    record = *(LTIMetadataRecord **)&cPtr;
72
    
73
    if(record!=NULL){
74
                tagname=record->getTagName();
75
                res = env->NewStringUTF(tagname); 
76
    }
77

    
78
    return res;
79
          
80
  }
81
  
82
/******************************************************************************/
83
//                                                         isScalar
84
/******************************************************************************/
85

    
86
  JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isScalarNat
87
  (JNIEnv *env, jobject obj, jlong cPtr){
88
          
89
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
90
          
91
          record = *(LTIMetadataRecord **)&cPtr;
92
          
93
          if(record!=NULL){
94
                  if (record->isScalar())return 1;
95
                  else return 0;
96
          }else return -1; 
97
  }
98

    
99

    
100
/******************************************************************************/
101
//                                                         isVector
102
/******************************************************************************/
103

    
104
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isVectorNat
105
  (JNIEnv *env, jobject obj, jlong cPtr){
106
          
107
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
108
          
109
          record = *(LTIMetadataRecord **)&cPtr;
110
          
111
          if(record!=NULL){
112
                  if (record->isVector())return 1;
113
                  else return 0;
114
          }else return -1;
115
  }
116

    
117
/******************************************************************************/
118
//                                                         isArray
119
/******************************************************************************/
120

    
121
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isArrayNat
122
  (JNIEnv *env, jobject obj, jlong cPtr){
123
          
124
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
125
          
126
          record = *(LTIMetadataRecord **)&cPtr;
127
          
128
          if(record!=NULL){
129
                  if (record->isArray())return 1;
130
                  else return 0;
131
          }else return -1;
132
  }
133

    
134
/******************************************************************************/
135
//                                                         getDataType
136
/******************************************************************************/
137

    
138
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDataTypeNat
139
  (JNIEnv *env, jobject obj, jlong cPtr){
140
          
141
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
142
          
143
          record = *(LTIMetadataRecord **)&cPtr;
144
          
145
          if(record!=NULL){
146
                  switch (record->getDataType())
147
                   {
148
                           case LTI_METADATA_DATATYPE_UINT8:
149
                        case LTI_METADATA_DATATYPE_SINT8:
150
                    case LTI_METADATA_DATATYPE_UINT16:
151
                           case LTI_METADATA_DATATYPE_SINT16:
152
                    case LTI_METADATA_DATATYPE_UINT32:
153
                    case LTI_METADATA_DATATYPE_SINT32:
154
                    case LTI_METADATA_DATATYPE_UINT64:
155
                    case LTI_METADATA_DATATYPE_SINT64:return 0;break;
156
                    case LTI_METADATA_DATATYPE_FLOAT32:
157
                    case LTI_METADATA_DATATYPE_FLOAT64:return 1;break;
158
                    case LTI_METADATA_DATATYPE_ASCII:return 2;break;
159
           }
160
          }
161
          
162
          return -1;
163
  }
164

    
165
/******************************************************************************/
166
//                                                         getScalarData
167
/******************************************************************************/
168

    
169
JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getScalarDataNat
170
  (JNIEnv *env, jobject obj, jlong cPtr){
171
          
172
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
173
          record = *(LTIMetadataRecord **)&cPtr;
174
          
175
          if(record!=NULL){
176
                  char dato[8192];
177
                  const void* data = record->getScalarData();
178
                  switch (record->getDataType())
179
                           {
180
                                case LTI_METADATA_DATATYPE_UINT8:
181
                              sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[0]);
182
                              break;
183
                            case LTI_METADATA_DATATYPE_SINT8:
184
                              sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[0]);
185
                              break;
186
                            case LTI_METADATA_DATATYPE_UINT16:
187
                              sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[0]);
188
                              break;
189
                            case LTI_METADATA_DATATYPE_SINT16:
190
                              sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[0]);
191
                              break;
192
                            case LTI_METADATA_DATATYPE_UINT32:
193
                              sprintf(dato, "%d", ((lt_uint32*)data)[0]);
194
                              break;
195
                            case LTI_METADATA_DATATYPE_SINT32:
196
                              sprintf(dato, "%d", ((lt_int32*)data)[0]);
197
                              break;
198
                            case LTI_METADATA_DATATYPE_UINT64:
199
                              sprintf(dato, "%I64u", ((lt_uint64*)data)[0]);
200
                              break;
201
                            case LTI_METADATA_DATATYPE_SINT64:
202
                              sprintf(dato, "%I64d", ((lt_int64*)data)[0]);
203
                              break;
204
                            case LTI_METADATA_DATATYPE_FLOAT32:
205
                              sprintf(dato, "%f", ((float*)data)[0]);
206
                              break;
207
                            case LTI_METADATA_DATATYPE_FLOAT64:
208
                              sprintf(dato, "%f", ((double*)data)[0]);
209
                              break;
210
                            case LTI_METADATA_DATATYPE_ASCII:
211
                              {
212
                                      
213
                                 const char* p = ((const char**)data)[0];
214
                                 if(strlen(p)>8192)
215
                                         strncpy(dato,p,8192);
216
                                 else
217
                                         sprintf(dato,"%s", p);
218
                              }
219
                              break;
220
                           }
221
           
222
           return env->NewStringUTF(dato); 
223
           
224
                  
225
          }else return NULL;
226
  }
227

    
228

    
229

    
230

    
231
/******************************************************************************/
232
//                                                         getVectorData
233
/******************************************************************************/
234

    
235
JNIEXPORT jobject JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getVectorDataNat
236
  (JNIEnv *env, jobject obj, jlong cPtr){
237
          
238
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
239
           char dato[255];
240
         jclass clase;
241
         jmethodID metodo;
242
         jobject obj_stringarray;
243
         jfieldID id_campo;
244
           jobjectArray arr_string;
245
                      
246
          record = *(LTIMetadataRecord **)&cPtr;
247
          
248
          if(record!=NULL){
249
                  lt_uint32 len=0;
250
            const void* data = record->getVectorData(len);
251
            
252
            clase = env->FindClass ("es/gva/cit/jmrsid/StringArray");
253
                   metodo = env->GetMethodID(clase, "reserva", "(I)V");
254
                   obj_stringarray = env->NewObject (clase,metodo,len);
255
                   id_campo = env->GetFieldID(clase, "array", "[Ljava/lang/String;");
256
                   arr_string =(jobjectArray)env->GetObjectField(obj_stringarray, id_campo);
257
                   
258
              for (lt_uint32 i=0; i<len; i++)
259
              {
260
                          switch (record->getDataType())
261
                           {
262
                                case LTI_METADATA_DATATYPE_UINT8:
263
                              sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[i]);
264
                              break;
265
                            case LTI_METADATA_DATATYPE_SINT8:
266
                              sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[i]);
267
                              break;
268
                            case LTI_METADATA_DATATYPE_UINT16:
269
                              sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[i]);
270
                              break;
271
                            case LTI_METADATA_DATATYPE_SINT16:
272
                              sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[i]);
273
                              break;
274
                            case LTI_METADATA_DATATYPE_UINT32:
275
                              sprintf(dato, "%d", ((lt_uint32*)data)[i]);
276
                              break;
277
                            case LTI_METADATA_DATATYPE_SINT32:
278
                              sprintf(dato, "%d", ((lt_int32*)data)[i]);
279
                              break;
280
                            case LTI_METADATA_DATATYPE_UINT64:
281
                              sprintf(dato, "%I64u", ((lt_uint64*)data)[i]);
282
                              break;
283
                            case LTI_METADATA_DATATYPE_SINT64:
284
                              sprintf(dato, "%I64d", ((lt_int64*)data)[i]);
285
                              break;
286
                            case LTI_METADATA_DATATYPE_FLOAT32:
287
                              sprintf(dato, "%f", ((float*)data)[i]);
288
                              break;
289
                            case LTI_METADATA_DATATYPE_FLOAT64:
290
                              sprintf(dato, "%f", ((double*)data)[i]);
291
                              break;
292
                            case LTI_METADATA_DATATYPE_ASCII:
293
                              {
294
                                 const char* p = ((const char**)data)[i];
295
                                 sprintf(dato,"%s", p);
296
                              }
297
                              break;
298
                   }
299

    
300
                   env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato));
301
                    
302
            }
303
            
304
          }
305
          
306
          return obj_stringarray;
307
          
308
  }
309

    
310
/******************************************************************************/
311
//                                                         getArrayData
312
/******************************************************************************/
313

    
314
JNIEXPORT jobject JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getArrayDataNat
315
  (JNIEnv *env, jobject obj, jlong cPtr){
316
          
317
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
318
           char dato[255];
319
         jclass clase;
320
         jmethodID metodo;
321
         jobject obj_stringarray;
322
         jfieldID id_campo;
323
           jobjectArray arr_string;
324
                      
325
          record = *(LTIMetadataRecord **)&cPtr;
326
          
327
          if(record!=NULL){
328
                  
329
                  lt_uint32 numDims=0;
330
              const lt_uint32* dims=NULL;
331
        const void* data = record->getArrayData(numDims, dims);
332
              lt_uint32 i=0;
333
              lt_uint32 d=0;
334
              
335
            
336
            clase = env->FindClass ("es/gva/cit/jmrsid/StringArray");
337
                   metodo = env->GetMethodID(clase, "reserva", "(I)V");
338
                   obj_stringarray = env->NewObject (clase,metodo,numDims*(*dims));
339
                   id_campo = env->GetFieldID(clase, "array", "[Ljava/lang/String;");
340
                   arr_string =(jobjectArray)env->GetObjectField(obj_stringarray, id_campo);
341
                   
342
              for (d=0; d<numDims; d++)
343
              {
344

    
345
                 lt_uint32 nd=0;
346
                         for (nd=0; nd<dims[d]; nd++)
347
                 {
348
                                  switch (record->getDataType())
349
                                   {
350
                                        case LTI_METADATA_DATATYPE_UINT8:
351
                                      sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[i]);
352
                                      break;
353
                                    case LTI_METADATA_DATATYPE_SINT8:
354
                                      sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[i]);
355
                                      break;
356
                                    case LTI_METADATA_DATATYPE_UINT16:
357
                                      sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[i]);
358
                                      break;
359
                                    case LTI_METADATA_DATATYPE_SINT16:
360
                                      sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[i]);
361
                                      break;
362
                                    case LTI_METADATA_DATATYPE_UINT32:
363
                                      sprintf(dato, "%d", ((lt_uint32*)data)[i]);
364
                                      break;
365
                                    case LTI_METADATA_DATATYPE_SINT32:
366
                                      sprintf(dato, "%d", ((lt_int32*)data)[i]);
367
                                      break;
368
                                    case LTI_METADATA_DATATYPE_UINT64:
369
                                      sprintf(dato, "%I64u", ((lt_uint64*)data)[i]);
370
                                      break;
371
                                    case LTI_METADATA_DATATYPE_SINT64:
372
                                      sprintf(dato, "%I64d", ((lt_int64*)data)[i]);
373
                                      break;
374
                                    case LTI_METADATA_DATATYPE_FLOAT32:
375
                                      sprintf(dato, "%f", ((float*)data)[i]);
376
                                      break;
377
                                    case LTI_METADATA_DATATYPE_FLOAT64:
378
                                      sprintf(dato, "%f", ((double*)data)[i]);
379
                                      break;
380
                                    case LTI_METADATA_DATATYPE_ASCII:
381
                                      {
382
                                         const char* p = ((const char**)data)[i];
383
                                         sprintf(dato,"%s", p);
384
                                      }
385
                                      break;
386
                           }
387
        
388
                           env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato));
389
                            
390
                       ++i;
391
                 }
392
              }
393
            
394
          }
395
          
396
          return obj_stringarray;
397
  }
398
  
399
/******************************************************************************/
400
//                                                         getNumDims
401
/******************************************************************************/
402

    
403
  JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getNumDimsNat
404
  (JNIEnv *env, jobject obj, jlong cPtr){
405
          
406
          jint dims=-1;
407
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
408
          record = *(LTIMetadataRecord **)&cPtr;
409
          if(record!=NULL){
410
                  dims = (jint)record->getNumDims();
411
          }
412
          return dims;
413
  }
414

    
415
/******************************************************************************/
416
//                                                         getDims
417
/******************************************************************************/
418

    
419
JNIEXPORT jintArray JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDimsNat
420
  (JNIEnv *env, jobject obj, jlong cPtr){
421
          
422
          jintArray longitudes=NULL;
423
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
424
          record = *(LTIMetadataRecord **)&cPtr;
425
          if(record!=NULL){
426
                  const lt_uint32* dims = record->getDims();
427
                  const lt_uint32 numdims = record->getNumDims();
428
                  longitudes = env->NewIntArray((int)numdims);
429
                  env->SetIntArrayRegion( longitudes, 0, (int)numdims,(jint *)dims); 
430

    
431
          }
432
          return longitudes;
433
  }
434
  
435
  
436
/******************************************************************************/
437
//                                                                 ~LTIMetadataRecord
438
/******************************************************************************/
439
  
440
JNIEXPORT void JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_FreeLTIMetadataRecordNat
441
  (JNIEnv *env, jobject obj, jlong cPtr){
442
          
443
          LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
444
          
445
          record = *(LTIMetadataRecord **)&cPtr;
446
          if(record!=NULL){
447
                  delete record;
448
          }
449
          
450
  }