/**
* Copyright (c) 2010, 2013 Darmstadt University of Technology.
* 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:
* Olav Lenz - initial API and implementation
*/
package org.eclipse.recommenders.coordinates.jre;
import static com.google.common.base.Optional.*;
import static org.eclipse.recommenders.utils.Versions.*;
import java.io.File;
import org.eclipse.recommenders.coordinates.AbstractProjectCoordinateAdvisor;
import org.eclipse.recommenders.coordinates.DependencyInfo;
import org.eclipse.recommenders.coordinates.DependencyType;
import org.eclipse.recommenders.coordinates.ProjectCoordinate;
import org.eclipse.recommenders.utils.Version;
import com.google.common.base.Optional;
/**
* This advisor tries to extract the version out of the directory name of java_home.
*/
public class JREDirectoryNameAdvisor extends AbstractProjectCoordinateAdvisor {
@Override
protected Optional<ProjectCoordinate> doSuggest(DependencyInfo dependencyInfo) {
File directory = dependencyInfo.getFile();
do {
String versionString = canonicalizeVersion(directory.getName());
if (isValidVersion(versionString)) {
Version version = Version.valueOf(versionString);
if (version.getMajor() > 1) {
// Bring version of Java 9 or later into the 1.x.y form used by earlier JREs.
version = new Version(1, version.getMajor(), version.getMinor());
}
return of(new ProjectCoordinate("jre", "jre", version.toString()));
}
directory = directory.getParentFile();
} while (directory != null);
return absent();
}
@Override
public boolean isApplicable(DependencyType dependencyType) {
return dependencyType == DependencyType.JRE;
}
}