content: /**
   *  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;
  	}
  
  }
  