/* This file is part of the db4o object database http://www.db4o.com Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com db4o is free software; you can redistribute it and/or modify it under the terms of version 3 of the GNU General Public License as published by the Free Software Foundation. db4o is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. */ package com.db4o.consistency; import java.util.*; import com.db4o.internal.*; import com.db4o.internal.btree.*; import com.db4o.internal.classindex.*; /** * @exclude */ public final class ConsistencyCheckerUtil { public static Map<Integer, ClassMetadata> typesFor(LocalObjectContainer db, Set<Integer> ids) { Map<Integer, Set<ClassMetadata>> id2clazzes = new HashMap<Integer, Set<ClassMetadata>>(); ClassMetadataIterator iter = db.classCollection().iterator(); while(iter.moveNext()) { for(int id : ids) { ClassMetadata clazz = iter.currentClass(); BTree btree = BTreeClassIndexStrategy.btree(clazz); if(btree.search(db.systemTransaction(), id) != null) { Set<ClassMetadata> clazzes = id2clazzes.get(id); if(clazzes == null) { clazzes = new HashSet<ClassMetadata>(); id2clazzes.put(id, clazzes); } clazzes.add(clazz); } } } Map<Integer, ClassMetadata> id2clazz = new HashMap<Integer, ClassMetadata>(); for(int id : id2clazzes.keySet()) { Set<ClassMetadata> clazzes = id2clazzes.get(id); ClassMetadata mostSpecific = null; OUTER: for(ClassMetadata curClazz : clazzes) { for(ClassMetadata cmpClazz : clazzes) { if(curClazz.equals(cmpClazz._ancestor)) { continue OUTER; } } mostSpecific = curClazz; break; } id2clazz.put(id, mostSpecific); } return id2clazz; } private ConsistencyCheckerUtil() { } }