Package org.rococoa.internal

Source Code of org.rococoa.internal.StringTypeConverter

package org.rococoa.internal;

import org.rococoa.Foundation;
import org.rococoa.ID;

import com.sun.jna.FromNativeContext;
import com.sun.jna.NativeMapped;
import com.sun.jna.ToNativeContext;
import com.sun.jna.TypeConverter;

/**
* Converts between java.lang.String and Cocooa id, which it needs to return
* as Integer or Long depending on platform
*/
class StringTypeConverter implements TypeConverter {
    private static final NativeMapped nativeLongConverter = new ID();

    public Class<?> nativeType() {
        // see NSObjectTypeConverter.nativeType
        return nativeLongConverter.nativeType();
    }

    // Takes an Integer or Long representing id (32 or 64 bit respectively)
    // and returns a java.lang.String
    public String fromNative(Object nativeValue, FromNativeContext context) {
        Number nativeValueAsNumber = (Number) nativeValue;
        if (nativeValueAsNumber == null)
            return null;
        ID id = ID.fromLong(nativeValueAsNumber.longValue());
        if (id.isNull())
            return null;           
        return Foundation.toString(id);
    }

    // Takes java.lang.String and returns value of an id as Integer or Long
    public Object toNative(Object value, ToNativeContext context) {
        if (value == null)
            return null;
        String valueAsString = (String) value;
        ID valueAsID = Foundation.cfString(valueAsString);
        Foundation.sendReturnsID(valueAsID, "autorelease");
        return valueAsID.toNative();
    }
}
TOP

Related Classes of org.rococoa.internal.StringTypeConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.