package com.mogujie.tt.utils;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.mogujie.tt.log.Logger;
public class MsgIdToPositionMap {
private Map<String, Integer> msgIdToPositionMap = new HashMap<String, Integer>();
public MsgIdToPositionMap() {
}
private Logger logger = Logger.getLogger(MsgIdToPositionMap.class);
@Override
public String toString() {
StringBuilder ret = new StringBuilder();
for (Entry<String, Integer> entry : msgIdToPositionMap.entrySet()) {
ret.append(String.format("(%s, %d) ", entry.getKey(), entry.getValue()));
}
return ret.toString();
}
public void put(String msgId, int pos) {
synchronized (msgIdToPositionMap) {
if (msgIdToPositionMap.containsKey(msgId) || pos < 0)
return;
msgIdToPositionMap.put(msgId, pos);
logger.d("put key = " + msgId + " , value = " + pos);
}
}
/****
* @Desc 修正位置,因为有些新的插入可以影响原有的位置信息
* @param pos
* @param offset
*/
public void fix(int pos, int offset) {
synchronized (msgIdToPositionMap) {
for (Entry<String, Integer> entry : msgIdToPositionMap.entrySet()) {
int value = entry.getValue();
// todo eric
// if (value >= pos) {
if (value == pos) {
entry.setValue(value + offset);
}
}
}
}
/****
* @param msgId
* @return
*/
public int getPosition(String msgId) {
synchronized (msgIdToPositionMap) {
if (msgIdToPositionMap.containsKey(msgId)) {
return msgIdToPositionMap.get(msgId);
} else {
return -1;
}
}
}
public int size() {
synchronized (msgIdToPositionMap) {
return msgIdToPositionMap.size();
}
}
public void clear() {
synchronized (msgIdToPositionMap) {
msgIdToPositionMap.clear();
logger.d("clear, now count = " + msgIdToPositionMap.size());
}
}
public void remove(String msgId) {
synchronized (msgIdToPositionMap) {
if (msgIdToPositionMap.containsKey(msgId)) {
msgIdToPositionMap.remove(msgId);
}
}
}
public Boolean contains(String msgId) {
synchronized (msgIdToPositionMap) {
return msgIdToPositionMap.containsKey(msgId);
}
}
public void printMap() {
synchronized (msgIdToPositionMap) {
for (Entry<String, Integer> entry : msgIdToPositionMap.entrySet()) {
String key = entry.getKey();
int value = entry.getValue();
logger.d("key = " + key + " , value = " + value);
}
}
}
}