Copyright (c) 2000, 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) 2000, 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;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.team.core.ICache;
import org.eclipse.team.core.ICacheListener;
A synchronize operation context that supports caching of
properties relevant to the operation and the registering of
dispose listeners.
See Also: - ICache
Since: 3.2
/**
* A synchronize operation context that supports caching of
* properties relevant to the operation and the registering of
* dispose listeners.
*
* @see org.eclipse.team.core.ICache
* @since 3.2
*/
public class Cache implements ICache {
Map<String, Object> properties;
ListenerList<ICacheListener> listeners;
@Override
public synchronized void put(String name, Object value) {
if (properties == null) {
properties = new HashMap<>();
}
properties.put(name, value);
}
@Override
public synchronized Object get(String name) {
if (properties == null)
return null;
return properties.get(name);
}
@Override
public synchronized void remove(String name) {
if (properties != null)
properties.remove(name);
if (properties.isEmpty()) {
properties = null;
}
}
@Override
public synchronized void addCacheListener(ICacheListener listener) {
if (listeners == null)
listeners = new ListenerList<>(ListenerList.IDENTITY);
listeners.add(listener);
}
@Override
public synchronized void removeDisposeListener(ICacheListener listener) {
removeCacheListener(listener);
}
@Override
public synchronized void removeCacheListener(ICacheListener listener) {
if (listeners != null)
listeners.remove(listener);
}
public void dispose() {
if (listeners != null) {
for (ICacheListener listener : listeners) {
SafeRunner.run(new ISafeRunnable(){
@Override
public void run() throws Exception {
listener.cacheDisposed(Cache.this);
}
@Override
public void handleException(Throwable exception) {
// Ignore since the platform logs the error
}
});
}
}
properties = null;
}
}