@Override
 public JSONObject migrate(Item item, MigratorContext context) throws JSONException {
   JSONObject jsonObject = new JSONObject();
   CommonFieldsMigrator.migrateCommonFields(item, jsonObject, context);
   jsonObject.put("name", item.getName());
   jsonObject.put("isSubItemOf", item.isSubItemOf());
   Item parentItem = item.getParentItem();
   if (parentItem != null) {
     jsonObject.put("subItemOf", context.get("Item", parentItem.getID()));
   }
   jsonObject.put("iSellThisService", item.isISellThisItem());
   jsonObject.put("salesDescription", item.getSalesDescription());
   jsonObject.put("salesPrice", item.getSalesPrice());
   Account incomeAccount = item.getIncomeAccount();
   if (incomeAccount != null) {
     jsonObject.put("incomeAccount", context.get("Account", incomeAccount.getID()));
   }
   jsonObject.put("isTaxable", item.isTaxable());
   jsonObject.put("isCommissionItem", item.isCommissionItem());
   jsonObject.put("standardCost", item.getStandardCost());
   ItemGroup itemGroup = item.getItemGroup();
   if (itemGroup != null) {
     jsonObject.put("itemGroup", context.get("ItemGroup", itemGroup.getID()));
   }
   jsonObject.put("inActive", !item.isActive());
   jsonObject.put("iBuyThisService", item.isIBuyThisItem());
   jsonObject.put("purchaseDescription", item.getPurchaseDescription());
   jsonObject.put("purchasePrice", item.getPurchasePrice());
   Account expenseAccount = item.getExpenseAccount();
   if (expenseAccount != null) {
     jsonObject.put("expenseAccount", context.get("Account", expenseAccount.getID()));
   }
   Vendor preferredVendor = item.getPreferredVendor();
   if (preferredVendor != null) {
     jsonObject.put("preferredVendor", context.get("Vendor", preferredVendor.getID()));
   }
   jsonObject.put("vendorServiceNumber", item.getVendorItemNumber());
   jsonObject.put("itemType", PicklistUtilMigrator.getItemTypeIdentifier(item.getType()));
   // assertAccount
   Account assestsAccount = item.getAssestsAccount();
   if (assestsAccount != null) {
     jsonObject.put("assetAccount", context.get("Account", assestsAccount.getID()));
   }
   Quantity reorderPoint = item.getReorderPoint();
   if (reorderPoint != null) {
     double value = reorderPoint.getValue();
     Unit unit = reorderPoint.getUnit();
     if (unit != null) {
       jsonObject.put("reOrderPoint", unit.getFactor() * value);
     } else {
       jsonObject.put("reOrderPoint", value);
     }
   }
   Account costOfGoodsSold = item.getExpenseAccount();
   if (costOfGoodsSold != null) {
     jsonObject.put("costOfGoodsSold", context.get("Account", costOfGoodsSold.getID()));
   }
   Warehouse warehouse = item.getWarehouse();
   if (warehouse != null) {
     jsonObject.put("warehouse", context.get("Warehouse", warehouse.getID()));
   }
   Measurement measurement = item.getMeasurement();
   if (measurement != null) {
     jsonObject.put("measurement", context.get("Measurement", measurement.getID()));
   }
   jsonObject.put("averageCost", item.getAverageCost());
   return jsonObject;
 }