Package sagan.tools.support

Source Code of sagan.tools.support.EclipseDownloadsBuilder

package sagan.tools.support;

import sagan.tools.Architecture;
import sagan.tools.EclipseDownloads;
import sagan.tools.EclipsePackage;
import sagan.tools.EclipsePlatform;
import sagan.tools.EclipseRelease;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import org.springframework.util.StringUtils;

class EclipseDownloadsBuilder {
    private final Map<String, EclipsePlatform> platforms = new HashMap<>();
    private final Map<String, EclipsePackage> packages = new HashMap<>();
    private final Map<String, EclipseRelease> releases = new HashMap<>();
    private final Map<String, Architecture> architectureMap = new LinkedHashMap<>();

    private final DownloadLinkExtractor downloadLinkExtractor = new DownloadLinkExtractor();

    public void addDownload(EclipseXmlDownload eclipseXmlDownload, EclipseXmlPackage eclipseXmlPackage,
                            EclipseXmlProduct eclipseXmlProduct) {
        String os = eclipseXmlDownload.getOs();
        EclipsePlatform platform = getEclipsePlatform(os);
        EclipseRelease release = getEclipseRelease(eclipseXmlProduct, platform);
        EclipsePackage eclipsePackage = getEclipsePackage(eclipseXmlPackage, os, release);
        Architecture architecture = getArchitecture(eclipseXmlDownload, os, release, eclipsePackage);
        architecture.getDownloadLinks().add(downloadLinkExtractor.createDownloadLink(eclipseXmlDownload));
        platforms.put(os, platform);
    }

    private Architecture getArchitecture(EclipseXmlDownload eclipseXmlDownload, String os, EclipseRelease release,
                                         EclipsePackage eclipsePackage) {
        String key = os + release.getName() + eclipsePackage.getName() + eclipseXmlDownload.getDescription();
        Architecture architecture = architectureMap.get(key);
        if (architecture == null) {
            String name = eclipseXmlDownload.getDescription();
            architecture = new Architecture(name, new ArrayList<>());

            architectureMap.put(key, architecture);
            eclipsePackage.getArchitectures().add(architecture);
        }

        return architecture;
    }

    private EclipsePlatform getEclipsePlatform(String os) {
        String key = os;
        EclipsePlatform platform = platforms.get(key);
        if (platform == null) {
            platform = new EclipsePlatform(StringUtils.capitalize(os), new ArrayList<>());
            platforms.put(key, platform);
        }
        return platform;
    }

    private EclipseRelease getEclipseRelease(EclipseXmlProduct eclipseXmlProduct, EclipsePlatform platform) {
        String key = platform.getName() + eclipseXmlProduct.getName();
        EclipseRelease release = releases.get(key);
        if (release == null) {
            String name = new String(eclipseXmlProduct.getName()).replaceAll("(.+) Package Downloads.*", "$1");
            String version = new String(eclipseXmlProduct.getName()).replaceAll(".*\\(based on (.*)\\)", "$1");
            release = new EclipseRelease(name, version, new ArrayList<>());
            releases.put(key, release);
            platform.getReleases().add(release);
        }
        return release;
    }

    private EclipsePackage getEclipsePackage(EclipseXmlPackage eclipseXmlPackage, String os, EclipseRelease release) {
        String key = os + release.getName() + eclipseXmlPackage.getName();
        EclipsePackage eclipsePackage = packages.get(key);
        if (eclipsePackage == null) {
            String name = new String(eclipseXmlPackage.getName()).replaceAll(" \\(.*\\)", "");
            eclipsePackage = new EclipsePackage(name, new ArrayList<>());
            packages.put(key, eclipsePackage);
            release.getPackages().add(eclipsePackage);
        }

        return eclipsePackage;
    }

    public EclipseDownloads build() {
        return new EclipseDownloads(platforms);
    }
}
TOP

Related Classes of sagan.tools.support.EclipseDownloadsBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.