package com.ctrip.framework.apollo.biz.utils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.ctrip.framework.apollo.biz.entity.Item; import com.ctrip.framework.apollo.core.utils.StringUtils; import java.util.Date; import java.util.LinkedList; import java.util.List; public class ConfigChangeContentBuilder { private static final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); private List<Item> createItems = new LinkedList<>(); private List<ItemPair> updateItems = new LinkedList<>(); private List<Item> deleteItems = new LinkedList<>(); public ConfigChangeContentBuilder createItem(Item item) { if (!StringUtils.isEmpty(item.getKey())){ createItems.add(item); } return this; } public ConfigChangeContentBuilder updateItem(Item oldItem, Item newItem) { if (!oldItem.getValue().equals(newItem.getValue())){ ItemPair itemPair = new ItemPair(oldItem, newItem); updateItems.add(itemPair); } return this; } public ConfigChangeContentBuilder deleteItem(Item item) { if (!StringUtils.isEmpty(item.getKey())) { deleteItems.add(item); } return this; } public boolean hasContent(){ return !createItems.isEmpty() || !updateItems.isEmpty() || !deleteItems.isEmpty(); } public String build() { //因为事务第一段提交并没有更新时间,所以build时统一更新 for (Item item : createItems) { item.setDataChangeLastModifiedTime(new Date()); } for (ItemPair item : updateItems) { item.newItem.setDataChangeLastModifiedTime(new Date()); } for (Item item : deleteItems) { item.setDataChangeLastModifiedTime(new Date()); } return gson.toJson(this); } static class ItemPair { Item oldItem; Item newItem; public ItemPair(Item oldItem, Item newItem) { this.oldItem = oldItem; this.newItem = newItem; } } }