/*******************************************************************************
 * Copyright (c) 2004, 2013 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.ant.internal.ui.editor;

import org.eclipse.ant.internal.ui.editor.utils.ProjectHelper;

public class DecayCodeCompletionDataStructuresThread extends Thread {

	private static final int fgDelay = 6000 * 5; // 5 minutes

	private static DecayCodeCompletionDataStructuresThread fgInstance;

	public static DecayCodeCompletionDataStructuresThread getDefault() {
		if (fgInstance == null) {
			fgInstance = new DecayCodeCompletionDataStructuresThread();
		}
		return fgInstance;
	}

	/**
	 * Creates a new background thread. The thread runs with minimal priority.
	 */
	private DecayCodeCompletionDataStructuresThread() {
		super("Decay Ant Data Structures"); //$NON-NLS-1$
		setPriority(Thread.MIN_PRIORITY);
		setDaemon(true);
		fgInstance = this;
		setContextClassLoader(null); // don't hold on to any class loaders
	}

	/**
	 * The background activity that is triggered when the last <code>AntModel</code> is disposed. Waits for the required delay and then nulls out the
	 * memory expensive Ant code completion data structures and reset the ProjectHelper. If an <code>AntModel</code> is created during the wait, the
	 * thread is interrupted and no nulling out occurs.
	 */
	@Override
	public void run() {
		synchronized (this) {
			try {
				wait(fgDelay);
				AntEditorCompletionProcessor.resetCodeCompletionDataStructures();
				ProjectHelper.reset();
			}
			catch (InterruptedException x) {
				// do nothing
			}
		}
	}

	/**
	 * Cancels the background thread.
	 */
	public static void cancel() {
		if (fgInstance != null) {
			synchronized (fgInstance) {
				fgInstance.interrupt();
				fgInstance = null;
			}
		}
	}
}
