Statistics
| Revision:

root / trunk / libraries / libjni-mrsid-macosx / src / ltimetadatarecord.cpp @ 25868

History | View | Annotate | Download (14 KB)

1
/**********************************************************************
2
 * $Id: ltimetadatarecord.cpp 9099 2006-11-29 12:16:22Z mija $
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

    
57
#include "lt_types.h"
58
#include "lt_base.h"
59
#include "lt_fileSpec.h"
60
#include "lti_geoCoord.h"
61
#include "lti_pixel.h"
62
#include "lti_navigator.h"
63
#include "lti_sceneBuffer.h"
64
#include "lti_metadataDatabase.h"
65
#include "lti_metadataRecord.h"
66
#include "lti_utils.h"
67
#include "MrSIDImageReader.h"
68
#include "J2KImageReader.h"
69
#include "lti_imageReader.h"
70
#include "lti_sceneBuffer.h"
71
#include "lti_scene.h"
72
//#include "cpl_conv.h"
73
//#include "TIFFImageWriter.h"
74

    
75
LT_USE_NAMESPACE(LizardTech);
76

    
77
/******************************************************************************/
78
//                                                         getTagName
79
/******************************************************************************/
80

    
81
JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getTagNameNat
82
  (JNIEnv *env, jobject obj, jlong cPtr){
83
          
84
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
85
          jstring res=NULL;
86
          const char *tagname;
87
                    
88
    record = *(LTIMetadataRecord **)&cPtr;
89
    
90
    if(record!=NULL){
91
                tagname=record->getTagName();
92
                res = env->NewStringUTF(tagname); 
93
    }
94

    
95
    return res;
96
          
97
  }
98
  
99
/******************************************************************************/
100
//                                                         isScalar
101
/******************************************************************************/
102

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

    
116

    
117
/******************************************************************************/
118
//                                                         isVector
119
/******************************************************************************/
120

    
121
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isVectorNat
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->isVector())return 1;
130
                  else return 0;
131
          }else return -1;
132
  }
133

    
134
/******************************************************************************/
135
//                                                         isArray
136
/******************************************************************************/
137

    
138
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_isArrayNat
139
  (JNIEnv *env, jobject obj, jlong cPtr){
140
          
141
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
142
          
143
          record = *(LTIMetadataRecord **)&cPtr;
144
          
145
          if(record!=NULL){
146
                  if (record->isArray())return 1;
147
                  else return 0;
148
          }else return -1;
149
  }
150

    
151
/******************************************************************************/
152
//                                                         getDataType
153
/******************************************************************************/
154

    
155
JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDataTypeNat
156
  (JNIEnv *env, jobject obj, jlong cPtr){
157
          
158
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
159
          
160
          record = *(LTIMetadataRecord **)&cPtr;
161
          
162
          if(record!=NULL){
163
                  switch (record->getDataType())
164
                   {
165
                           case LTI_METADATA_DATATYPE_UINT8:
166
                        case LTI_METADATA_DATATYPE_SINT8:
167
                    case LTI_METADATA_DATATYPE_UINT16:
168
                           case LTI_METADATA_DATATYPE_SINT16:
169
                    case LTI_METADATA_DATATYPE_UINT32:
170
                    case LTI_METADATA_DATATYPE_SINT32:
171
                    case LTI_METADATA_DATATYPE_UINT64:
172
                    case LTI_METADATA_DATATYPE_SINT64:return 0;break;
173
                    case LTI_METADATA_DATATYPE_FLOAT32:
174
                    case LTI_METADATA_DATATYPE_FLOAT64:return 1;break;
175
                    case LTI_METADATA_DATATYPE_ASCII:return 2;break;
176
           }
177
          }
178
          
179
          return -1;
180
  }
181

    
182
/******************************************************************************/
183
//                                                         getScalarData
184
/******************************************************************************/
185

    
186
JNIEXPORT jstring JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getScalarDataNat
187
  (JNIEnv *env, jobject obj, jlong cPtr){
188
          
189
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
190
          record = *(LTIMetadataRecord **)&cPtr;
191
          
192
          if(record!=NULL){
193
                  char dato[8192];
194
                  const void* data = record->getScalarData();
195
                  switch (record->getDataType())
196
                           {
197
                                case LTI_METADATA_DATATYPE_UINT8:
198
                              sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[0]);
199
                              break;
200
                            case LTI_METADATA_DATATYPE_SINT8:
201
                              sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[0]);
202
                              break;
203
                            case LTI_METADATA_DATATYPE_UINT16:
204
                              sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[0]);
205
                              break;
206
                            case LTI_METADATA_DATATYPE_SINT16:
207
                              sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[0]);
208
                              break;
209
                            case LTI_METADATA_DATATYPE_UINT32:
210
                              sprintf(dato, "%d", ((lt_uint32*)data)[0]);
211
                              break;
212
                            case LTI_METADATA_DATATYPE_SINT32:
213
                              sprintf(dato, "%d", ((lt_int32*)data)[0]);
214
                              break;
215
                            case LTI_METADATA_DATATYPE_UINT64:
216
                              sprintf(dato, "%I64u", ((lt_uint64*)data)[0]);
217
                              break;
218
                            case LTI_METADATA_DATATYPE_SINT64:
219
                              sprintf(dato, "%I64d", ((lt_int64*)data)[0]);
220
                              break;
221
                            case LTI_METADATA_DATATYPE_FLOAT32:
222
                              sprintf(dato, "%f", ((float*)data)[0]);
223
                              break;
224
                            case LTI_METADATA_DATATYPE_FLOAT64:
225
                              sprintf(dato, "%f", ((double*)data)[0]);
226
                              break;
227
                            case LTI_METADATA_DATATYPE_ASCII:
228
                              {
229
                                      
230
                                 const char* p = ((const char**)data)[0];
231
                                 if(strlen(p)>8192)
232
                                         strncpy(dato,p,8192);
233
                                 else
234
                                         sprintf(dato,"%s", p);
235
                              }
236
                              break;
237
                           }
238
           
239
           return env->NewStringUTF(dato); 
240
           
241
                  
242
          }else return NULL;
243
  }
244

    
245

    
246

    
247

    
248
/******************************************************************************/
249
//                                                         getVectorData
250
/******************************************************************************/
251

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

    
317
                   env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato));
318
                    
319
            }
320
            
321
          }
322
          
323
          return obj_stringarray;
324
          
325
  }
326

    
327
/******************************************************************************/
328
//                                                         getArrayData
329
/******************************************************************************/
330

    
331
JNIEXPORT jobject JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getArrayDataNat
332
  (JNIEnv *env, jobject obj, jlong cPtr){
333
          
334
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
335
           char dato[255];
336
         jclass clase;
337
         jmethodID metodo;
338
         jobject obj_stringarray;
339
         jfieldID id_campo;
340
           jobjectArray arr_string;
341
                      
342
          record = *(LTIMetadataRecord **)&cPtr;
343
          
344
          if(record!=NULL){
345
                  
346
                  lt_uint32 numDims=0;
347
              const lt_uint32* dims=NULL;
348
        const void* data = record->getArrayData(numDims, dims);
349
              lt_uint32 i=0;
350
              lt_uint32 d=0;
351
              
352
            
353
            clase = env->FindClass ("es/gva/cit/jmrsid/StringArray");
354
                   metodo = env->GetMethodID(clase, "reserva", "(I)V");
355
                   obj_stringarray = env->NewObject (clase,metodo,numDims*(*dims));
356
                   id_campo = env->GetFieldID(clase, "array", "[Ljava/lang/String;");
357
                   arr_string =(jobjectArray)env->GetObjectField(obj_stringarray, id_campo);
358
                   
359
              for (d=0; d<numDims; d++)
360
              {
361

    
362
                 lt_uint32 nd=0;
363
                         for (nd=0; nd<dims[d]; nd++)
364
                 {
365
                                  switch (record->getDataType())
366
                                   {
367
                                        case LTI_METADATA_DATATYPE_UINT8:
368
                                      sprintf(dato, "%d", (lt_uint32)((lt_uint8*)data)[i]);
369
                                      break;
370
                                    case LTI_METADATA_DATATYPE_SINT8:
371
                                      sprintf(dato, "%d", (lt_int32)((lt_int8*)data)[i]);
372
                                      break;
373
                                    case LTI_METADATA_DATATYPE_UINT16:
374
                                      sprintf(dato, "%d", (lt_uint32)((lt_uint16*)data)[i]);
375
                                      break;
376
                                    case LTI_METADATA_DATATYPE_SINT16:
377
                                      sprintf(dato, "%d", (lt_int32)((lt_int16*)data)[i]);
378
                                      break;
379
                                    case LTI_METADATA_DATATYPE_UINT32:
380
                                      sprintf(dato, "%d", ((lt_uint32*)data)[i]);
381
                                      break;
382
                                    case LTI_METADATA_DATATYPE_SINT32:
383
                                      sprintf(dato, "%d", ((lt_int32*)data)[i]);
384
                                      break;
385
                                    case LTI_METADATA_DATATYPE_UINT64:
386
                                      sprintf(dato, "%I64u", ((lt_uint64*)data)[i]);
387
                                      break;
388
                                    case LTI_METADATA_DATATYPE_SINT64:
389
                                      sprintf(dato, "%I64d", ((lt_int64*)data)[i]);
390
                                      break;
391
                                    case LTI_METADATA_DATATYPE_FLOAT32:
392
                                      sprintf(dato, "%f", ((float*)data)[i]);
393
                                      break;
394
                                    case LTI_METADATA_DATATYPE_FLOAT64:
395
                                      sprintf(dato, "%f", ((double*)data)[i]);
396
                                      break;
397
                                    case LTI_METADATA_DATATYPE_ASCII:
398
                                      {
399
                                         const char* p = ((const char**)data)[i];
400
                                         sprintf(dato,"%s", p);
401
                                      }
402
                                      break;
403
                           }
404
        
405
                           env->SetObjectArrayElement(arr_string,i,env->NewStringUTF(dato));
406
                            
407
                       ++i;
408
                 }
409
              }
410
            
411
          }
412
          
413
          return obj_stringarray;
414
  }
415
  
416
/******************************************************************************/
417
//                                                         getNumDims
418
/******************************************************************************/
419

    
420
  JNIEXPORT jint JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getNumDimsNat
421
  (JNIEnv *env, jobject obj, jlong cPtr){
422
          
423
          jint dims=-1;
424
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
425
          record = *(LTIMetadataRecord **)&cPtr;
426
          if(record!=NULL){
427
                  dims = (jint)record->getNumDims();
428
          }
429
          return dims;
430
  }
431

    
432
/******************************************************************************/
433
//                                                         getDims
434
/******************************************************************************/
435

    
436
JNIEXPORT jintArray JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_getDimsNat
437
  (JNIEnv *env, jobject obj, jlong cPtr){
438
          
439
          jintArray longitudes=NULL;
440
          LTIMetadataRecord *record  = (LTIMetadataRecord *) 0 ;
441
          record = *(LTIMetadataRecord **)&cPtr;
442
          if(record!=NULL){
443
                  const lt_uint32* dims = record->getDims();
444
                  const lt_uint32 numdims = record->getNumDims();
445
                  longitudes = env->NewIntArray((int)numdims);
446
                  env->SetIntArrayRegion( longitudes, 0, (int)numdims,(jint *)dims); 
447

    
448
          }
449
          return longitudes;
450
  }
451
  
452
  
453
/******************************************************************************/
454
//                                                                 ~LTIMetadataRecord
455
/******************************************************************************/
456
  
457
JNIEXPORT void JNICALL Java_es_gva_cit_jmrsid_LTIMetadataRecord_FreeLTIMetadataRecordNat
458
  (JNIEnv *env, jobject obj, jlong cPtr){
459
          
460
          LTIMetadataRecord *record = (LTIMetadataRecord *) 0 ;
461
          
462
          record = *(LTIMetadataRecord **)&cPtr;
463
          if(record!=NULL){
464
                  delete record;
465
          }
466
          
467
  }