示例#1
0
/*
 * Class:     nitf_LookupTable
 * Method:    construct
 * Signature: (II[B)V
 */
JNIEXPORT void JNICALL Java_nitf_LookupTable_construct
(JNIEnv * env, jobject self, jint numTables, jint numEntries,
        jbyteArray lutData)
{
    nitf_LookupTable *lut = NULL;
    nitf_Error error;
    char *dataBuf = NULL;

    /* construct the LUT */
    lut = nitf_LookupTable_construct((nitf_Uint32) numTables,
            (nitf_Uint32) numEntries, &error);

    if (!lut)
    {
        /* throw an error */
        _ThrowNITFException(env, error.message);
        return;
    }

    dataBuf = (char *) (*env)->GetByteArrayElements(env, lutData, 0);
    if (!dataBuf)
    {
        _ThrowNITFException(env, "Out of memory!");
        return;
    }

    /* initialize the data */
    nitf_LookupTable_init(lut, (nitf_Uint32) numTables,
            (nitf_Uint32) numEntries, (NITF_DATA *) dataBuf,
            &error);

    (*env)->ReleaseByteArrayElements(env, lutData, dataBuf, 0);
    _SetObj(env, self, lut);
}
示例#2
0
/*
 * Class:     nitf_ImageSubheader
 * Method:    getBandInfo
 * Signature: ()[Lnitf/BandInfo;
 */
JNIEXPORT jobjectArray JNICALL Java_nitf_ImageSubheader_getBandInfo
    (JNIEnv * env, jobject self)
{
    nitf_ImageSubheader *header = _GetObj(env, self);

    jclass infoClass = (*env)->FindClass(env, "nitf/BandInfo");
    nitf_Error error;
    jobjectArray info;
    jobject element;
    jint i;
    jint numBands;
    jint numXBands;
    jmethodID methodID;

    NITF_TRY_GET_UINT32(header->numImageBands, &numBands, &error);
    NITF_TRY_GET_UINT32(header->numMultispectralImageBands, &numXBands,
                        &error);
    numBands = numXBands > 0 ? numXBands : numBands;
    info = (*env)->NewObjectArray(env, numBands, infoClass, NULL);
    methodID = (*env)->GetMethodID(env, infoClass, "<init>", "(J)V");
    for (i = 0; i < numBands; ++i)
    {
        element = (*env)->NewObject(env,
                                    infoClass,
                                    methodID, (jlong) header->bandInfo[i]);
        (*env)->SetObjectArrayElement(env, info, i, element);
    }
    return info;

  CATCH_ERROR:
    _ThrowNITFException(env, error.message);
    return NULL;
}
示例#3
0
/*
 * Class:     nitf_ImageSource
 * Method:    getBand
 * Signature: (I)Lnitf/BandSource;
 */
JNIEXPORT jobject JNICALL Java_nitf_ImageSource_getBand
    (JNIEnv * env, jobject self, jint number)
{
    nitf_ImageSource *source = _GetObj(env, self);
    nitf_BandSource *bandSource;
    jobject bandSourceObject;
    nitf_Error error;
    jclass bandSourceClass = (*env)->FindClass(env, "nitf/BandSource");
    jmethodID methodID =
        (*env)->GetMethodID(env, bandSourceClass, "<init>", "(J)V");

    bandSource = nitf_ImageSource_getBand(source, number, &error);

    if (!bandSource)
    {
        _ThrowNITFException(env, error.message);
        return NULL;
    }

    /* make the object */
    bandSourceObject = (*env)->NewObject(env,
                                         bandSourceClass,
                                         methodID, (jlong) bandSource);
    return bandSourceObject;
}
示例#4
0
/*
 * Class:     nitf_ImageSource
 * Method:    addBand
 * Signature: (Lnitf/BandSource;)Z
 */
JNIEXPORT jboolean JNICALL Java_nitf_ImageSource_addBand
    (JNIEnv * env, jobject self, jobject jBandSource)
{
    nitf_ImageSource *source = _GetObj(env, self);
    nitf_BandSource *bandSource;
    nitf_Error error;
    jclass bandSourceClass = (*env)->FindClass(env, "nitf/BandSource");
    jmethodID methodID =
        (*env)->GetMethodID(env, bandSourceClass, "getAddress", "()J");

    bandSource = (nitf_BandSource *) (*env)->CallLongMethod(
            env, jBandSource, methodID);

    if (!bandSource)
    {
        return JNI_FALSE;
    }

    if (!nitf_ImageSource_addBand(source, bandSource, &error))
    {
        _ThrowNITFException(env, error.message);
        return JNI_FALSE;
    }

    /* Now, tell Java not to manage it anymore */
    _ManageObject(env, (jlong)bandSource, JNI_FALSE);

    return JNI_TRUE;
}
/*
 * Class:     nitf_PixelSkipDownSampler
 * Method:    construct
 * Signature: (II)V
 */
JNIEXPORT void JNICALL Java_nitf_PixelSkipDownSampler_construct
  (JNIEnv *env, jobject self, jint rowSkip, jint colSkip)
{
    nitf_Error error;
    jmethodID methodID;
    nitf_DownSampler *downSampler;

    jclass downSamplerClass = (*env)->FindClass(env, "nitf/DownSampler");
    jmethodID downSamplerMethodID = (*env)->GetStaticMethodID(env,
        downSamplerClass, "register", "(Lnitf/DownSampler;)V");

    if (rowSkip <= 0)
        rowSkip = 1;
    if (colSkip <= 0)
        colSkip = 1;

    downSampler =
        nitf_PixelSkip_construct(rowSkip, colSkip, &error);
    if (!downSampler)
    {
        _ThrowNITFException(env, error.message);
        return;
    }

    _SetObj(env, self, downSampler);

    /* now, we must also register this type */
    (*env)->CallStaticVoidMethod(env, downSamplerClass,
        downSamplerMethodID, self);

    return;
}
示例#6
0
JNIEXPORT jlong JNICALL Java_nitf_NativeIOInterface_seek
(JNIEnv *env, jobject self, jlong offset, jint whence)
{
    nitf_Error error;
    int cWhence;
    nitf_IOInterface *interface = _GetObj(env, self);

    switch(whence)
    {
    case nitf_IOInterface_SEEK_CUR:
        cWhence = NITF_SEEK_CUR;
        break;
    case nitf_IOInterface_SEEK_END:
        cWhence = NITF_SEEK_END;
        break;
    case nitf_IOInterface_SEEK_SET:
        cWhence = NITF_SEEK_SET;
        break;
    default:
        cWhence = NITF_SEEK_SET;
        break;
    }

    if (interface->iface->seek(interface->data, offset, cWhence, &error))
    {
        return interface->iface->tell(interface->data, &error);
    }
    else
    {
        _ThrowNITFException(env, error.message);
        return -1;
    }
}
示例#7
0
/*
 * Class:     nitf_Record
 * Method:    makeClone
 * Signature: ()Lnitf/Cloneable;
 */
JNIEXPORT jobject JNICALL Java_nitf_Record_makeClone
    (JNIEnv * env, jobject self)
{
    nitf_Record *record = _GetObj(env, self);
    nitf_Record *clone;
    jobject cloneObject;
    jclass recordClass = (*env)->FindClass(env, "nitf/Record");
    jmethodID methodID =
        (*env)->GetMethodID(env, recordClass, "<init>", "(J)V");
    nitf_Error error;

    /* clone it */
    clone = nitf_Record_clone(record, &error);

    if (!clone)
    {
        _ThrowNITFException(env, error.message);
        return NULL;
    }

    /* create the object */
    cloneObject = (*env)->NewObject(env,
                                    recordClass, methodID, (jlong) clone);

    /* set the clone function */
    methodID = (*env)->GetMethodID(env, recordClass, "setClone", "(Z)V");
    (*env)->CallVoidMethod(env, cloneObject, methodID, JNI_TRUE);

    return cloneObject;
}
示例#8
0
/*
 * Class:     nitf_ImageSubheader
 * Method:    getExtendedSection
 * Signature: ()Lnitf/Extensions;
 */
JNIEXPORT jobject JNICALL Java_nitf_ImageSubheader_getExtendedSection
    (JNIEnv * env, jobject self)
{
    nitf_ImageSubheader *header = _GetObj(env, self);

    jclass extensionsClass = (*env)->FindClass(env, "nitf/Extensions");
    jmethodID methodID =
        (*env)->GetMethodID(env, extensionsClass, "<init>", "(J)V");
    nitf_Error error;
    jobject extensions;

    /* we need to construct it if it doesn't already exist */
    if (!header->extendedSection)
    {
        header->extendedSection = nitf_Extensions_construct(&error);
        if (!header->extendedSection)
            goto CATCH_ERROR;
    }

    extensions = (*env)->NewObject(env,
                                   extensionsClass,
                                   methodID,
                                   (jlong) header->extendedSection);
    return extensions;

  CATCH_ERROR:
    _ThrowNITFException(env, error.message);
    return NULL;
}
示例#9
0
JNIEXPORT jobject JNICALL Java_nitf_Record_newDESegment
  (JNIEnv *env, jobject self)
{
    nitf_Record *record = _GetObj(env, self);
    nitf_DESegment *segment;
    nitf_Error error;

    jmethodID methodID;
    jobject segmentObject;
    jclass segmentClass = (*env)->FindClass(env, "nitf/DESegment");

    segment = nitf_Record_newDataExtensionSegment(record, &error);
    if (!segment)
        goto CATCH_ERROR;

    /* return it */
    methodID = (*env)->GetMethodID(env, segmentClass, "<init>", "(J)V");
    segmentObject = (*env)->NewObject(env,
                                      segmentClass,
                                      methodID, (jlong) segment);
    return segmentObject;

  CATCH_ERROR:
    _ThrowNITFException(env, error.message);
    return NULL;
}
示例#10
0
JNIEXPORT jobject JNICALL Java_cgm_MetafileReader_read
(JNIEnv *env, jobject self, jobject interface)
{
    nitf_Error error;
    nitf_IOInterface* io;
    cgm_Metafile *metafile;
    cgm_MetafileReader *reader = _GetObj(env, self);

    /* get some classIDs */
    jclass ioInterfaceClass = (*env)->GetObjectClass(env, interface);
    jclass metafileClass = (*env)->FindClass(env, "cgm/Metafile");

    /* get the IOInterface */
    jmethodID methodID =
        (*env)->GetMethodID(env, ioInterfaceClass, "getAddress", "()J");
    io = (nitf_IOInterface*) ((*env)->CallLongMethod(env, interface, methodID));

    /* just to be sure, seek to start of file */
    if (nitf_IOInterface_seek(io, 0, NITF_SEEK_SET, &error) == -1)
        goto CATCH_ERROR;

    if (!(metafile = cgm_MetafileReader_read(reader, io, &error)))
        goto CATCH_ERROR;

    methodID = (*env)->GetMethodID(env, metafileClass, "<init>", "(J)V");
    return (*env)->NewObject(env, metafileClass, methodID, (jlong) metafile);

CATCH_ERROR:
    _ThrowNITFException(env, error.message);
    return NULL;
}
示例#11
0
JNIEXPORT void JNICALL Java_nitf_BandSource_construct
    (JNIEnv * env, jobject self)
{
    /* make the interface */
    static nitf_IDataSource iBandSource = {
        &BandSource_read,
        &BandSource_destruct,
        &BandSource_getSize,
        &BandSource_setSize
    };

    /* the return bandSource */
    nitf_BandSource *bandSource = NULL;
    BandSourceImpl *impl;       /* gets malloc'd for this object */
    nitf_Error error;
    jclass bandSourceClass = (*env)->FindClass(env, "nitf/BandSource");
    jmethodID methodID = (*env)->GetStaticMethodID(env, bandSourceClass,
        "register", "(Lnitf/BandSource;)V");

    /* construct the persisent one */
    impl = (BandSourceImpl *) NITF_MALLOC(sizeof(BandSourceImpl));
    if (!impl)
    {
        _ThrowNITFException(env, "Out of memory");
        return;
    }

    /**************************************************************/
    /* THIS IS VERY IMPORTANT... WE MUST MAKE A STRONG GLOBAL REF */
    /**************************************************************/
    impl->self = (*env)->NewGlobalRef(env, self);

    bandSource = (nitf_BandSource *) NITF_MALLOC(sizeof(nitf_BandSource));
    if (!bandSource)
    {
        _ThrowNITFException(env, "Out of Memory");
        return;
    }
    bandSource->data = impl;
    bandSource->iface = &iBandSource;

    _SetObj(env, self, bandSource);

    /* now, we must also register this type */
    (*env)->CallStaticVoidMethod(env, bandSourceClass,
        methodID, self);
}
示例#12
0
/*
 * Class:     nitf_ImageSource
 * Method:    getBandSources
 * Signature: ()[Lnitf/BandSource;
 */
JNIEXPORT jobjectArray JNICALL Java_nitf_ImageSource_getBandSources
    (JNIEnv * env, jobject self)
{
    nitf_ImageSource *imageSource = _GetObj(env, self);

    jclass bandSourceClass = (*env)->FindClass(env, "nitf/BandSource");
    nitf_Error error;
    jobjectArray sources;
    jobject element;
    jint index = 0;
    jint num, actualNum = 0;
    jmethodID methodID;
    nitf_ListIterator iter, end;
    jlong address;      /* temp address */

    num = imageSource->size;

    /* iterate over the bandsources to get the correct count */
    iter = nitf_List_begin(imageSource->bandSources);
    end = nitf_List_end(imageSource->bandSources);
    while (nitf_ListIterator_notEqualTo(&iter, &end))
    {
        actualNum++;
        nitf_ListIterator_increment(&iter);
    }

    /* check to see if the size member is WRONG */
    if (num != actualNum)
    {
        num = actualNum;
        /* set the size member to the RIGHT value */
        imageSource->size = num;
    }

    sources = (*env)->NewObjectArray(env, num, bandSourceClass, NULL);
    methodID = (*env)->GetStaticMethodID(env, bandSourceClass, "getByAddress",
        "(J)Lnitf/BandSource;");

    index = 0;
    /* Now, iterate over the bandsources to create an array */
    iter = nitf_List_begin(imageSource->bandSources);
    end = nitf_List_end(imageSource->bandSources);
    while (nitf_ListIterator_notEqualTo(&iter, &end))
    {
        address = (jlong)((nitf_BandSource *)nitf_ListIterator_get(&iter));
        element = (*env)->CallStaticObjectMethod(env, bandSourceClass,
                methodID, address);
        (*env)->SetObjectArrayElement(env, sources, index++, element);
        nitf_ListIterator_increment(&iter);
    }
    return sources;

  CATCH_ERROR:
    _ThrowNITFException(env, error.message);
    return NULL;
}
示例#13
0
JNIEXPORT void JNICALL Java_nitf_NativeIOInterface_close
(JNIEnv *env, jobject self)
{
    nitf_Error error;
    nitf_IOInterface *interface = _GetObj(env, self);

    if (interface && interface->iface &&
            !interface->iface->close(interface->data, &error))
        _ThrowNITFException(env, error.message);
}
示例#14
0
/*
 * Class:     nitf_ImageSubheader
 * Method:    removeBand
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_nitf_ImageSubheader_removeBand
  (JNIEnv *env, jobject self, jint index)
{
    nitf_ImageSubheader *header = _GetObj(env, self);
    nitf_Error error;

    if (!nitf_ImageSubheader_removeBand(header, (nitf_Uint32) index, &error))
    {
        _ThrowNITFException(env, error.message);
    }
}
示例#15
0
JNIEXPORT void JNICALL Java_cgm_MetafileReader_construct
(JNIEnv *env, jobject self)
{
    cgm_MetafileReader *reader = NULL;
    nitf_Error error;

    reader = cgm_MetafileReader_construct(&error);
    if (!reader)
        _ThrowNITFException(env, "Unable to create new MetafileReader");
    _SetObj(env, self, reader);
}
示例#16
0
JNIEXPORT void JNICALL Java_nitf_MemorySource_setSize
  (JNIEnv *env, jobject self, jlong size)
{
    nitf_BandSource *source = _GetObj(env, self);
    nitf_Error error;

    if (!source->iface->setSize(source->data, (nitf_Off)size, &error))
    {
        _ThrowNITFException(env, error.message);
        return;
    }
}
示例#17
0
/*
 * Class:     nitf_Record
 * Method:    removeReservedExtensionSegment
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_nitf_Record_removeReservedExtensionSegment
  (JNIEnv *env, jobject self, jint segmentNumber)
{
	nitf_Record *record = _GetObj(env, self);
	nitf_Error error;

	if (!nitf_Record_removeReservedExtensionSegment(record, (nitf_Uint32)segmentNumber, &error))
	{
		_ThrowNITFException(env, error.message);
	}
	return;
}
示例#18
0
JNIEXPORT void JNICALL Java_nitf_NativeIOInterface_write
(JNIEnv *env, jobject self, jbyteArray buf, jint size)
{
    nitf_Error error;
    nitf_Off tell;
    jbyte *array = NULL;
    nitf_IOInterface *interface = _GetObj(env, self);

    array = (*env)->GetByteArrayElements(env, buf, 0);
    if (!array)
    {
        _ThrowNITFException(env, "Out of memory!");
        return;
    }

    if (!(interface->iface->write(interface->data, array, size, &error)))
    {
        _ThrowNITFException(env, error.message);
    }
    (*env)->ReleaseByteArrayElements(env, buf, array, 0);
}
示例#19
0
JNIEXPORT void JNICALL Java_nitf_Record_unmergeTREs
  (JNIEnv *env, jobject self)
{
	nitf_Record *record = _GetObj(env, self);
    nitf_Error error;

    if (!nitf_Record_unmergeTREs(record, &error))
    {
        _ThrowNITFException(env, error.message);
    }
    return;
}
示例#20
0
JNIEXPORT void JNICALL Java_nitf_Record_moveDataExtensionSegment
(JNIEnv *env, jobject self, jint oldIndex, jint newIndex)
{
    nitf_Record *record = _GetObj(env, self);
    nitf_Error error;

    if (!nitf_Record_moveDataExtensionSegment(record,
                    (nitf_Uint32)oldIndex, (nitf_Uint32)newIndex, &error))
    {
        _ThrowNITFException(env, error.message);
    }
    return;
}
示例#21
0
/*
 * Class:     nitf_ImageSubheader
 * Method:    removeImageComment
 * Signature: (I)Z
 */
JNIEXPORT jboolean JNICALL Java_nitf_ImageSubheader_removeImageComment
    (JNIEnv * env, jobject self, jint index)
{
    nitf_ImageSubheader *header = _GetObj(env, self);
    nitf_Error error;

    if (!nitf_ImageSubheader_removeImageComment(header, index, &error))
    {
        _ThrowNITFException(env, error.message);
        return JNI_FALSE;
    }
    return JNI_TRUE;
}
示例#22
0
/*
 * Class:     nitf_MemorySource
 * Method:    read
 * Signature: ([BI)V
 */
JNIEXPORT void JNICALL Java_nitf_MemorySource_read
    (JNIEnv * env, jobject self, jbyteArray buf, jint size)
{
    nitf_BandSource *source = _GetObj(env, self);
    jbyte *byteBuf;
    nitf_Error error;

    byteBuf = (*env)->GetByteArrayElements(env, buf, 0);
    if (!byteBuf)
    {
        _ThrowNITFException(env, "ERROR getting data from array");
        return;
    }

    if (!source->iface->read(source->data, (char *) byteBuf, size, &error))
    {
        _ThrowNITFException(env, error.message);
        return;
    }

    (*env)->ReleaseByteArrayElements(env, buf, byteBuf, 0);
    return;
}
示例#23
0
/*
 * Class:     nitf_ImageSubheader
 * Method:    createBands
 * Signature: (I)Z
 */
JNIEXPORT jboolean JNICALL Java_nitf_ImageSubheader_createBands
    (JNIEnv * env, jobject self, jint numBands)
{
    nitf_ImageSubheader *header = _GetObj(env, self);
    nitf_Error error;

    if (!nitf_ImageSubheader_createBands
        (header, (nitf_Uint32) numBands, &error))
    {
        _ThrowNITFException(env, error.message);
        return JNI_FALSE;
    }
    return JNI_TRUE;
}
示例#24
0
JNIEXPORT jlong JNICALL Java_nitf_MemorySource_getSize
  (JNIEnv *env, jobject self)
{
    nitf_BandSource *source = _GetObj(env, self);
    nitf_Error error;
    nitf_Off size;

    if (0 > (size = source->iface->getSize(source->data, &error)))
    {
        _ThrowNITFException(env, error.message);
        return -1;
    }
    return (jlong)size;
}
示例#25
0
JNIEXPORT void JNICALL Java_nitf_WriteHandler_construct
  (JNIEnv *env, jobject self)
{
    /* make the interface */
    static nitf_IWriteHandler iWriteHandler = {
        &WriteHandler_write,
        &WriteHandler_destruct
    };

    nitf_WriteHandler *writeHandler = NULL;
    WriteHandlerImpl *impl = NULL;
    nitf_Error error;

    /* construct the persisent one */
    impl = (WriteHandlerImpl *) NITF_MALLOC(sizeof(WriteHandlerImpl));
    if (!impl)
    {
        _ThrowNITFException(env, "Out of memory");
        return;
    }

    /**************************************************************/
    /* THIS IS VERY IMPORTANT... WE MUST MAKE A STRONG GLOBAL REF */
    /**************************************************************/
    impl->self = (*env)->NewGlobalRef(env, self);

    writeHandler = (nitf_WriteHandler *) NITF_MALLOC(sizeof(nitf_WriteHandler));
    if (!writeHandler)
    {
        _ThrowNITFException(env, "Out of Memory");
        return;
    }
    writeHandler->data = impl;
    writeHandler->iface = &iWriteHandler;

    _SetObj(env, self, writeHandler);
}
示例#26
0
JNIEXPORT jlong JNICALL Java_nitf_NativeIOInterface_getSize(JNIEnv *env,
        jobject self)
{
    nitf_Error error;
    nitf_Off size;
    nitf_IOInterface *interface = _GetObj(env, self);

    size = interface->iface->getSize(interface->data, &error);
    if (size == (nitf_Off)NITF_INVALID_HANDLE_VALUE)
    {
        _ThrowNITFException(env, error.message);
        return -1;
    }
    return (jlong)size;
}
示例#27
0
JNIEXPORT jobject JNICALL Java_nitf_TRE_00024TREIterator_next
  (JNIEnv *env, jobject self)
{
    nitf_TREEnumerator *enumerator = _GetObj(env, self);
    nitf_Pair *pair = NULL;
    jclass fieldClass, fieldPairClass;
    jmethodID fieldInitMethod, fieldPairInitMethod;
    jfieldID nameFieldID, fieldFieldID;
    jobject jField, jFieldPair;
    jstring jFieldName;
    nitf_Error error;

    if (!enumerator)
        return NULL;

    /* get the next value */
    pair = enumerator->next(enumerator, &error);

    if (!pair)
    {
        _ThrowNITFException(env, "NULL pair");
        return NULL;
    }

    fieldClass = (*env)->FindClass(env, "nitf/Field");
    fieldPairClass = (*env)->FindClass(env, "nitf/TRE$FieldPair");

    nameFieldID = (*env)->GetFieldID(env, fieldPairClass, "name",
            "Ljava/lang/String;");
    fieldFieldID = (*env)->GetFieldID(env, fieldPairClass, "field",
            "Lnitf/Field;");

    fieldInitMethod =
            (*env)->GetMethodID(env, fieldClass, "<init>", "(J)V");
    fieldPairInitMethod =
            (*env)->GetMethodID(env, fieldPairClass, "<init>", "()V");

    jField = (*env)->NewObject(env,
            fieldClass, fieldInitMethod, (jlong) pair->data);
    jFieldName = (*env)->NewStringUTF(env, pair->key);
    jFieldPair = (*env)->NewObject(env,
            fieldPairClass, fieldPairInitMethod);

    (*env)->SetObjectField(env, jFieldPair, nameFieldID, jFieldName);
    (*env)->SetObjectField(env, jFieldPair, fieldFieldID, jField);

    return jFieldPair;
}
示例#28
0
/*
 * Class:     nitf_Record
 * Method:    construct
 * Signature: (Lnitf/Version;)V
 */
JNIEXPORT void JNICALL Java_nitf_Record_construct
    (JNIEnv * env, jobject self, jobject version)
{
    nitf_Record *record;
    nitf_Error error;

    nitf_Version nitfVersion = _GetNITFVersion(env, version);

    record = nitf_Record_construct(nitfVersion, &error);
    if (!record)
    {
        /* throw an error */
        _ThrowNITFException(env, error.message);
    }
    _SetObj(env, self, record);
}
示例#29
0
/*
 * Class:     nitf_SubWindow
 * Method:    construct
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_nitf_SubWindow_construct
    (JNIEnv * env, jobject self)
{
    nitf_SubWindow *subWindow;
    nitf_Error error;

    subWindow = nitf_SubWindow_construct(&error);
    if (!subWindow)
    {
        /* throw an error */
        _ThrowNITFException(env, error.message);
    }
    else
    {
        _SetObj(env, self, subWindow);
    }
}
示例#30
0
JNIEXPORT jobject JNICALL Java_nitf_DESubheader_setSubheaderFields
  (JNIEnv *env, jobject self, jobject subheaderFields)
{
    nitf_DESubheader *header = _GetObj(env, self);
    jobject tre = NULL;
    jmethodID initMethod = NULL, addressMethod = NULL;
    nitf_TRE *newTRE = NULL, *clonedTRE = NULL;
    jclass treClass = (*env)->FindClass(env, "nitf/TRE");
    nitf_Error error;

    if (subheaderFields != NULL)
    {
        initMethod = (*env)->GetMethodID(env, treClass, "<init>", "(J)V");
        addressMethod = (*env)->GetMethodID(env, treClass, "getAddress", "()J");

        /* get the address of the new one passed in */
        newTRE = (nitf_TRE*) (*env)->CallLongMethod(env, subheaderFields,
                                                    addressMethod);

        /* clone it */
        clonedTRE = nitf_TRE_clone(newTRE, &error);
        if (!clonedTRE)
        {
            _ThrowNITFException(env, error.message);
            return NULL;
        }
    }

    /* get the current TRE object, and tell Java we're done with it */
    if (header->subheaderFields)
    {
        _ManageObject(env, (jlong)header->subheaderFields, JNI_TRUE);
    }

    /* set the cloned one to the subheaderFields */
    header->subheaderFields = clonedTRE;

    if (clonedTRE != NULL)
    {
        /* create a new Java TRE from the clone and tell Java not to manage it */
        tre = _NewObject(env, (jlong)header->subheaderFields, "nitf/TRE");
        _ManageObject(env, (jlong)header->subheaderFields, JNI_FALSE);
    }
    return tre;
}