/** * Copyright (c) 2013-2016 Angelo ZERR. * 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: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.repository; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonObject.Member; import tern.TernException; import tern.server.ITernModule; import tern.utils.IOUtils; import tern.utils.StringUtils; /** * Helper for tern repository. * */ public class TernRepositoryHelper { /** * Default tern repository.json URL */ public static final String DEFAULT_TERN_REPOSITORY_URL = "https://raw.githubusercontent.com/paulvi/tern-plugins/master/plugins.json"; private TernRepositoryHelper() { } /** * Load tern modules coming from the given repository.json URL. * * @param repositoryURL * repository URL. * @return * @throws IOException * @throws ClientProtocolException * @throws TernException */ public static List<ITernModule> loadModules(String repositoryURL) throws IOException, TernException { // load repository.json with HTTP client. HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(repositoryURL); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity entity = httpResponse.getEntity(); InputStream in = entity.getContent(); // Check the status StatusLine statusLine = httpResponse.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode != HttpStatus.SC_OK) { String message = IOUtils.toString(in); if (StringUtils.isEmpty(message)) { throw new TernException(statusLine.toString()); } throw new TernException(message); } // read JSON and create tern modules list JsonObject repository = JsonObject.readFrom(new InputStreamReader(in)); ITernModule module = null; List<ITernModule> modules = new ArrayList<ITernModule>(); for (Member member : repository) { module = new TernModuleToDownload(member.getName(), (JsonObject) member.getValue()); modules.add(module); } return modules; } }