/** * Make sure the returned table desc is project-specific. * * All locks on srcTableMapLock are WRITE LOCKS because of this method!! */ private TableDesc getProjectSpecificTableDesc(String fullTableName, String prj) { String key = mapKey(fullTableName, prj); TableDesc result = srcTableMap.get(key); if (result == null) { try (AutoLock lock = srcTableMapLock.lockForWrite()) { result = srcTableMap.get(mapKey(fullTableName, null)); if (result != null) { result = new TableDesc(result);// deep copy of global tabledesc result.setLastModified(0); result.setProject(prj); result.setBorrowedFromGlobal(true); srcTableMap.putLocal(key, result); } } } return result; }
public TableExtDesc getTableExt(TableDesc t) { try (AutoLock lock = srcExtMapLock.lockForRead()) { TableExtDesc result = srcExtMap.get(mapKey(t.getIdentity(), t.getProject())); if (null == result) { //TODO: notice the table ext is not project-specific, seems not necessary at all result = srcExtMap.get(mapKey(t.getIdentity(), null)); } // avoid returning null, since the TableDesc exists if (null == result) { result = new TableExtDesc(); result.setIdentity(t.getIdentity()); result.setUuid(RandomUtil.randomUUID().toString()); result.setLastModified(0); result.init(t.getProject()); srcExtMap.putLocal(mapKey(t.getIdentity(), t.getProject()), result); } return result; } }
/** * the project-specific table desc will be expand by computed columns from the projects' models * when the projects' model list changed, project-specific table should be reset and get expanded * again */ public void resetProjectSpecificTableDesc(String prj) throws IOException { // avoid cyclic locks ProjectInstance project = ProjectManager.getInstance(config).getProject(prj); try (AutoLock lock = srcTableMapLock.lockForWrite()) { for (String tableName : project.getTables()) { String tableIdentity = getTableIdentity(tableName); String key = mapKey(tableIdentity, prj); TableDesc originTableDesc = srcTableMap.get(key); if (originTableDesc == null) { continue; } if (originTableDesc.isBorrowedFromGlobal()) { srcTableMap.removeLocal(key);//delete it so that getProjectSpecificTableDesc will create again } else { srcTableCrud.reload(key); } } } }
/** * Make sure the returned table desc is project-specific. * * All locks on srcTableMapLock are WRITE LOCKS because of this method!! */ private TableDesc getProjectSpecificTableDesc(String fullTableName, String prj) { String key = mapKey(fullTableName, prj); TableDesc result = srcTableMap.get(key); if (result == null) { try (AutoLock lock = srcTableMapLock.lockForWrite()) { result = srcTableMap.get(mapKey(fullTableName, null)); if (result != null) { result = new TableDesc(result);// deep copy of global tabledesc result.setLastModified(0); result.setProject(prj); result.setBorrowedFromGlobal(true); srcTableMap.putLocal(key, result); } } } return result; }
public TableExtDesc getTableExt(TableDesc t) { try (AutoLock lock = srcExtMapLock.lockForRead()) { TableExtDesc result = srcExtMap.get(mapKey(t.getIdentity(), t.getProject())); if (null == result) { //TODO: notice the table ext is not project-specific, seems not necessary at all result = srcExtMap.get(mapKey(t.getIdentity(), null)); } // avoid returning null, since the TableDesc exists if (null == result) { result = new TableExtDesc(); result.setIdentity(t.getIdentity()); result.setUuid(RandomUtil.randomUUID().toString()); result.setLastModified(0); result.init(t.getProject()); srcExtMap.putLocal(mapKey(t.getIdentity(), t.getProject()), result); } return result; } }
/** * the project-specific table desc will be expand by computed columns from the projects' models * when the projects' model list changed, project-specific table should be reset and get expanded * again */ public void resetProjectSpecificTableDesc(String prj) throws IOException { // avoid cyclic locks ProjectInstance project = ProjectManager.getInstance(config).getProject(prj); try (AutoLock lock = srcTableMapLock.lockForWrite()) { for (String tableName : project.getTables()) { String tableIdentity = getTableIdentity(tableName); String key = mapKey(tableIdentity, prj); TableDesc originTableDesc = srcTableMap.get(key); if (originTableDesc == null) { continue; } if (originTableDesc.isBorrowedFromGlobal()) { srcTableMap.removeLocal(key);//delete it so that getProjectSpecificTableDesc will create again } else { srcTableCrud.reload(key); } } } }