/*****************************************************************************
* Copyright (c) 2006-2013, Cloudsmith Inc.
* The code, documentation and other materials contained herein have been
* licensed under the Eclipse Public License - v 1.0 by the copyright holder
* listed above, as the Initial Contributor under such license. The text of
* such license is available at www.eclipse.org.
*****************************************************************************/
package org.eclipse.buckminster.core.metadata;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.buckminster.core.cspec.ICSpecData;
import org.eclipse.buckminster.core.cspec.PathGroup;
import org.eclipse.buckminster.core.cspec.model.CSpec;
import org.eclipse.buckminster.core.cspec.model.ComponentRequest;
import org.eclipse.buckminster.core.metadata.model.IModelCache;
import org.eclipse.core.runtime.CoreException;
/**
* @author Thomas Hallgren
*/
public class ModelCache implements IModelCache {
private Map<String, ? extends Object> properties;
private Map<String, PathGroup[]> pathGroupsCache;
private Map<ComponentRequest, CSpec> cspecCache;
public ModelCache() {
}
public ModelCache(Map<String, ? extends Object> properties) {
this.properties = properties;
}
@Override
public synchronized CSpec findCSpec(ICSpecData ownerCSpec, ComponentRequest request) throws CoreException {
CSpec cspec = null;
if (cspecCache == null)
cspecCache = new HashMap<ComponentRequest, CSpec>();
else
cspec = cspecCache.get(request);
if (cspec == null) {
cspec = WorkspaceInfo.getResolution(request, false).getCSpec();
cspecCache.put(request, cspec);
}
return cspec;
}
@Override
public synchronized Collection<CSpec> getAllFoundCSpecs() {
return cspecCache == null ? Collections.<CSpec> emptyList() : cspecCache.values();
}
@Override
public synchronized Map<String, PathGroup[]> getPathGroupsCache() {
if (pathGroupsCache == null)
pathGroupsCache = new HashMap<String, PathGroup[]>();
return pathGroupsCache;
}
@Override
public synchronized Map<String, ? extends Object> getProperties() {
if (properties == null)
properties = new HashMap<String, String>();
return properties;
}
}