package monolipse.core.internal; import monolipse.core.IAssemblyReference; import monolipse.core.IAssemblySource; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.QualifiedName; public class AssemblyReferences { private static final QualifiedName SESSION_KEY = new QualifiedName("monolipse.core.resources", "BooAssemblyReference"); private AssemblyReferences() { } public static IAssemblyReference assemblyReferenceFor(IFile file) throws CoreException { if (!file.exists()) return new LocalAssemblyReference(file); IAssemblyReference reference = getCachedReference(file); if (null == reference) { reference = new LocalAssemblyReference(file); cacheReference(file, reference); } return reference; } public static IAssemblyReference assemblyReferenceFor(IAssemblySource source) throws CoreException { IFolder folder = source.getFolder(); IAssemblyReference reference = getCachedReference(folder); if (null == reference) { reference = new AssemblySourceReference(source); cacheReference(folder, reference); } return reference; } private static IAssemblyReference getCachedReference(IResource resource) throws CoreException { return (IAssemblyReference)resource.getSessionProperty(SESSION_KEY); } private static void cacheReference(IResource resource, IAssemblyReference reference) throws CoreException { resource.setSessionProperty(SESSION_KEY, reference); } public static IAssemblyReference booAssemblyReference(String booAssemblyName) { return new BooAssemblyReference(booAssemblyName); } }