Search in sources :

Example 1 with EdmDateTimeOffset

use of org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset in project teiid by teiid.

the class EntityCollectionResponse method getPropertyValueInternal.

private static Object getPropertyValueInternal(SingletonPrimitiveType expectedType, boolean isArray, Object value) throws TransformationException, SQLException, IOException {
    Class<?> sourceType = DataTypeManager.getRuntimeType(value.getClass());
    if (sourceType.isAssignableFrom(expectedType.getDefaultType())) {
        return value;
    }
    if (expectedType instanceof EdmDate && sourceType == Date.class) {
        return value;
    } else if (expectedType instanceof EdmDateTimeOffset && sourceType == Timestamp.class) {
        return value;
    } else if (expectedType instanceof EdmTimeOfDay && sourceType == Time.class) {
        return value;
    } else if (expectedType instanceof EdmBinary) {
        // there could be memory implications here, should have been modeled as EdmStream
        // $NON-NLS-1$
        LogManager.logDetail(LogConstants.CTX_ODATA, "Possible OOM when inlining the stream based values");
        if (sourceType == ClobType.class) {
            return ClobType.getString((Clob) value).getBytes();
        }
        if (sourceType == SQLXML.class) {
            return ((SQLXML) value).getString().getBytes();
        }
        if (sourceType == BlobType.class) {
            return ObjectConverterUtil.convertToByteArray(((Blob) value).getBinaryStream());
        }
        if (value instanceof Serializable) {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(value);
            oos.close();
            bos.close();
            return bos.toByteArray();
        }
    }
    Class<?> targetType = DataTypeManager.getDataTypeClass(ODataTypeManager.teiidType(expectedType, isArray));
    if (sourceType != targetType) {
        Transform t = DataTypeManager.getTransform(sourceType, targetType);
        value = t != null ? t.transform(value, targetType) : value;
    }
    return value;
}
Also used : Blob(java.sql.Blob) Serializable(java.io.Serializable) EdmBinary(org.apache.olingo.commons.core.edm.primitivetype.EdmBinary) EdmDateTimeOffset(org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset) Time(java.sql.Time) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ObjectOutputStream(java.io.ObjectOutputStream) EdmDate(org.apache.olingo.commons.core.edm.primitivetype.EdmDate) EdmDate(org.apache.olingo.commons.core.edm.primitivetype.EdmDate) Date(java.sql.Date) ClobType(org.teiid.core.types.ClobType) SQLXML(java.sql.SQLXML) BlobType(org.teiid.core.types.BlobType) Transform(org.teiid.core.types.Transform) EdmTimeOfDay(org.apache.olingo.commons.core.edm.primitivetype.EdmTimeOfDay)

Aggregations

ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 ObjectOutputStream (java.io.ObjectOutputStream)1 Serializable (java.io.Serializable)1 Blob (java.sql.Blob)1 Date (java.sql.Date)1 SQLXML (java.sql.SQLXML)1 Time (java.sql.Time)1 EdmBinary (org.apache.olingo.commons.core.edm.primitivetype.EdmBinary)1 EdmDate (org.apache.olingo.commons.core.edm.primitivetype.EdmDate)1 EdmDateTimeOffset (org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset)1 EdmTimeOfDay (org.apache.olingo.commons.core.edm.primitivetype.EdmTimeOfDay)1 BlobType (org.teiid.core.types.BlobType)1 ClobType (org.teiid.core.types.ClobType)1 Transform (org.teiid.core.types.Transform)1