/*******************************************************************************
 * Copyright (c) 2009, 2016 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.osgi.framework.util;

import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.WeakHashMap;
import org.eclipse.osgi.internal.debug.Debug;

public class ObjectPool {
	//private static String OPTION_DEBUG_OBJECTPOOL_ADDS = Debug.ECLIPSE_OSGI + "/debug/objectPool/adds"; //$NON-NLS-1$
	//private static String OPTION_DEBUG_OBJECTPOOL_DUPS = Debug.ECLIPSE_OSGI + "/debug/objectPool/dups"; //$NON-NLS-1$
	// TODO need to set these
	private static final boolean DEBUG_OBJECTPOOL_ADDS = false;
	private static final boolean DEBUG_OBJECTPOOL_DUPS = false;
	private static Map<Object, WeakReference<Object>> objectCache = new WeakHashMap<>();

	@SuppressWarnings("unchecked")
	public static <T> T intern(T obj) {
		synchronized (objectCache) {
			WeakReference<Object> ref = objectCache.get(obj);
			if (ref != null) {
				Object refValue = ref.get();
				if (refValue != null) {
					obj = (T) refValue;
					if (DEBUG_OBJECTPOOL_DUPS)
						Debug.println("[ObjectPool] Found duplicate object: " + getObjectString(obj)); //$NON-NLS-1$
				}
			} else {
				objectCache.put(obj, new WeakReference<Object>(obj));
				if (DEBUG_OBJECTPOOL_ADDS)
					Debug.println("[ObjectPool] Added unique object to pool: " + getObjectString(obj) + " Pool size: " + objectCache.size()); //$NON-NLS-1$ //$NON-NLS-2$
			}
		}
		return obj;
	}

	private static String getObjectString(Object obj) {
		return "[(" + obj.getClass().getName() + ") " + obj.toString() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
	}
}
