/*******************************************************************************
 * Copyright (c) 2000, 2012 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.jdt.internal.launching.support;

import java.util.Enumeration;

/**
 * Used to discover the boot path, extension directories, and endorsed
 * directories for a Java VM.
 */
public class LibraryDetector {

	/**
	 * Prints system properties to standard out.
	 * <ul>
	 * <li>java.version</li>
	 * <li>sun.boot.class.path</li>
	 * <li>java.ext.dirs</li>
	 * <li>java.endorsed.dirs</li>
	 * </ul>
	 * 
	 * @param args the command line arguments
	 */
	public static void main(String[] args) {
		// if we are running raw j9
		if ("j9".equalsIgnoreCase(System.getProperty("java.vm.name"))) { //$NON-NLS-1$ //$NON-NLS-2$
			// Map class lib versions onto things that the launch infrastructure understands.  J9 
			// behaves like 1.4 with-respect-to launch/debug
			String configuration = System.getProperty("com.ibm.oti.configuration"); //$NON-NLS-1$
			if ("found10".equals(configuration)) //$NON-NLS-1$
				System.out.print("1.4"); //$NON-NLS-1$
			else if ("found11".equals(configuration)) //$NON-NLS-1$
				System.out.print("1.4"); //$NON-NLS-1$
			else
				System.out.print(System.getProperty("java.version")); //$NON-NLS-1$
			System.out.print("|"); //$NON-NLS-1$
			System.out.print(System.getProperty("com.ibm.oti.system.class.path")); //$NON-NLS-1$
		} else {
			System.out.print(System.getProperty("java.version")); //$NON-NLS-1$
			System.out.print("|"); //$NON-NLS-1$
			// get the boot class path - the property may vary for different vendors
			Enumeration keys = System.getProperties().keys();
			boolean found = false;
			while (keys.hasMoreElements()) {
				String key = (String) keys.nextElement();
				if (key.endsWith(".boot.class.path")) { //$NON-NLS-1$
					found = true;
					System.out.print(System.getProperty(key));
					break;
				}
			}
			if (!found) {
				// old behavior
				System.out.print(System.getProperty("sun.boot.class.path")); //$NON-NLS-1$
			}
		}
		System.out.print("|"); //$NON-NLS-1$
		System.out.print(System.getProperty("java.ext.dirs")); //$NON-NLS-1$
		System.out.print("|"); //$NON-NLS-1$
		System.out.print(System.getProperty("java.endorsed.dirs")); //$NON-NLS-1$
	}
}
