Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/dsf
diff options
context:
space:
mode:
authorPawel Piech2010-03-24 18:19:18 +0000
committerPawel Piech2010-03-24 18:19:18 +0000
commit79c61294f9f19b0e931465d940a8fd4ba71fcca3 (patch)
tree898f3de135f8a5ca9fd797794886a92bee1725c6 /dsf
parent845bf5a063cf286aa7115a0f4a2e2faa1c8b1e63 (diff)
downloadorg.eclipse.cdt-79c61294f9f19b0e931465d940a8fd4ba71fcca3.tar.gz
org.eclipse.cdt-79c61294f9f19b0e931465d940a8fd4ba71fcca3.tar.xz
org.eclipse.cdt-79c61294f9f19b0e931465d940a8fd4ba71fcca3.zip
[302628] Moved to a non-API package.
Diffstat (limited to 'dsf')
-rw-r--r--dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/DataCache.java200
1 files changed, 0 insertions, 200 deletions
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/DataCache.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/DataCache.java
deleted file mode 100644
index 113fb29f990..00000000000
--- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/DataCache.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package org.eclipse.cdt.dsf.concurrent;
-
-/*******************************************************************************
- * Copyright (c) 2008 Wind River Systems, Inc. and others.
- * 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:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.Executor;
-
-import org.eclipse.cdt.dsf.internal.DsfPlugin;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-
-/**
- * A general purpose cache, which caches the result of a single request.
- * Sub classes need to implement {@link #retrieve(DataRequestMonitor)} to fetch
- * data from the data source. Clients are responsible for calling
- * {@link #disable()} and {@link #reset()} to manage the state of the cache in
- * response to events from the data source.
- * <p>
- * This cache requires an executor to use. The executor is used to synchronize
- * access to the cache state and data.
- * </p>
- * @since 2.1
- */
-@ConfinedToDsfExecutor("fExecutor")
-public abstract class DataCache<V> {
-
- final private Executor fExecutor;
-
- private boolean fValid;
-
- protected DataRequestMonitor<V> fRm;
- private V fData;
- private IStatus fStatus;
-
- private List<DataRequestMonitor<V>> fWaitingList = new LinkedList<DataRequestMonitor<V>>();
-
- public DataCache(Executor executor) {
- fExecutor = executor;
- }
-
-
- /**
- * Sub-classes should override this method to retrieve the cache data
- * from its source.
- *
- * @param rm Request monitor for completion of data retrieval.
- */
- protected abstract void retrieve(DataRequestMonitor<V> rm);
-
- /**
- * Returns <code>true</code> if the cache is currently valid. I.e.
- * whether the cache can return a value immediately without first
- * retrieving it from the data source.
- */
- public boolean isValid() {
- return fValid;
- }
-
- /**
- * Returns <code>true</code> if the cache is currently waiting for data
- * from the data source.
- */
- public boolean isPending() {
- return fRm != null;
- }
-
- /**
- * Returns the current data value held by this cache. Clients should first
- * call isValid() to determine if the data is up to date.
- */
- public V getData() {
- return fData;
- }
-
- /**
- * Returns the status of the source request held by this cache. Clients
- * should first call isValid() to determine if the data is up to date.
- */
- public IStatus getStatus() {
- return fStatus;
- }
-
- /**
- * Request data from the cache. The cache is valid, it will complete the
- * request immediately, otherwise data will first be retrieved from the
- * source.
- * @param req
- */
- public void request(final DataRequestMonitor<V> rm) {
- if (!fValid) {
- boolean first = fWaitingList.isEmpty();
- fWaitingList.add(rm);
- if(first) {
- fRm = new DataRequestMonitor<V>(fExecutor, null) {
- @Override
- protected void handleCompleted() {
- if (!isCanceled()) {
- fValid = true;
- fRm = null;
- set(getData(), getStatus());
- }
- }
- };
- retrieve(fRm);
- }
- } else {
- rm.setData(fData);
- rm.setStatus(fStatus);
- rm.done();
- }
- }
-
-
- private void set(V data, IStatus status) {
- fData = data;
- fStatus = status;
- List<DataRequestMonitor<V>> waitingList = fWaitingList;
- fWaitingList = new LinkedList<DataRequestMonitor<V>>();
-
- for (DataRequestMonitor<V> rm : waitingList) {
- rm.setData(data);
- rm.setStatus(status);
- rm.done();
- }
- }
-
- /**
- * Resets the cache with a data value <code>null</code> and an error
- * status with code {@link IDsfStatusConstants#INVALID_STATE}.
- *
- * @see #reset(Object, IStatus)
- */
- public void reset() {
- reset(null, new Status(IStatus.ERROR, DsfPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Cache reset", null)); //$NON-NLS-1$
- }
-
- /**
- * Resets the cache with given data and status. Resetting the cache
- * forces the cache to be invalid and cancels any current pending requests
- * from data source.
- * <p>
- * This method should be called when the data source has issued an event
- * indicating that the source data has changed but data may still be
- * retrieved. Clients may need to re-request data following cache reset.
- * </p>
- * @param data The data that should be returned to any clients currently
- * waiting for cache data.
- * @status The status that should be returned to any clients currently
- * waiting for cache data.
- */
- public void reset(V data, IStatus status) {
- fValid = false;
- if (fRm != null) {
- fRm.cancel();
- fRm = null;
- }
- set(data, status);
- }
-
- /**
- * Disables the cache with a data value <code>null</code> and an error
- * status with code {@link IDsfStatusConstants#INVALID_STATE}.
- *
- * @see #disable(Object, IStatus)
- */
- public void disable() {
- disable(null, new Status(IStatus.ERROR, DsfPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Cache disable", null)); //$NON-NLS-1$
- }
-
- /**
- * Resets the cache then disables it. When a cache is disabled it means
- * that it is valid and requests to the data source will not be sent.
- * <p>
- * This method should be called when the data source has issued an event
- * indicating that the source data has changed and future requests for
- * data will return the given data and status. Once the source data
- * becomes available again, clients should call {@link #reset()}.
- * </p>
- * @param data The data that should be returned to any clients waiting for
- * cache data and for clients requesting data until the cache is reset again.
- * @status The status that should be returned to any clients waiting for
- * cache data and for clients requesting data until the cache is reset again.
- *
- * @see #reset(Object, IStatus)
- */
- public void disable(V data, IStatus status) {
- reset(data, status);
- fValid = true;
- }
-}

Back to the top