| /******************************************************************************* |
| * Copyright (c) 2010, 2011 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 |
| * |
| * Contributors: |
| * Obeo - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.mylyn.docs.intent.client.ui.ide.builder; |
| |
| import com.google.common.collect.Sets; |
| |
| import java.util.Set; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IResourceDelta; |
| import org.eclipse.core.resources.IResourceDeltaVisitor; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.mylyn.docs.intent.collab.common.repository.IntentRepositoryManager; |
| |
| /** |
| * Visitor used by the Intent builder. |
| * |
| * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a> |
| * @author <a href="mailto:william.piers@obeo.fr">William Piers</a> |
| */ |
| class IntentBuilderDeltaVisitor implements IResourceDeltaVisitor { |
| /** |
| * Collection of projects that just have been opened/created. |
| */ |
| private Set<IProject> openedProjects = Sets.newHashSet(); |
| |
| /** |
| * Collection of projects that just have been closed/deleted. |
| */ |
| private Set<IProject> closedProjects = Sets.newHashSet(); |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta) |
| */ |
| public boolean visit(IResourceDelta delta) throws CoreException { |
| IResource resource = delta.getResource(); |
| switch (delta.getKind()) { |
| case IResourceDelta.ADDED: |
| // If an intent project has been created |
| // Then a new repository will be created and the |
| // IntentProjectBasedRepositoryManagerContribution will trigger project connexion |
| break; |
| case IResourceDelta.CHANGED: |
| if ((IResourceDelta.OPEN & delta.getFlags()) != 0) { |
| if (resource instanceof IProject && resource.isAccessible() |
| && ((IProject)resource).hasNature(IntentNature.NATURE_ID)) { |
| if (((IProject)resource).isOpen()) { |
| openedProjects.add((IProject)resource); |
| } |
| } |
| } |
| // If the Nature of a project has changed |
| if ((IResourceDelta.DESCRIPTION & delta.getFlags()) != 0) { |
| if (resource instanceof IProject) { |
| // If the Intent Nature has been added |
| if (resource.isAccessible() && ((IProject)resource).hasNature(IntentNature.NATURE_ID)) { |
| openedProjects.add((IProject)resource); |
| } else { |
| // If the project had the Intent Nature but not anymore |
| if (IntentRepositoryManager.INSTANCE.isManagedProject(resource.getName())) { |
| closedProjects.add((IProject)resource); |
| } |
| } |
| } |
| } |
| break; |
| default: |
| break; |
| } |
| // return true to continue visiting children. |
| return true; |
| } |
| |
| /** |
| * Returns the projects that just have been opened. |
| * |
| * @return the projects that just have been opened |
| */ |
| public Set<IProject> getOpenedProjects() { |
| return openedProjects; |
| } |
| |
| /** |
| * Returns the projects that just have been closed. |
| * |
| * @return the projects that just have been closed |
| */ |
| public Set<IProject> getClosedProjects() { |
| return closedProjects; |
| } |
| } |