package org.objectstyle.wolips.wodclipse.core.util; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.NullProgressMonitor; import org.objectstyle.wolips.eomodeler.core.model.EOModelGroup; import org.objectstyle.wolips.eomodeler.core.model.EOModelVerificationFailure; import org.objectstyle.wolips.eomodeler.core.model.IEOModelGroupFactory; public class EOModelGroupCache { private Map<IProject, EOModelGroup> _modelGroupCache; public EOModelGroupCache() { _modelGroupCache = new HashMap<IProject, EOModelGroup>(); } public synchronized EOModelGroup getModelGroup(IProject project) { EOModelGroup modelGroup; if (project == null) { modelGroup = new EOModelGroup(); } else { modelGroup = _modelGroupCache.get(project); if (modelGroup == null) { modelGroup = new EOModelGroup(); Set<EOModelVerificationFailure> failures = new HashSet<EOModelVerificationFailure>(); try { IEOModelGroupFactory.Utility.loadModelGroup(project, modelGroup, failures, true, null, new NullProgressMonitor()); _modelGroupCache.put(project, modelGroup); } catch (Exception e) { e.printStackTrace(); } } } return modelGroup; } public synchronized void clearCacheForProject(IProject project) { clearCacheForProject(project, new HashSet<IProject>()); } public synchronized void clearCacheForProject(IProject project, Set<IProject> visitedProjects) { visitedProjects.add(project); _modelGroupCache.remove(project); for (IProject referencingProject : project.getReferencingProjects()) { if (!visitedProjects.contains(referencingProject)) { clearCacheForProject(referencingProject, visitedProjects); } } } public synchronized void clearCache() { _modelGroupCache.clear(); } }