<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="keywords" content="eclipse, Oomph, eclipse installer, eclipse marketplace"/>
  <link rel="shortcut icon" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/favicon.ico"/>

  <title>Eclipse Marketplace Listing</title>
  <link rel="stylesheet" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/eclipse-ide.min.css?v1.7"/>

  <meta name="description" content="The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 350 open source projects, including runtimes, tools and frameworks."/>

  <script src='https://code.jquery.com/jquery-1.9.0.min.js' type='text/javascript'></script>

  <link href="//fonts.googleapis.com/css?family=Libre+Franklin:400,700,300,600,100" rel="stylesheet" type="text/css"/>

  <style>
    .button, .button:visited, .button:hover, .button:active, .button:link {
      margin-left: 0em;
      margin-top: 1ex;
      margin-bottom: 1ex;
      font-weight: bold;
      border: 1px solid Chocolate;
      background-color: DarkOrange;
      color: white;
      padding: 0.25ex 0.25em;
      text-align: center;
      text-decoration: none;
      display: inline-block;
    }

    .button:hover {
      transition: background-color 0.5s ease;
      background-color: rgb(218, 122,8);
    }

    .thumb {
      width : 25em;
      cursor: pointer;
      transition: 0.3s;
    }

    .thumb:hover {
      opacity: 0.7;
    }

    .section-header {
      margin-bottom: 1.5ex;
      text-indent: -1em;
      margin-left: 1em;
    }

    .bb {
      background-color: white;
      border: none;
      padding: 0px 0px;
    }

    .bb:focus {
      outline: none;
    }

    .bb:hover {
      transition: color 0.5s ease;
      color: rgb(218, 122,8);
    }

    .help {
      position: relative;
      bottom: 1.2ex;
      margin-left: -0.10ex;
      margin-right: 0.10ex;
      width: 1.6ex;
      cursor: pointer;
    }

    .help:hover {
      animation: rotation 1.5s infinite linear;
    }

    @keyframes rotation {
      from {
        transform: rotate(0deg);
        transform-origin: center center;
      }
      to {
        transform: rotate(359deg);
        transform-origin: center center;
      }
    }

    .help-link {
      cursor: pointer;
      transition: font-weight 2s;
    }

    .help-link:hover {
      cursor: pointer;
      text-decoration: underline;
      text-decoration-color: orange;
    }

    .modal-popup {
      display: none;
      position: fixed;
      z-index: 1;
      padding-top: 100px;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      overflow: auto;
      background-color: rgb(0,0,0);
      background-color: rgba(0,0,0,0.8);
    }

    .modal-popup-content {
      margin: auto;
      display: block;
      width: 80%;
      max-width: 900px;
    }

    #modal-popup-caption {
      margin: auto;
      display: block;
      width: 80%;
      max-width: 90%;
      text-align: left;
      font-size: 150%;
      color: white;
      padding: 0 0;
      height: 150px;
    }

    .modal-popup-content, #modal-popup-caption {
      animation-name: zoom;
      animation-duration: 0.6s;
    }

    @keyframes zoom {
      from {transform:scale(0)}
      to {transform:scale(1)}
    }

    .modal-popup-close {
      position: absolute;
      top: 15px;
      right: 35px;
      color: #f1f1f1;
      font-size: 40px;
      font-weight: bold;
      transition: 0.3s;
    }

    .modal-popup-close:hover, .modal-popup-close:focus {
      color: #bbb;
      text-decoration: none;
      cursor: pointer;
    }

    @media only screen and (max-width: 900px) {
      modal-content {
        width: 100%;
      }
    }

    [tooltip]::after {
      content: attr(tooltip);
      position: absolute;
      opacity: 0;
      display: none;
      white-space: pre-line;
      font-weight: normal;
      transition: all 0.15s ease;
      padding: 10px;
      color: #333;
      border-radius: 10px;
      box-shadow: 2px 2px 1px silver;
      max-height: 0px;
    }

    [tooltip]:hover::after {
      content: attr(tooltip);
      opacity: 1;
      display: inline-block;
      background: Moccasin;
      margin-top: -4ex;
      margin-left: 1ex;
      z-index: 99;
      max-height: 100%;
    }

    #marketplace-title-span, .marketplace-title-span {
      font-size: 100%;
      cursor: pointer;
    }

    #marketplace-insertion-section, .marketplace-insertion-section {
      display: none;
    }

    #marketplace-section, .marketplace-section {
      overflow: hidden;
      margin-left: 2em;
    }

    #marketplace-image, .marketplace-image {
      float: left;
      margin-right: 2ex;
      margin-bottom: 2ex;
    }

    #marketplace-small-image, .marketplace-small-image {
      font-size: 100%;
      height: 2ex;
      vertical-align: baseline;
      margin-bottom: -0.1ex;
    }

    .loader {
      border: 0.5ex solid #f3f3f3; 
      border-top: 0.5ex solid #3498db; 
      border-radius: 50%;
      width: 3ex;
      height: 3ex;
      animation: spin 2s linear infinite;
    }

    @keyframes spin {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }
  </style>

  <script>
    var eclipse_org_common = {
      "settings": {
        "cookies_class": {
          "name": "eclipse_settings",
          "enabled": 1
        }
      }
    }

    function getParameter(search, name) {
      try {
        // This is not available on IE 11.
        var urlParameters = new URLSearchParams(search);
        return urlParameters.get(name);
      }
      catch (e) {
        var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(search);
        if (results == null) {
          return null;
        }
        else {
          return decodeURI(results[1]) || 0;
        }
     }
   }

    window.onload = function () {
      var scheme = getParameter(window.location.search, 'scheme');
      if (scheme == null) {
        scheme = 'eclipse+installer';
      } else {
        scheme = scheme.replace(/ /g, '+');
      }
      updateScheme('scheme', scheme);

      var url = getParameter(window.location.search, 'url');
      var nodeID = getParameter(window.location.search, 'id');

      var os = getOS();
      if (os == 'win') {
        hide('installer-mac'); hide('installer-linux');
      } else if (os == 'mac') {
        hide('installer-win'); hide('installer-linux');
      } else if (os == 'linux') {
        hide('installer-win'); hide('installer-mac');
      }

      var style = getParameter(window.location.search, 'style');

      var titleSection = document.getElementById('title');
      if (nodeID != null || url != null)
      {
        titleSection.innerText = " for a single listing";
      }
      else if (style == null)
      {
        titleSection.innerText = 'usable ' + titleSection.innerText;
      }
      else if (style == 'all')
      {
        titleSection.innerText = 'all ' + titleSection.innerText;
      }
      else if (style == 'warning')
      {
        titleSection.innerText += ' with warnings'
      }
      else if (style == 'error-only')
      {
        titleSection.innerText += ' with errors'
      }
      else if (style == 'error')
      {
        titleSection.innerText += ' with errors or warnings'
      }
      else if (style == 'site-error')
      {
        titleSection.innerText += ' with broken sites'
      }
      else if (style == 'resolution-error')
      {
        titleSection.innerText += ' with resolution errors'
      }
      else if (style == 'iu-error')
      {
        titleSection.innerText += ' with installable unit errors'
      }

      if (nodeID != null) {
        style='all';
        loadSingleMarketplaceListings(style, url, null, nodeID);
      } else if (url != null) {
        style='all';
        var marketplaceContentMatch = url.match(/https?:\/\/marketplace\.eclipse\.org\/content\/([^\/?#]*)/);
        if (marketplaceContentMatch != null) {
          var id = marketplaceContentMatch[1];
          loadSingleMarketplaceListings(style, url, id, nodeID);
        }
      } else {
        loadMarketplaceListings(style, url);
      }
    }

    function updateHref(id, url, tooltip) {
       var e = document.getElementById(id);
       if (e != null) {
         e.href = url;
         e.setAttribute('tooltip', tooltip.replace(/\//g, '/\u200B'));
      }
    }

    function hide(id) {
       var e = document.getElementById(id);
       if (e != null) {
         document.getElementById(id).style.display = 'none';
       }
    }

    function updateScheme(id, scheme) {
       var e = document.getElementById(id);
       if (e != null) {
         e.innerHTML = scheme;
      }
    }

    function getOS() {
      var os='unknown';
      var appVersion = navigator.appVersion;
      if (appVersion.indexOf('Win') !=-1) os = 'win';
      else if (appVersion.indexOf('Mac') !=-1) os = 'mac';
      else if (appVersion.indexOf('X11') !=-1 || appVersion.indexOf('Linux') !=-1) os = 'linux';
      return os;
    }

    function expand_collapse(id, navigate) {
      var e = document.getElementById(id);
      var f = document.getElementById(id + '_arrow');
      if (e.style.display == 'none'){
        e.style.display = 'block';
        f.innerHTML = '&#x25E2;';
        if (navigate) {
          e.previousElementSibling.scrollIntoView();
        }
      } else {
        e.style.display = 'none';
        f.innerHTML = '&#x25B7;';
      }
    }

    function copyToClipboard(element) {
      var $temp = $("<textarea>");
      $("body").append($temp);
      $temp.val($(element).text().replaceAll('>', '>\n')).select();
      document.execCommand("copy");
      $temp.remove();
    }

    function downloadXML(filename, textElement) {
      var element = document.createElement('a');
      element.setAttribute('href', 'data:text/xml;charset=utf-8,' + encodeURIComponent($(textElement).text().replaceAll('>', '>\n')));
      element.setAttribute('download', filename);
      element.style.display = 'none';
      document.body.appendChild(element);
      element.click();
      document.body.removeChild(element);
    }

    function popup(id) {
      var popup = document.getElementById('popup');
      popup.style.display = 'block';

      // Get the source image and insert its "src" as the  popup image's "src".
      var sourceImage = document.getElementById(id);
      var targetImage = document.getElementById('modal-popup-image');
      targetImage.src = sourceImage.src;

      // Use the source image's "alt" text as a caption.
      var captionText = document.getElementById('modal-popup-caption');
      captionText.innerHTML = sourceImage.alt;

      // When the user clicks on close button, close the popup.
      var closeButton = document.getElementsByClassName('modal-popup-close')[0];
      closeButton.onclick = function() {
        popup.style.display = 'none';
      }
    }

    function popupMessage(image, text) {
      var popup = document.getElementById('popup');
      popup.style.display = 'block';

      var targetImage = document.getElementById('modal-popup-image');
      targetImage.style.display = 'none';
      targetImage.src = image;

      var captionText = document.getElementById('modal-popup-caption');
      captionText.innerHTML = text;
      captionText.style.textAlign = 'left';
      captionText.style.fontSize = '80%';
      captionText.style.whiteSpace = 'pre';

      // When the user clicks on close button, close the popup.
      var closeButton = document.getElementsByClassName('modal-popup-close')[0];
      closeButton.onclick = function() {
        popup.style.display = 'none';
      }
    }

    function summarize(style)
    {
      var listingSummary = document.getElementById('listing-summary');
      listingSummary.innerText = '<?xml version="1.0" encoding="UTF-8"?>\n<listings' + (style == null ? '' : ' style="' + style + '"') + '>\n' + listingSummary.innerText + '</listings>';
    }

    function loadSingleMarketplaceListings(style, url, id, nodeID) {
      var request = new XMLHttpRequest();
      var fetchURL = "fetch.php?id=" + (id != null ? id : nodeID);
      request.open('GET', fetchURL, true);
      request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200 && request.responseText != null && request.responseText.length > 100) {

         var progressTextHTML = document.getElementById('progress-text');
         progressTextHTML.innerText = 'Analyzing the the catalog';

          var parser = new DOMParser();
          var xmlDoc = parser.parseFromString(request.responseText, "text/xml");
          createMarketplaceListings(xmlDoc, style, url);
          summarize(style);
          var expandButton = document.getElementsByClassName('marketplace-section_arrow')[0];
          expandButton.onclick();
        }
      };
      request.send();
    }

    function loadMarketplaceListings(style, url) {
      var request = new XMLHttpRequest();
      var requestURL = '../marketplace-listings/marketplace.eclipse.org.setup';
      request.open('GET', requestURL, true);
      request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200 && request.responseText != null && request.responseText.length > 100) {

         var progressTextHTML = document.getElementById('progress-text');
         progressTextHTML.innerText = 'Analyzing the the catalog';

          var parser = new DOMParser();
          var xmlDoc = parser.parseFromString(request.responseText, "text/xml");
          createMarketplaceListings(xmlDoc, style, url);
          summarize(style);
          if (url != null) {
            var expandButton = document.getElementsByClassName('marketplace-section_arrow')[0];
            expandButton.onclick();
          }
        }
      };
      request.send();
    }

    function createMarketplaceListings(xmlDoc, style, url) {
      var projects = xmlDoc.getElementsByTagName('project') ;

      var progressTextHTML = document.getElementById('progress-text');
      progressTextHTML.innerText = 'Processing ' + projects.length + ' lists.';

      var count = 0;
      var displayCount = 0;
      var warningCount = 0;
      var errorCount = 0;
      for (var i = 0; i < projects.length; ++i) {
        var result = createMarketplaceListing(projects[i], style, url);
        ++count;
        if (result != null) {
          ++displayCount;
          if (result[0] == 'Error.png') {
            ++errorCount;
          } else if (result[0] == 'Warning.png') {
            ++warningCount;
          }
        }
      } 

      var progressHTML = document.getElementById('progress');
      progressHTML.style.display = 'none'; 

      var summarySection = document.getElementById('summary');
      summarySection.style.display = 'block';
      var summaryCount = document.getElementById('summary-count');
      if (style == null) {
        summaryCount.innerText = displayCount + ' usable ';
      } else {
        summaryCount.innerText = count;
        if (style != 'all')
        {
          var displaySummary = document.getElementById('display-summary');
          displaySummary.style.display = 'inline-block';
          var summaryDisplayCount = document.getElementById('display-count');
          summaryDisplayCount.innerText = displayCount;
        }
      }

      if (style != null) {
        var summaryError = document.getElementById('summary-error');
        summaryError.style.display = 'inline-block';

        var summaryErrorCount = document.getElementById('summary-error-count');
        summaryErrorCount.innerText = errorCount;
        var summaryWarningCount = document.getElementById('summary-warning-count');
        summaryWarningCount.innerText = warningCount;
      }
    }

    function createMarketplaceListing(project, style, url) {
      var siteURI = null;
      var siteDetail = project.querySelector("detail[key='siteURI']");
      if (siteDetail != null) {
        siteURI = siteDetail.querySelector('value').textContent;
      }

      var marketplaceID = null;
      var marketplaceIDDetail = project.querySelector("detail[key='marketplaceID']");
      if (marketplaceIDDetail != null) {
        marketplaceID = marketplaceIDDetail.querySelector('value').textContent;
      }

      if (url != null && url != siteURI && url != decodeURI(siteURI)) {
        return null;
      }

      var imageURI = null;
      var xmlImageDetail = project.querySelector("detail[key='imageURI']");
      if (xmlImageDetail != null) {
        imageURI = xmlImageDetail.querySelector('value').textContent;
      }

      var title = project.getAttribute('label');
      var body= project.querySelector('description').textContent;

      var mainUpdateURL = null;
      var mainIUs = new Map();
      var mainUpdateURLProblem = null;
      var bogusIUs = false;
      var failedResolutions = false;
      var streamDetails = new Map();
      var problem = [null, null];

      var p2Task = project.querySelector(':scope > setupTask');
      if (p2Task != null) {
        var repository = p2Task.querySelector('repository');
        if (repository != null) {
          mainUpdateURL = repository.getAttribute('url');
          var detailMessage = repository.querySelector("detail[key='message']")
          if (detailMessage != null) {
            mainUpdateURLProblem = detailMessage.querySelector('value').textContent;
            problem[0] = 'Error.png';
            problem[1] = mainUpdateURLProblem;
          }
        }

        var requirements = p2Task.querySelectorAll('requirement');
        for (var i = 0; i < requirements.length; ++i) {
          var requirement = requirements[i];
          var requirementID = requirement.getAttribute("name");
          var requirementName = requirement.querySelector("detail[key='name']");
          if (requirementName != null) {
            var name = requirementName.querySelector('value').textContent;
            mainIUs.set(requirementID, name);
            if (name == 'BogusIU') {
              bogusIUs = true;
              if (problem[0] == null) {
                problem[0] = 'Error.png';
                problem[1] = "The installable unit with id '" + requirementID + "' cannot be resolved in the repository";
              }
            }
          }
        }
      }

      if (mainUpdateURLProblem == null) {
        var streams = project.querySelectorAll('stream');
        var successes = 0;
        for (var i = 0; i < streams.length; ++i) {
          var success = false;
          const stream = streams[i];
          const data = [ null, null, null, null, null ];
          const exception = stream.querySelector("detail[key='exception']");
          if (exception == null) {
            success = true;
          } else {
            const reject = stream.querySelector("detail[key='reject']");
            data[0] = exception.querySelector('value').textContent;
            if (reject == null) {
              failedResolutions = true;
              if (problem[0] == null) {
                problem[0] = 'Error.png';
                problem[1] = data[0];
              }
            } else { 
              data[1] = 'reject';
            }
          }

          streamDetails.set(stream.getAttribute('name'), data);

          var streamP2Task = stream.querySelector('setupTask');
          if (streamP2Task != null) {
            var streamRepository = streamP2Task.querySelector('repository');
            var streamUpdateURL = null;
            var streamUpdateURLProblem = null;
            if (streamRepository != null) {
              streamUpdateURL = streamRepository.getAttribute('url');
              var streamDetailMessage = streamRepository.querySelector("detail[key='message']")
              if (streamDetailMessage != null) {
                success = false;
                streamUpdateURLProblem = streamDetailMessage.querySelector('value').textContent;
                if (problem[0] == null) {
                  problem[0] = 'Error.png';
                  problem[1] = streamUpdateURLProblem;
                }
              }
            }

            var streamIUs = new Map();
            var streamRequirements = streamP2Task.querySelectorAll('requirement');
            for (var j = 0; j < streamRequirements.length; ++j) {
              var streamRequirement = streamRequirements[j];
              var streamRequirementID = streamRequirement.getAttribute("name");
              var streamRequirementName = streamRequirement.querySelector("detail[key='name']");
              if (streamRequirementName != null) {
                var name = streamRequirementName.querySelector('value').textContent;
                streamIUs.set(streamRequirementID, name);
                if (name == 'BogusIU') {
                  bogusIUs = true;
                  if (problem[0] == null) {
                    problem[0] = 'Error.png';
                    problem[1] = "The installable unit with id '" + streamRequirementID + "' cannot be resolved in the repository";
                  }
                }
              }
            }

            data[2] = streamUpdateURL;
            data[3] = streamUpdateURLProblem;
            data[4] = streamIUs;
          }

          if (success) {
            ++successes;
          }

          if (successes > 0 && problem[0] != null) {
            problem[0] = "Warning.png";
          }
        }
      }

      var prefix = '_' + project.getAttribute('name') + '_';

      if (style == 'all' || 
            style == 'error' && problem[0] != null || 
            style == null && problem[0] != 'Error.png' || 
            style == 'warning' && problem[0] == 'Warning.png' || 
            style == 'error-only' && problem[0] == 'Error.png' || 
            style == 'site-error' && mainUpdateURLProblem != null || 
            style == 'iu-error' &&  bogusIUs || 
            style == 'resolution-error' && mainUpdateURLProblem == null && problem[0] == 'Error.png') {
        var sectionTemplate = document.getElementById('marketplace-insertion-section');
        var section = sectionTemplate.cloneNode(true);
        var allIDs = section.querySelectorAll("*[id]");
        for (var i = 0; i < allIDs.length; ++i) {
          var element = allIDs[i];
          var id = element.getAttribute('id');
          element.setAttribute('id', prefix + id);
        }
  
        var id = section.getAttribute('id');
        section.setAttribute('id', prefix + section.getAttribute('id'));
  
        sectionTemplate.parentNode.insertBefore(section, sectionTemplate);
        updateMarketplace(prefix, imageURI, siteURI, marketplaceID, title, body, ' and create an installation that includes <b>' + title + '</b>', mainUpdateURL, mainUpdateURLProblem, mainIUs, streamDetails);

        if (problem[0] != null) {
          var statusHTML = document.getElementById(prefix +'marketplace-status-image');
          if (statusHTML != null) {
            statusHTML.src = problem[0];
            statusHTML.style.display = 'inline-block';
            statusHTML.onclick = function() {
              popupMessage('Error.png', problem[1]);
            }
          }
        }

        var listingSummary = document.getElementById('listing-summary');
        listingSummary.innerText += '  <listing id="' + marketplaceID + '" uri="' + siteURI + '"/>\n';

        return problem;
      }

      return null;
    }

    function updateMarketplace(prefix, imageURI, siteURI, marketplaceID, title, body, instruction, mainUpdateURL, mainUpdateURLProblem, mainIUs, streamDetails) {
	
var init = function() {
      if (imageURI != null) {
        var sectionImage = document.getElementById(prefix + 'marketplace-image');
        sectionImage.src = imageURI;
        sectionImage.parentElement.href = siteURI;
      }

      var htmlBody = document.getElementById(prefix + 'marketplace-body');
      htmlBody.innerHTML = body;

      if (mainUpdateURL != null) {
        var repositoryHTML = document.getElementById(prefix +'marketplace-main-repository');
        repositoryHTML.style.display = 'block';

        var anchorHTML = document.getElementById(prefix +'marketkplace-main-url');
        anchorHTML.href = mainUpdateURL;
        anchorHTML.innerText = mainUpdateURL;

        if (mainUpdateURLProblem != null) {
          var problemHTML = document.getElementById(prefix +'marketkplace-main-url-problem');
          problemHTML.style.display = 'inline-block';
          problemHTML.parentElement.onclick = function() {
            popupMessage('Error.png', mainUpdateURLProblem);
          }
        }
      }

      var launchInstaller = document.getElementById(prefix + 'link-installer-launch');
      launchInstaller.href = 'eclipse+installer:' + siteURI;

      var launchInstallerHelp = document.getElementById(prefix + 'link-installer-launch-help');
      launchInstallerHelp.href = '../installer/?show=true&url=' + siteURI;

      var launchMPC = document.getElementById(prefix + 'link-mpc-launch');
      launchMPC.href = 'eclipse+mpc://marketplace.eclipse.org/marketplace-client-intro?mpc_install=' + marketplaceID;

      if (mainIUs.length != 0) {
        var mainIUHTMLPrototype = document.getElementById(prefix +'marketplace-main-iu');
        var mainIUNameHTMLPrototype = document.getElementById(prefix +'marketplace-main-iu-name');
        var mainIUHTMLProblemPrototype = document.getElementById(prefix +'marketkplace-main-iu-problem');

        for (var [key, value] of mainIUs) {
          if (value == "BogusIU") {
            mainIUNameHTMLPrototype.innerText = key;
            mainIUHTMLProblemPrototype.style.display = 'inline-block';
          } else {
            mainIUNameHTMLPrototype.innerText = value;
            mainIUHTMLProblemPrototype.style.display = 'none';
          }

          var mainIUHTML = mainIUHTMLPrototype.cloneNode(true);
          if (value == 'BogusIU') {
	        const bogusIU = key;
            var popup = function() {
              popupMessage('Error.png', "The installable unit with id '" + bogusIU + "' cannot be resolved in the repository:\n  " + mainUpdateURL);
            };

            mainIUHTML.querySelector('button').onclick = popup;
          }

          mainIUHTMLPrototype.parentElement.insertBefore(mainIUHTML, mainIUHTMLPrototype);

          if (mainUpdateURL != null) {
            mainIUHTML.style.marginLeft = '1em';
          }
        }

        mainIUHTMLPrototype.style.display = 'none';
      }

      var streamPrototype = document.getElementById(prefix +'marketplace-stream');
      if (streamDetails.length != 0) {
        for (var [key, value] of streamDetails) {

          var streamHTML = streamPrototype.cloneNode(true);
          var streamName= streamHTML.querySelector("*[templateID='marketplace-stream-name']");
          var streamProblem = streamHTML.querySelector("*[templateID='marketkplace-stream-problem']");
          var streamAnchorHTML = streamHTML.querySelector("*[templateID='marketkplace-stream-url']");
          var streamProblemHTML = streamHTML.querySelector("*[templateID='marketkplace-stream-url-problem']");

          streamName.innerText = key;

          const exception = value[0];
          const reject = value[1];
          const streamURL = value[2];
          const streamURLProblem = value[3];
          const streamIUs = value[4];

          var popup = function () {
            if (exception != null) {
              popupMessage('Error.png', exception);
            } else {
              popupMessage('Error.png', streamURLProblem);
            }
          };

          if (exception == null && streamURLProblem == null) {
            streamProblem.src= 'OK.png';
          } else {
	// todo
            streamProblem.parentElement.onclick = popup;
            streamProblem.parentElement.style.display = 'inline-block';

            if (reject == 'reject') {
              streamProblem.src= 'Reject.png';
            } else {
              streamProblem.src= 'Error.png';
            }
          }

          if (streamURL != null) {
            streamAnchorHTML.href = streamURL;
            streamAnchorHTML.innerText = streamURL;
            streamAnchorHTML.parentElement.style.marginLeft = '1em';
            streamAnchorHTML.parentElement.style.display = 'block';
          } else {
            streamAnchorHTML.parentElement.style.display = 'none';
          }

          var streamIUHTMLPrototype = streamHTML.querySelector("*[templateID='marketplace-stream-iu']");
          if (streamIUs != null) {
            for (var [key, value] of streamIUs) {
              var streamIUHTML = streamIUHTMLPrototype.cloneNode(true);
              var streamIUNameHTML = streamIUHTML.querySelector("*[templateID='marketplace-stream-iu-name']");
              var streamIUHTMLProblem = streamIUHTML.querySelector("*[templateID='marketkplace-stream-iu-problem']");
  
              if (value == "BogusIU") {
                streamIUNameHTML.innerText = key;
                streamIUHTMLProblem.style.display = 'inline-block';
              } else {
                streamIUNameHTML.innerText = value;
                streamIUHTMLProblem.style.display = 'none';
              }
    
              streamIUHTML.style.display = 'block';
              if (value == 'BogusIU') {
	            const badIU = key;
                var popup = function() {
    // todo
                  popupMessage('Error.png', "The installable unit with id '" + badIU + "' cannot be resolved in the repository:\n  " + streamURL);
                };
    
  // todo
                streamIUHTML.querySelector('button').onclick = popup;
              }
  
              streamIUHTMLPrototype.parentElement.insertBefore(streamIUHTML, streamIUHTMLPrototype);
    
              if (streamURL != null) {
                streamIUHTML.style.marginLeft = '2em';
              } else {
                streamIUHTML.style.marginLeft = '1em';
              }
            }
          }

          streamIUHTMLPrototype.style.display = 'none';

          var problemButton = streamHTML.querySelector('button');
          if (exception == null && streamURLProblem == null) {
            // problemButton.style.display = 'none';
          } else {
            problemButton.style.display = 'inline-block';
            problemButton.onclick = popup;
          }

          streamPrototype.parentElement.insertBefore(streamHTML, streamPrototype);
        }
      }

      streamPrototype.style.display = 'none';
};

      const expandCollapse = function() {
        if (init != null) {
           init();
           init = null;
        }
        expand_collapse(prefix + 'marketplace-section'); 
      }

      if (imageURI != null) {
        var smallImage = document.getElementById(prefix + 'marketplace-small-image');
        smallImage.src = imageURI;
      }

      var button = document.getElementById(prefix + 'marketplace-section_arrow');
      button.onclick = expandCollapse;

      button = document.getElementById(prefix + 'marketplace-title-span');
      button.onclick = expandCollapse;

      var section = document.getElementById(prefix + 'marketplace-insertion-section');
      section.style.display = 'block';

      var sectionHeader = document.getElementById(prefix + 'marketplace-title-span');
      sectionHeader.innerText = title;
    }
  </script>
</head>

<body id="body_solstice">
  <header class="header-wrapper" id="header-wrapper">
    <div class="clearfix toolbar-container-wrapper">
      <div class="container">
        <div class="text-right toolbar-row row hidden-print">
        </div>
      </div>
    </div>
    <div class="container">
      <div class="row" id="header-row">
        <div class="col-sm-5 col-md-4" id="header-left">
          <div class="wrapper-logo-default">
            <a href="https://www.eclipse.org/">
              <img class="logo-eclipse-default hidden-xs" alt="Eclipse.org logo" width="160" src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-ide/eclipse_logo_white.svg"/>
            </a>
          </div>
        </div>
        <div class="col-sm-19 col-md-20 margin-top-10" id="main-menu-wrapper">
          <div class="float-right hidden-xs" id="btn-call-for-action"><a href="https://www.eclipse.org/donate/ide?scope=Eclipse%20Installer" class="btn btn-huge btn-primary"><i class="fa fa-star"></i> Donate</a></div>
          <div class="navbar yamm float-sm-right" id="main-menu">
            <div class="navbar-collapse collapse" id="navbar-main-menu">
              <ul class="nav navbar-nav">
                <li><a href="https://www.eclipse.org/membership/" target="_self">Members</a></li>
                <li><a href="https://www.eclipse.org/org/workinggroups/" target="_self">Working Groups</a></li>
                <li><a href="https://www.eclipse.org/projects/" target="_self">Projects</a></li>
                <li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Community <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                    <li><a href="https://marketplace.eclipse.org">Marketplace</a></li>
                    <li><a href="https://events.eclipse.org">Events</a></li>
                    <li><a href="https://www.planeteclipse.org/">Planet Eclipse</a></li>
                    <li><a href="https://www.eclipse.org/community/eclipse_newsletter/">Newsletter</a></li>
                    <li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li>
                    <li><a href="https://blogs.eclipse.org">Blogs</a></li>
                  </ul>
                </li>
                <li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Participate <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                    <li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
                    <li><a href="https://www.eclipse.org/forums/">Forums</a></li>
                    <li><a href="https://www.eclipse.org/mail/">Mailing Lists</a></li>
                    <li><a href="https://wiki.eclipse.org/">Wiki</a></li>
                    <li><a href="https://wiki.eclipse.org/IRC">IRC</a></li>
                    <li><a href="https://www.eclipse.org/org/research/">Research</a></li>
                  </ul>
                </li>
                <li class="dropdown visible-xs"><a href="#" data-toggle="dropdown" class="dropdown-toggle">Eclipse IDE <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                    <li><a href="https://www.eclipse.org/downloads">Download</a></li>
                    <li><a href="https://www.eclipse.org/eclipseide">Learn More</a></li>
                    <li><a href="https://help.eclipse.org">Documentation</a></li>
                    <li><a href="https://www.eclipse.org/getting_started">Getting Started / Support</a></li>
                    <li><a href="https://www.eclipse.org/contribute/">How to Contribute</a></li>
                    <li><a href="https://www.eclipse.org/ide/">IDE and Tools</a></li>
                    <li><a href="https://www.eclipse.org/forums/index.php/f/89/">Newcomer Forum</a></li>
                  </ul>
                </li>

                <!-- More -->
                <li class="dropdown eclipse-more hidden-xs">
                  <a data-toggle="dropdown" class="dropdown-toggle" role="button">More<b class="caret"></b></a>
                  <ul class="dropdown-menu">
                    <li>
                      <!-- Content container to add padding -->
                      <div class="yamm-content">
                        <div class="row">
                          <ul class="col-sm-8 list-unstyled">
                            <li>
                              <p><strong>Community</strong></p>
                            </li>
                            <li><a href="https://marketplace.eclipse.org">Marketplace</a></li>
                            <li><a href="https://events.eclipse.org">Events</a></li>
                            <li><a href="https://www.planeteclipse.org/">Planet Eclipse</a></li>
                            <li><a href="https://www.eclipse.org/community/eclipse_newsletter/">Newsletter</a></li>
                            <li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li>
                            <li><a href="https://blogs.eclipse.org">Blogs</a></li>
                          </ul>
                          <ul class="col-sm-8 list-unstyled">
                            <li>
                              <p><strong>Participate</strong></p>
                            </li>
                            <li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
                            <li><a href="https://www.eclipse.org/forums/">Forums</a></li>
                            <li><a href="https://www.eclipse.org/mail/">Mailing Lists</a></li>
                            <li><a href="https://wiki.eclipse.org/">Wiki</a></li>
                            <li><a href="https://wiki.eclipse.org/IRC">IRC</a></li>
                            <li><a href="https://www.eclipse.org/org/research/">Research</a></li>
                          </ul>
                          <ul class="col-sm-8 list-unstyled">
                            <li>
                              <p><strong>Eclipse IDE</strong></p>
                            </li>
                            <li><a href="https://www.eclipse.org/downloads">Download</a></li>
                            <li><a href="https://www.eclipse.org/eclipseide">Learn More</a></li>
                            <li><a href="https://help.eclipse.org">Documentation</a></li>
                            <li><a href="https://www.eclipse.org/getting_started">Getting Started / Support</a></li>
                            <li><a href="https://www.eclipse.org/contribute/">How to Contribute</a></li>
                            <li><a href="https://www.eclipse.org/ide/">IDE and Tools</a></li>
                            <li><a href="https://www.eclipse.org/forums/index.php/f/89/">Newcomer Forum</a></li>
                          </ul>
                        </div>
                      </div>
                    </li>
                  </ul>
                </li>
                <li class="dropdown eclipse-more main-menu-search">
                  <a data-toggle="dropdown" class="dropdown-toggle" role="button"><i class="fa fa-search"></i> <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                    <li>
                      <!-- Content container to add padding -->
                      <div class="yamm-content">
                        <div class="row">
                          <div class="col-sm-24">
                            <p>Search</p>
                            <div class="row">
                              <div class="col-md-24">
                                <div id="custom-search-form" class="reset-box-sizing">
                                  <script>
                                    (function() {
                                      var cx = '011805775785170369411:p3ec0igo0qq';
                                      var gcse = document.createElement('script');
                                      gcse.type = 'text/javascript';
                                      gcse.async = true;
                                      gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//cse.google.com/cse.js?cx=' + cx;
                                      var s = document.getElementsByTagName('script')[0];
                                      s.parentNode.insertBefore(gcse, s);
                                    })();
                                  </script>
                                  <gcse:searchbox-only gname="main" resultsUrl="https://www.eclipse.org/home/search.php"></gcse:searchbox-only>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </li>
                  </ul>
                </li>
              </ul>
            </div>
            <div class="navbar-header">
              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-main-menu">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              <div class="wrapper-logo-mobile">
                <a class="navbar-brand visible-xs" href="https://www.eclipse.org/">
                 <img class="logo-eclipse-default-mobile img-responsive" alt="Eclipse.org logo" width="160" src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-ide/eclipse_logo_white.svg"/>
                </a>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </header>

  <section class="default-breadcrumbs hidden-print breadcrumbs-default-margin" id="breadcrumb">
    <div class="container">
      <h3 class="sr-only">Breadcrumbs</h3>
      <div class="row">
        <div class="col-sm-24">
          <ol class="breadcrumb">
            <li><a href="/">Home</a></li>
            <li><a href="https://www.eclipse.org/oomph/">Oomph</a></li>
            <li><a href="https://wiki.eclipse.org/Oomph">Marketplace</a></li>
          </ol>
        </div>
      </div>
    </div>
  </section>

  <main>
    <div class="novaContent container legacy-page" id="novaContent">
      <div class="row">
        <div class="col-md-18">
          <div id="maincontent">
            <div id="midcolumn" style="padding: 0;">
              <div class="homeitem3col">
                <div style="text-align: right; margin-top: -1.5ex; margin-bottom: -3ex; margin-right: -1.5em;">
                  <a href="https://wiki.eclipse.org/Oomph" target="oomph_wiki"><img id="brand-image" style="width: 4ex; height: 4ex;" src="../installer/oomph256.png"/></a>
                </div>


                <h3 class="section-header">
                  <button id="mpc_arrow" class="orange bb" onclick="expand_collapse('mpc');">&#x25E2;</button>
                  <img  style="height: 2.5ex;" src="https://marketplace.eclipse.org/sites/default/files/styles/ds_medium/public/mpc-logo-marketplace.png?itok=F0Yk3YlX"/>
                  <span style=" font-variant: small-caps;">Marketplace.Eclipse.org <span id="title">listings</span></span>
                </h3>
<div class="toggle-target" id="mpc">
                <p>
The 
<a class="help-link" style="font-family: Arial, Helvetica, sans-serif;" href="https://marketplace.eclipse.org/" target="eclipse_marketplace"><span style="color: #2c2255;">eclipse market</span><span class="orange">place</span></a>
provides a large number of listings that can be installed into an existing
<a class="help-link" style="font-family: Arial, Helvetica, sans-serif; white-space: nowrap;" href="https://www.eclipse.org/downloads/packages/" target="eclipse_downloads"><span style="color: #2c2255;">eclipse</span> <span class="orange">IDE</span></a>
or can be added to the 
<a class="help-link" style="font-family: Arial, Helvetica, sans-serif; white-space: nowrap;" href="https://www.eclipse.org/setups/installer/?url=https://marketplace.eclipse.org/content/eclipse-marketplace-client" target="eclipse_installer"><span style="color: #2c2255;">eclipse</span> <span class="orange">installer</span></a>
while creating a new installation.
                </p>
<p id="summary" style="display: none;">
There are a total of <span id="summary-count">1000+</span> listings<span id="display-summary" style="display:none;">, <span id="display-count">0</span> displayed</span><span id="summary-error" style="display: none;">, <span id="summary-error-count">0</span> of which contain errors and <span id="summary-warning-count">0</span> of which contain warnings</span>.
</p>
<pre id="listing-summary" style="display: none;"></pre>
</div>
                <hr class="clearer"/>

<div id="progress">
<p id="progress-text">
The catalog is being loaded.
</p>
 <div class="loader"></div> 
  <hr class="clearer"/>
</div>

<div id="marketplace-insertion-section" class="marketplace-insertion-section">
  <h3 id="marketplace-title" class="section-header marketplace-title">
    <button id="marketplace-section_arrow" class="orange bb marketplace-section_arrow" onclick="expand_collapse('marketplace-section');">&#x25B7;</button>
    <img id="marketplace-small-image" class="marketplace-small-image" src="Configuration.png"/>
    <href id="marketplace-title-span" class="marketplace-title-span bb" onclick="expand_collapse('marketplace-section');"></href>
    <button class="bb"><img id="marketplace-status-image" style="display: none;" class="marketplace-small-image" src="Error.png"/></button>
  </h3>
  <div id="marketplace-section" class="marketplace-section" style="display: none;">

    <div style=" overflow: hidden;">
      <a href="" target="marketplace_listing"><img id="marketplace-image" class="marketplace-image" src=""/></a>
      <div id="marketplace-body" class="marketplace-body"></div>
    </div>

    <div style="padding-bottom: 2ex;">
      <span id="marketplace-launch" style="font-family: Arial, Helvetica, sans-serif;">
        <a id="link-installer-launch" class="button" href="eclipse+installer:"><span style="color: #2c2255;">eclipse</span>+installer</a>
        <a id="link-installer-launch-help" class="help-link" href="../installer/" target="eclipse_installer"><img class="help" src="../installer/Help.png"/></a>
        <a id="link-mpc-launch" class="button" href="eclipse+mpc:" style="margin-left: 1em;"><span style="color: #2c2255;">eclipse</span>+mpc</a>
      </span>
    </div>

    <div>
      <div id="marketplace-main-repository" style="display: none;">
        <img class="marketplace-small-image" src="Repository.png"/>
        <a href="" id="marketkplace-main-url" class="marketplace-main-url" target="marketplace_site"></a>
        <button class="bb" onclick=""><img id="marketkplace-main-url-problem" style="display: none;" class="marketplace-small-image" src="Error.png"/></button>
      </div>
    </div>

    <div>
      <div id="marketplace-main-iu" style="display: block;">
        <img class="marketplace-small-image" src="Feature.png"/>
        <span id="marketplace-main-iu-name" class="marketplace-main-iu-name"></span>
        <button class="bb" onclick=""><img id="marketkplace-main-iu-problem" style="display: inline-block;" class="marketplace-small-image" src="Error.png"></button>
      </div>
    </div>

    <div>
      <div id="marketplace-stream" templateID="marketplace-stream" style="display: block;">
        <img class="marketplace-small-image" src="Version.png"/>
        <span templateID="marketplace-stream-name" class="marketplace-stream-name"></span>
        <button class="bb" onclick=""><img templateID="marketkplace-stream-problem" style="display: inline-block;" class="marketplace-small-image" src="Error.png"></button>

        <div>
          <div templateID="marketplace-stream-repository" style="display: block;">
            <img class="marketplace-small-image" src="Repository.png"/>
            <a href="" templateID="marketkplace-stream-url" class="marketplace-stream-url" target="marketplace_site"></a>
            <button class="bb" onclick=""><img templateID="marketkplace-stream-url-problem" style="display: none;" class="marketplace-small-image" src="Error.png"/></button>
          </div>
        </div>

        <div>
          <div templateID="marketplace-stream-iu" style="display: block;">
            <img class="marketplace-small-image" src="Feature.png"/>
            <span templateID="marketplace-stream-iu-name" class="marketplace-stream-iu-name"></span>
            <button class="bb" onclick=""><img templateID="marketkplace-stream-iu-problem" style="display: inline-block;" class="marketplace-small-image" src="Error.png"></button>
          </div>
        </div>
      </div>
    </div>

  </div>
  <hr class="url-required clearer"/>
</div>

                <div id="popup" class="modal-popup">
                  <span class="modal-popup-close">&times;</span>
                  <img class="modal-popup-content" id="modal-popup-image"/>
                  <div id="modal-popup-caption"></div>
                </div>

              </div>
            </div>
          </div>
        </div>


        <div class="col-md-6">
          <!-- nav -->
          <aside class="main-sidebar-default-margin" id="main-sidebar">
            <ul id="leftnav" class="ul-left-nav fa-ul hidden-print">
              <li class="separator">
                <a class="separator">
                  <button id="copy" title="Copy Listing Summary to Clipboard" class="orange" style="background-color: transparent; border: none; padding: 0px 0px;" onclick="copyToClipboard('#listing-summary');">&#x270e;</button>
                  <a id="download" title="Download Listing Summary" href="" class="orange" style="color: DarkOrange;" onclick="downloadXML('list-report.xml', '#listing-summary');">&#x21e9;</a>
                  Reports
                </a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?">Usable Listings</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?style=all">All Listings</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?style=warning">Listings with Warnings</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?style=error-only">Listings with Errors</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?style=error">Listings with Errors or Warnings</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?style=site-error">Listings with Broken Sites</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?style=resolution-error">Listings with Resolution Errors</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"/></i>
                <a href="?style=iu-error">Listings with Unit Errors</a>
              </li>
              <li class="separator">Community</li>
              <li>
                <i class="fa fa-caret-right fa-fw"></i>
                <a href="https://www.eclipse.org/forums/index.php/f/287/" target="oomph_forum">Ask a Question</a>
              </li>
              <li>
                <i class="fa fa-caret-right fa-fw"></i>
                <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Oomph&amp;component=Setup&amp;short_desc=Marketplace%20reports" target="oomph_bugzilla">Report a Problem</a>
              </li>
            </ul>
          </aside>
        </div>
      </div>
    </div>
  </main>

  <!-- Placed at the end of the document so the pages load faster -->
  <script src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/main.min.js?var=1.3"></script>

</body>

</html>