Search in sources :

Example 1 with Time

use of com.sforce.ws.types.Time in project components by Talend.

the class SalesforceWriter method addSObjectField.

private void addSObjectField(XmlObject xmlObject, Schema expected, String fieldName, Object value) {
    Object valueToAdd = null;
    // Convert stuff here
    // For Nillable base64 type field, we retrieve it as UNION type:[bytes,null]
    // So need to unwrap it and get its real type
    Schema unwrapSchema = AvroUtils.unwrapIfNullable(expected);
    switch(unwrapSchema.getType()) {
        case BYTES:
            if ((value instanceof String) || (value instanceof byte[])) {
                byte[] base64Data = null;
                if (value instanceof byte[]) {
                    base64Data = (byte[]) value;
                } else {
                    base64Data = ((String) value).getBytes();
                }
                if (Base64.isBase64(new String(base64Data))) {
                    valueToAdd = Base64.decode(base64Data);
                    break;
                }
            }
        default:
            valueToAdd = value;
            break;
    }
    if (valueToAdd instanceof Date) {
        xmlObject.setField(fieldName, SalesforceRuntime.convertDateToCalendar((Date) valueToAdd, true));
    } else {
        Schema.Field se = moduleSchema.getField(fieldName);
        if (se != null && valueToAdd instanceof String) {
            String datePattern = se.getProp(SchemaConstants.TALEND_COLUMN_PATTERN);
            if (datePattern != null && !datePattern.toString().isEmpty()) {
                if ("yyyy-MM-dd'T'HH:mm:ss'.000Z'".equals(datePattern)) {
                    xmlObject.setField(fieldName, calendarCodec.deserialize((String) valueToAdd));
                } else if ("yyyy-MM-dd".equals(datePattern)) {
                    xmlObject.setField(fieldName, dateCodec.deserialize((String) valueToAdd));
                } else {
                    xmlObject.setField(fieldName, new Time((String) valueToAdd));
                }
            } else {
                xmlObject.setField(fieldName, SalesforceAvroRegistry.get().getConverterFromString(se).convertToAvro((String) valueToAdd));
            }
        } else {
            xmlObject.setField(fieldName, valueToAdd);
        }
    }
}
Also used : Schema(org.apache.avro.Schema) XmlObject(com.sforce.ws.bind.XmlObject) SObject(com.sforce.soap.partner.sobject.SObject) Time(com.sforce.ws.types.Time) Date(java.util.Date)

Aggregations

SObject (com.sforce.soap.partner.sobject.SObject)1 XmlObject (com.sforce.ws.bind.XmlObject)1 Time (com.sforce.ws.types.Time)1 Date (java.util.Date)1 Schema (org.apache.avro.Schema)1