Package sagan.tools.support

Source Code of sagan.tools.support.ToolSuiteBuilder

package sagan.tools.support;

import sagan.tools.Architecture;
import sagan.tools.Download;
import sagan.tools.DownloadLink;
import sagan.tools.EclipseVersion;
import sagan.tools.ToolSuiteDownloads;
import sagan.tools.ToolSuitePlatform;
import sagan.tools.UpdateSiteArchive;

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

class ToolSuiteBuilder {

    private final DownloadLinkExtractor downloadLinkExtractor = new DownloadLinkExtractor();
    private final String shortName;

    private Map<String, ToolSuitePlatform> platformMap = new LinkedHashMap<>();
    private List<UpdateSiteArchive> updateSiteArchives = new ArrayList<>();
    private Map<String, EclipseVersion> eclipseVersionMap = new LinkedHashMap<>();
    private Map<String, Architecture> architectureMap = new LinkedHashMap<>();
    private String releaseName;
    private String whatsNew;

    public ToolSuiteBuilder(String shortName) {
        this.shortName = shortName;
    }

    public void setWhatsNew(String whatsNew) {
        this.whatsNew = whatsNew;
    }

    public void addDownload(Download download) {
        if (download.getOs().equals("all")) {
            extractArchive(download);
        } else {
            if (releaseName == null) {
                releaseName = download.getVersion();
            }
            extractPlatformDownloadLink(download);
        }
    }

    private void extractPlatformDownloadLink(Download download) {
        ToolSuitePlatform platform = createOrFindPlatform(download.getOs(), download.getVersion());
        EclipseVersion eclipseVersion = createOrFindEclipseVersion(download.getEclipseVersion(), platform);
        Architecture architecture = createOrFindArchitecture(download.getDescription(), eclipseVersion, platform);

        DownloadLink link = downloadLinkExtractor.createDownloadLink(download);
        architecture.getDownloadLinks().add(link);
    }

    private void extractArchive(Download download) {
        String url = download.getBucket() + download.getFile();
        UpdateSiteArchive archive = new UpdateSiteArchive(download.getEclipseVersion(), url, download.getSize());
        if (!updateSiteArchives.contains(archive)) {
            updateSiteArchives.add(archive);
        }
    }

    public ToolSuiteDownloads build() {
        return new ToolSuiteDownloads(shortName, releaseName, whatsNew, platformMap, updateSiteArchives);
    }

    private ToolSuitePlatform createOrFindPlatform(String os, String name) {
        ToolSuitePlatform platform = platformMap.get(os);
        if (platform == null) {
            platform = new ToolSuitePlatform(os, new ArrayList<>());
            platformMap.put(os, platform);
        }
        return platform;
    }

    private EclipseVersion createOrFindEclipseVersion(String eclipseVersionName, ToolSuitePlatform platform) {
        String key = platform.getName() + eclipseVersionName;

        EclipseVersion eclipseVersion = eclipseVersionMap.get(key);
        if (eclipseVersion == null) {
            eclipseVersion = new EclipseVersion(eclipseVersionName, new ArrayList<>());
            platform.getEclipseVersions().add(eclipseVersion);
            eclipseVersionMap.put(key, eclipseVersion);
        }
        return eclipseVersion;
    }

    private Architecture createOrFindArchitecture(String architectureName, EclipseVersion eclipseVersion,
                                                  ToolSuitePlatform platform) {
        String key = platform.getName() + eclipseVersion.getName() + architectureName;

        Architecture architecture = architectureMap.get(key);
        if (architecture == null) {
            architecture = new Architecture(architectureName, new ArrayList<>());
            eclipseVersion.getArchitectures().add(architecture);
            architectureMap.put(key, architecture);
        }
        return architecture;
    }
}
TOP

Related Classes of sagan.tools.support.ToolSuiteBuilder

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.