|
24 | 24 | import java.util.Date; |
25 | 25 | import java.util.HashMap; |
26 | 26 | import java.util.Map; |
| 27 | +import java.util.TimeZone; |
27 | 28 |
|
28 | 29 | import org.apache.xmlrpc.XmlRpcException; |
29 | 30 |
|
@@ -731,36 +732,72 @@ public RowCollection searchAndReadObject(final FilterCollection filter, final St |
731 | 732 | } |
732 | 733 |
|
733 | 734 | private Object formatValueForWrite(Field fld, Object value) { |
734 | | - if (value == null) |
735 | | - return false; |
| 735 | + Object result; |
| 736 | + if (value == null) { |
| 737 | + result = false; |
| 738 | + } else { |
| 739 | + result = formatValueBasedOnFieldTypeForWrite(fld, value); |
| 740 | + } |
| 741 | + return result; |
| 742 | + |
| 743 | + } |
736 | 744 |
|
| 745 | + private Object formatValueBasedOnFieldTypeForWrite(Field fld, Object value) { |
| 746 | + Object result; |
737 | 747 | switch (fld.getType()) { |
738 | 748 | case BOOLEAN: |
739 | | - // value = value; |
| 749 | + result = value; |
740 | 750 | break; |
741 | 751 | case FLOAT: |
742 | | - value = Double.parseDouble(value.toString()); |
743 | | - break; |
744 | | - case MANY2ONE: |
745 | | - value = Double.valueOf(value.toString()).intValue(); |
| 752 | + result = Double.valueOf(value.toString()); |
746 | 753 | break; |
747 | 754 | case MANY2MANY: |
748 | | - // For write, otherwise it is a comma separated list of strings used |
749 | | - // by import |
750 | | - if (value instanceof Object[]) |
751 | | - value = new Object[][] { new Object[] { 6, 0, (Object[]) value } }; |
| 755 | + result = formatManyToManyForWrite(value); |
752 | 756 | break; |
| 757 | + case MANY2ONE: |
753 | 758 | case ONE2MANY: |
754 | 759 | case INTEGER: |
755 | | - // To make sure 1.0 is converted to 1 |
756 | | - value = Double.valueOf(value.toString()).intValue(); |
| 760 | + result = formatIntegerForWrite(value); |
| 761 | + break; |
| 762 | + case DATE: |
| 763 | + result = formatDateForWrite(value); |
| 764 | + break; |
| 765 | + case DATETIME: |
| 766 | + result = formatDateTimeForWrite(value); |
757 | 767 | break; |
758 | 768 | default: |
759 | | - value = value.toString(); |
| 769 | + result = value.toString(); |
760 | 770 | break; |
761 | 771 | } |
| 772 | + return result; |
| 773 | + } |
762 | 774 |
|
763 | | - return value; |
| 775 | + private Object formatManyToManyForWrite(Object value) { |
| 776 | + // For write, otherwise it is a comma separated list of strings used |
| 777 | + // by import |
| 778 | + if (value instanceof Object[]) { |
| 779 | + Object[] tmp = new Object[] { 6, 0, (Object[]) value }; |
| 780 | + return new Object[][] { tmp }; |
| 781 | + } else { |
| 782 | + return value; |
| 783 | + } |
| 784 | + } |
| 785 | + |
| 786 | + private Object formatIntegerForWrite(Object value) { |
| 787 | + // To make sure 1.0 is converted to 1 |
| 788 | + return Double.valueOf(value.toString()).intValue(); |
| 789 | + } |
| 790 | + |
| 791 | + private Object formatDateTimeForWrite(Object value) { |
| 792 | + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| 793 | + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); |
| 794 | + return sdf.format(value); |
| 795 | + } |
| 796 | + |
| 797 | + private Object formatDateForWrite(Object value) { |
| 798 | + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| 799 | + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); |
| 800 | + return sdf.format(value); |
764 | 801 | } |
765 | 802 |
|
766 | 803 | /** |
|
0 commit comments