Copyright (c) 2006, 2017 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2006, 2017 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.team.internal.core.mapping; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.mapping.ResourceMapping; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.osgi.util.NLS; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.mapping.ISynchronizationScopeManager; import org.eclipse.team.core.mapping.provider.SynchronizationScopeManager; import org.eclipse.team.internal.core.BackgroundEventHandler; import org.eclipse.team.internal.core.Messages; public class ScopeManagerEventHandler extends BackgroundEventHandler { public static final int REFRESH = 10; private Set<ResourceMapping> toRefresh = new HashSet<>(); private ISynchronizationScopeManager manager; class ResourceMappingEvent extends Event { private final ResourceMapping[] mappings; public ResourceMappingEvent(ResourceMapping[] mappings) { super(REFRESH); this.mappings = mappings; } } public ScopeManagerEventHandler(SynchronizationScopeManager manager) { super(NLS.bind(Messages.ScopeManagerEventHandler_0, manager.getName()), NLS.bind(Messages.ScopeManagerEventHandler_1, manager.getName())); this.manager = manager; } @Override protected boolean doDispatchEvents(IProgressMonitor monitor) throws TeamException { ResourceMapping[] mappings = toRefresh.toArray(new ResourceMapping[toRefresh.size()]); toRefresh.clear(); if (mappings.length > 0) { try { manager.refresh(mappings, monitor); } catch (CoreException e) { throw TeamException.asTeamException(e); } } return mappings.length > 0; } @Override protected void processEvent(Event event, IProgressMonitor monitor) throws CoreException { if (event instanceof ResourceMappingEvent) { ResourceMappingEvent rme = (ResourceMappingEvent) event; Collections.addAll(toRefresh, rme.mappings); } } public void refresh(ResourceMapping[] mappings) { queueEvent(new ResourceMappingEvent(mappings), false); } @Override protected Object getJobFamiliy() { return manager; } }