package com.odoo.core.utils; import android.text.TextUtils; import com.odoo.core.orm.ODataRow; import com.odoo.core.orm.OModel; import com.odoo.core.orm.fields.OColumn; import org.json.JSONArray; import java.util.ArrayList; import java.util.List; import java.util.Set; import odoo.helper.ORecordValues; import odoo.helper.utils.gson.OdooRecord; public class OdooRecordUtils { public static <T> List<T> toList(JSONArray array) { List<T> list = new ArrayList<T>(); try { if (array != null) { for (int i = 0; i < array.length(); i++) { list.add((T) array.get(i)); } } } catch (Exception e) { e.printStackTrace(); } return list; } public static <T> JSONArray toArray(List<T> list) { JSONArray array = new JSONArray(); try { for (T obj : list) array.put(obj); } catch (Exception e) { e.printStackTrace(); } return array; } public static <T> List<T> toList(String list_data) { List<T> list = new ArrayList<>(); try { list.addAll(OdooRecordUtils.<T>toList(new JSONArray(list_data))); } catch (Exception e) { e.printStackTrace(); } return list; } public static ODataRow toDataRow(OdooRecord record) { ODataRow row = new ODataRow(); Set<String> keys = record.keySet(); for (String key : keys) { row.put(key, record.get(key)); } return row; } public static ORecordValues toRecordValues(ODataRow row) { ORecordValues json = new ORecordValues(); try { for (String key : row.keys()) { json.put(key, row.get(key)); } } catch (Exception e) { e.printStackTrace(); } return json; } public static ORecordValues createRecordValues(OModel model, ODataRow row) { ORecordValues values = new ORecordValues(); for (OColumn col : model.getColumns(false)) { if (col.getName().equals("id") && row.getInt("id") == 0) { /* FIXME: 7.0 not supporting Response from server : column "id" specified more than once */ continue; } if (col.getRelationType() == null) { if (!col.getName().equals("create_date") || !col.getName().equals("write_date")) { Object val = row.get(col.getName()); if (val == null || val.toString().equals("false") || TextUtils.isEmpty(val.toString())) { val = false; } values.put(col.getSyncColumn(), val); } } else { // Relation columns switch (col.getRelationType()) { case ManyToOne: if (!row.getString(col.getName()).equals("false")) { ODataRow m2o = row.getM2ORecord(col.getName()).browse(); if (m2o != null) { values.put(col.getSyncColumn(), m2o.getInt("id")); } } break; case OneToMany: List<Object> o2mRecords = new ArrayList<>(); List<ODataRow> o2mRecordList = row.getO2MRecord( col.getName()).browseEach(); if (o2mRecordList.size() > 0) { List<Integer> rec_ids = new ArrayList<>(); for (ODataRow o2mR : o2mRecordList) { if (o2mR.getInt("id") != 0) rec_ids.add(o2mR.getInt("id")); } o2mRecords.add(6); o2mRecords.add(false); o2mRecords.add(rec_ids); List<Object> oneToManyValue = new ArrayList<>(); oneToManyValue.add(o2mRecords); values.put(col.getSyncColumn(), oneToManyValue); } break; case ManyToMany: List<Object> m2mRecords = new ArrayList<>(); List<ODataRow> m2mRecordList = row.getM2MRecord( col.getName()).browseEach(); if (!m2mRecordList.isEmpty()) { List<Integer> rec_ids = new ArrayList<>(); for (ODataRow o2mR : m2mRecordList) { if (o2mR.getInt("id") != 0) rec_ids.add(o2mR.getInt("id")); } m2mRecords.add(6); m2mRecords.add(false); m2mRecords.add(rec_ids); List<Object> manyToManyRecord = new ArrayList<>(); manyToManyRecord.add(m2mRecords); values.put(col.getSyncColumn(), manyToManyRecord); } break; } } } return values; } }