/*******************************************************************************
 * Copyright (c) 2014, 2015 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;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.launching.ILibraryLocationResolver;

public class JavaFxLibraryResolver implements ILibraryLocationResolver {

	public static final String JFXRT_JAR = "jfxrt.jar"; //$NON-NLS-1$
	private static final String JAVAFX_SRC_ZIP = "javafx-src.zip"; //$NON-NLS-1$
	private static final String JAVAFX_8_JAVADOC = "http://docs.oracle.com/javase/8/javafx/api/"; //$NON-NLS-1$

	private static boolean isJavaFx(IPath libraryPath) {
		return JFXRT_JAR.equals(libraryPath.lastSegment());
	}

	@Override
	public IPath getPackageRoot(IPath libraryPath) {
		return Path.EMPTY;
	}

	@Override
	public IPath getSourcePath(IPath libraryPath) {
		if (isJavaFx(libraryPath)) {
			File parent = libraryPath.toFile().getParentFile();
			while (parent != null) {
				File parentsrc = new File(parent, JAVAFX_SRC_ZIP);
				if (parentsrc.isFile()) {
					return new Path(parentsrc.getPath());
				}
				parent = parent.getParentFile();
			}
		}
		return Path.EMPTY;
	}

	@Override
	public URL getJavadocLocation(IPath libraryPath) {
		if (isJavaFx(libraryPath)) {
			/*
			 * TODO: We don't know if JavaSE-1.9 will ship JavaFX in the ext folder as well. If yes, then we have to use something like
			 * JavaRuntime#getVMInstall(IPath) and IVMInstall2#getJavaVersion() to determine the right Javadoc URL.
			 */
			try {
				return new URL(JAVAFX_8_JAVADOC);
			}
			catch (MalformedURLException e) {
				LaunchingPlugin.log(e);
			}
		}
		return null;
	}

	@Override
	public URL getIndexLocation(IPath libraryPath) {
		return null;
	}
}
