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);
}
}
}