package org.eclipse.recommenders.examples.calls;
import java.io.File;
import java.util.List;
import org.eclipse.recommenders.calls.PoolingCallModelProvider;
import org.eclipse.recommenders.examples.calls.EclipseOrgCallRecommender.ObjectUsage;
import org.eclipse.recommenders.models.ModelCoordinate;
import org.eclipse.recommenders.models.ModelIndex;
import org.eclipse.recommenders.models.ModelRepository;
import org.eclipse.recommenders.utils.Recommendation;
import org.eclipse.recommenders.utils.Zips;
import org.eclipse.recommenders.utils.names.IMethodName;
import org.eclipse.recommenders.utils.names.VmMethodName;
import org.eclipse.recommenders.utils.names.VmTypeName;
public class EclipseOrgCallRecommenderMain {
static String remote = "http://download.eclipse.org/recommenders/models/kepler/";
static File local = com.google.common.io.Files.createTempDir();
public static void main(String[] args) throws Exception {
// setup:
System.out.println("Setting up recommender and model repository.");
ModelRepository repository = new ModelRepository(new File(local, "repository"), remote);
System.out.println("downloading model index from eclipse...");
repository.resolve(ModelIndex.INDEX);
File location = repository.getLocation(ModelIndex.INDEX).orNull();
File indexdir = new File(local, "index");
Zips.unzip(location, indexdir);
ModelIndex index = new ModelIndex(indexdir);
index.open();
System.out.println("Creating pooling model provider...");
PoolingCallModelProvider provider = new PoolingCallModelProvider(repository, index);
provider.open();
System.out.println("Creating demo(!) call recommender...");
EclipseOrgCallRecommender recommender = new EclipseOrgCallRecommender(provider);
// exercise:
System.out.println("Query the recommender the first time (no model yet available).");
ObjectUsage query = createSampleQuery();
List<Recommendation<IMethodName>> recs = recommender.computeRecommendations(query);
System.out.println("Try #1: num of recs: " + recs.size());
waitUntilModelWasDownloaded(repository);
// on second run the models are there...
recs = recommender.computeRecommendations(query);
System.out.println("try #2: num of recs: " + recs.size());
for (Recommendation<IMethodName> rec : recs) {
System.out.println("\t" + rec);
}
}
private static void waitUntilModelWasDownloaded(ModelRepository repository) throws Exception {
System.out.println("Waiting for model download to finish...");
// there is a blocking API and a non-blocking API. schedule methods are non-blocking method that return a
// future.
// However, for demo purpose, we wait until the download finished using resolve().
ModelCoordinate model = new ModelCoordinate("jre", "jre", "call", "zip", "1.0.0");
repository.resolve(model);
File location = repository.getLocation(model).orNull();
System.out.println("Model got downloaded to " + location + ".");
}
private static ObjectUsage createSampleQuery() {
ObjectUsage query = ObjectUsage.newObjectUsageWithDefaults();
query.type = VmTypeName.STRING;
query.overridesFirst = VmMethodName.get("Ljava/lang/Object.equals(Ljava/lang/Object;)Z");
return query;
}
}