/*******************************************************************************
 * Copyright (c) 2004, 2013 IBM Corporation 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:
 *     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;
			}
		}
	}
}
