| /******************************************************************************* |
| * Copyright (C) 2015, Obeo. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| *******************************************************************************/ |
| package org.eclipse.emf.compare.egit.internal.merge; |
| |
| //CHECKSTYLE:OFF |
| import java.util.Collections; |
| import java.util.LinkedHashMap; |
| import java.util.LinkedHashSet; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.team.core.variants.IResourceVariant; |
| |
| /** |
| * Caches the resource variants corresponding to local IResources. |
| * |
| * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a> |
| */ |
| class GitResourceVariantCache { |
| private final Map<IResource, IResourceVariant> cache = new LinkedHashMap<IResource, IResourceVariant>(); |
| |
| private final Map<IResource, Set<IResource>> members = new LinkedHashMap<IResource, Set<IResource>>(); |
| |
| private final Set<IResource> roots = new LinkedHashSet<IResource>(); |
| |
| /** |
| * Sets the variant associated with the given resource in this cache. |
| * |
| * @param resource |
| * The resource for which we need to cache a variant. |
| * @param variant |
| * Variant for the resource. |
| */ |
| public void setVariant(IResource resource, IResourceVariant variant) { |
| cache.put(resource, variant); |
| |
| IProject project = resource.getProject(); |
| roots.add(project); |
| |
| members.put(resource, new LinkedHashSet<IResource>()); |
| |
| final IResource parent = resource.getParent(); |
| Set<IResource> parentMembers = members.get(parent); |
| if (parentMembers == null) { |
| parentMembers = new LinkedHashSet<IResource>(); |
| members.put(parent, parentMembers); |
| } |
| parentMembers.add(resource); |
| } |
| |
| /** |
| * @param resource |
| * The resource which variant we need. |
| * @return The variant associated with this resource in this cache. |
| */ |
| public IResourceVariant getVariant(IResource resource) { |
| return cache.get(resource); |
| } |
| |
| /** |
| * @return The known roots of the tree we were populated from. |
| */ |
| public Set<IResource> getRoots() { |
| return Collections.unmodifiableSet(roots); |
| } |
| |
| /** |
| * @return All resources for which this cache holds variants. |
| */ |
| public Set<IResource> getKnownResources() { |
| return Collections.unmodifiableSet(cache.keySet()); |
| } |
| |
| /** |
| * Returns all members of the given resource for which we hold variants. |
| * |
| * @param resource |
| * The resource which members we need. |
| * @return All members of the given resource for which we hold variants; an empty array if none. |
| */ |
| public IResource[] members(IResource resource) { |
| final Set<IResource> children = members.get(resource); |
| return children.toArray(new IResource[children.size()]); |
| } |
| } |
| // CHECKSTYLE:ON |