<?php
/*******************************************************************************
 * Copyright (c) 2009-2016 Eclipse Foundation, Inc.
 * 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:
 *    Eclipse Foundation - initial API and implementation
 *******************************************************************************/

	require_once("content/distro_functions.php");

	$BLUAGE = new companyInfo(
		"BLU AGE",
		"ba_legacy_110x80_opt.jpg",
		"2019-12",
		"jee,sdk,java,cpp,modeling,reporting,rcp,automotive,mobile,scout,testing,parallel,committers, installer",
		"Free and fast direct Eclipse downloads. Get more BLU AGE Eclipse plugins for your Legacy Application Modernization, Reverse Modeling and Forward Engineering.",
		"http://eclipse.org/go/BLUAGE_DISTRO",
		25, 1);

	$ECLIPSESOURCE = new companyInfo (
		"EclipseSource",
		"yoxos64x64.jpg",
		"4.5.2",
		"jee,committers,java,cpp,modeling,reporting,rcp,automotive,scout,testing,parallel,mobile",
		"Warp speed from the Amazon cloud plus a choice of hundreds of plug-ins with managed dependencies.",
		"http://eclipse.org/go/DISTRO_ECLIPSESOURCE_INDIGO",
		125, 1);

	$GENUITEC = new companyInfo (
		"Genuitec",
		"genuitec.png",
		"2019-12",
		"jee,committers,java,cpp,modeling,reporting,rcp,automotive,mobile,scout,testing,parallel, installer",
		"Native installers for all OS platforms, lightning fast downloads. Manage plugins and dependencies. For free.",
		"http://eclipse.org/go/DISTRO_GENUITEC_INDIGO",
		25, 1);

	$IBM = new companyInfo (
		"IBM",
		"ibm-cloud-logo.jpg",
		"2020-03",
		"jee,committers,java,cpp,php,installer,javascript",
		"Blazingly fast downloads hosted by IBM Cloud.",
		"http://eclipse.org/go/DISTRO_IBM",
		1250, 1);

	$OBEO = new companyInfo(
		"Obeo",
		"obeo.png",
		"2019-12",
		"modeling, jee, java, installer",
		"Fast downloads hosted<br />by Eclipse experts.",
		"http://eclipse.org/go/DISTROS_OBEO",
		125, 1);

	$SPRING = new companyInfo(
		"Spring by Pivotal",
		"spring64.png",
		"2019-12",
		"committers,jee,java,rcp",
		"Rapid downloads of Eclipse packages. Free downloads of Spring Tool Suite for Spring, Spring Boot, Cloud Foundry, and AspectJ.",
		"http://eclipse.org/go/DISTRO_SPRINGSOURCE",
		100, 1);

	$YATTA = new companyInfo(
		"Yatta Solutions GmbH",
		"yatta_64_64.png",
		"2019-12",
		"committers,jee,sdk,java,cpp,modeling,reporting,rcp,scout,testing,parallel,installer",
		"Take the shortcut to Eclipse now! Save and share your Eclipse - with Profiles.",
		"http://eclipse.org/go/DISTRO_YATTA",
		25, 1);

	$companyinfo = array(
		&$BLUAGE, &$ECLIPSESOURCE, &$GENUITEC, &$IBM, &$OBEO,
		&$SPRING, &$YATTA
	);



	/**
	 * Returns random array of companies based on the name of the package
	 * @param $_package - the name of the package (one of jee|sdk|java|cpp|modeling|reporting|rcp|php|pulsar)
	 * @return array - array of companyInfo objects
	 */
	function getCompanyArrayByPackage($_package, $_weighted=true) {
		$rValue = array();
		global $companyinfo;
		foreach ($companyinfo as $company) {
			if(strpos($company->projects, $_package) !== false && $company->version == "2020-03") {
				$rValue[] = $company;
			}
		}
		# randomize the list here is requested to do so.
		if($_weighted) {
			$a = randomSeed($rValue);
			$newArray = array();
			foreach($a as $key=>$value) {
				$newArray[] = $rValue[$value];
			}

			$rValue = $newArray;
		}
		return $rValue;
	}
?>
