package com.iplatform.gather.support; import com.walker.connector.Address; import com.walker.db.DatabaseException; import com.walker.db.TableInfo; import com.walker.store.AbstractMetaDataEngine; import com.walker.store.Repository; import com.walker.store.repo.AbstractRepository; import com.walker.store.repo.DatabaseRepository; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 测试元数据引擎 * @author shikeying * @date 2015年12月17日 * */ public class TestMetaDataEngine extends AbstractMetaDataEngine { // protected transient final Log logger = LogFactory.getLog(getClass()); // key = storeId private final Map cached = new ConcurrentHashMap(2); // key = storeId private final Map> tableCache = new ConcurrentHashMap>(); private final ConcurrentHashMap usingAddress = new ConcurrentHashMap(); @Override public void saveNewAddress(String storeId, Address address) throws DatabaseException { AbstractRepository repo = (AbstractRepository)cached.get(storeId); if(repo == null){ repo = new DatabaseRepository(); repo.setId(storeId); cached.put(storeId, repo); } repo.addAddress(address); logger.debug("---- 缓存更新后,数据库: " + repo.getAddressList()); // 同时,更新记录,对于当前存储,那个库正在被使用 usingAddress.put(storeId, address); logger.debug("usingAddress.size = " + usingAddress.size()); } @Override public void saveNewTable(String storeId, Address addr, String destTableName) throws DatabaseException { List list = tableCache.get(storeId); if(list == null){ list = new ArrayList(); tableCache.put(storeId, list); } if(!list.contains(destTableName)){ list.add(destTableName); } } @Override public synchronized int getTableSize(Address address) { // 测试,查找数据库中的元数据 return this.getDatabaseMetaEngine().getTableSize(address); } @Override public int getDatabaseSize(Address address) { return 1; } @Override public boolean isExistDatabase(String storeId, Address address) { List
list = null; for(Repository repo : cached.values()){ list = repo.getAddressList(); for(Address addr : list){ logger.debug("+++++++++ 要比较的地址:" + addr + ", 源地址:" + address); if(addr.equals(address)){ return true; } } } return false; } @Override public boolean isExistTable(String storeId, Address address, String tableName) { List list = tableCache.get(storeId); if(list == null){ list = new ArrayList(); tableCache.put(storeId, list); } return list.contains(tableName); } @Override public Address getUsingAddress(String storeId) { logger.debug("====== usingAddress: " + usingAddress.size()); for(Address a : usingAddress.values()){ logger.debug("2-- " + a); } return usingAddress.get(storeId); } @Override public List getFields(Address address, String tableName) { return this.getDatabaseMetaEngine().getFields(address, tableName); } @Override public Map getTableRows(String storeId, long metaDbId, List tableNameList) { return null; } }