Package ru.aristar.jnuget.sources

Source Code of ru.aristar.jnuget.sources.ProxyPackageSource

package ru.aristar.jnuget.sources;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.aristar.jnuget.Version;
import ru.aristar.jnuget.files.MavenNupkg;
import ru.aristar.jnuget.files.Nupkg;
import ru.aristar.jnuget.files.ProxyNupkg;
import ru.aristar.jnuget.files.RemoteNupkg;
import ru.aristar.jnuget.sources.push.ModifyStrategy;
import ru.aristar.jnuget.ui.descriptors.Property;

/**
*
* @author sviridov
*/
public class ProxyPackageSource implements PackageSource<Nupkg> {

    /**
     * Локальное хранилище пакетов
     */
    protected MavenStylePackageSource hostedSource = new MavenStylePackageSource();
    /**
     * Удаленное хранилище пакетов
     */
    protected RemotePackageSource remoteSource = new RemotePackageSource();
    /**
     * Логгер
     */
    protected Logger logger = LoggerFactory.getLogger(this.getClass());
    /**
     * Стратегия добавления пакетов
     */
    private ModifyStrategy pushStrategy;

    /**
     * Конструктор по умолчанию
     */
    public ProxyPackageSource() {
        hostedSource.setPushStrategy(new ModifyStrategy(true));
    }

    /**
     * @return имя каталога, в котором находится хранилище пакетов
     */
    @Property
    public String getFolderName() {
        return hostedSource.getRootFolderName();
    }

    /**
     * @param folderName имя каталога, в котором находится хранилище пакетов
     */
    public void setFolderName(String folderName) {
        hostedSource.setRootFolderName(folderName);
    }

    /**
     * @param url URL удаленного хранилища
     */
    @Property
    public void setUrl(String url) {
        remoteSource.setUrl(url);
    }

    /**
     * @return URL удаленного хранилища
     */
    public String getUrl() {
        return remoteSource.getUrl();
    }

    @Override
    public Collection<Nupkg> getPackages() {
        ArrayList<Nupkg> nupkgs = new ArrayList<>();
        try {
            for (RemoteNupkg remoteNupkg : remoteSource.getPackages()) {
                nupkgs.add(new ProxyNupkg(hostedSource, remoteNupkg));
            }
        } catch (Exception e) {
            logger.warn("Не удалось получить пакеты из удаленного хранилища", e);
        }
        nupkgs.addAll(hostedSource.getPackages());
        return nupkgs;
    }

    @Override
    public Collection<Nupkg> getLastVersionPackages() {
        Collection<Nupkg> nupkgs = new HashSet<>();
        try {
            for (RemoteNupkg remoteNupkg : remoteSource.getLastVersionPackages()) {
                nupkgs.add(new ProxyNupkg(hostedSource, remoteNupkg));
            }
        } catch (Exception e) {
            logger.warn("Не удалось получить пакеты из удаленного хранилища", e);
        }
        nupkgs.addAll(hostedSource.getLastVersionPackages());
        nupkgs = ClassicPackageSource.extractLastVersion(nupkgs);
        return nupkgs;
    }

    @Override
    public Collection<Nupkg> getPackages(String id) {
        HashMap<Version, Nupkg> packages = new HashMap<>();
        try {
            for (RemoteNupkg remoteNupkg : remoteSource.getPackages(id)) {
                packages.put(remoteNupkg.getVersion(), new ProxyNupkg(hostedSource, remoteNupkg));
            }
        } catch (Exception e) {
            logger.warn("Не удалось получить пакеты из удаленного хранилища", e);
        }
        for (Nupkg nupkg : hostedSource.getPackages(id)) {
            packages.put(nupkg.getVersion(), nupkg);
        }
        return packages.values();
    }

    @Override
    public Nupkg getLastVersionPackage(String id) {
        Collection<Nupkg> nupkgs = getPackages(id);
        if (nupkgs == null || nupkgs.isEmpty()) {
            return null;
        }
        Nupkg result = null;
        for (Nupkg nupkg : nupkgs) {
            if (result == null || result.getVersion().compareTo(nupkg.getVersion()) < 0) {
                result = nupkg;
            }
        }
        return result;
    }

    @Override
    public MavenNupkg getPackage(String id, Version version) {
        MavenNupkg nupkg = hostedSource.getPackage(id, version);
        if (nupkg == null) {
            try {
                logger.debug("Получение файла пакета {}:{} из удаленного хранилища", new Object[]{id, version});
                RemoteNupkg remoteNupkg = remoteSource.getPackage(id, version);
                if (remoteNupkg == null) {
                    return null;
                }
                boolean result = hostedSource.pushPackage(remoteNupkg);
                if (result) {
                    nupkg = hostedSource.getPackage(id, version);
                } else {
                    logger.warn("Не удалось поместить пакет {}:{} в локальное хранилище",
                            new Object[]{remoteNupkg.getId(), remoteNupkg.getVersion()});
                }
            } catch (Exception e) {
                logger.warn("Ошибка помещения файла в локальное хранилище", e);
            }
        }
        return nupkg;
    }

    @Override
    public boolean pushPackage(Nupkg file) throws IOException {
        return false;
    }

    @Override
    public ModifyStrategy getPushStrategy() {
        return this.pushStrategy;
    }

    @Override
    public void setPushStrategy(ModifyStrategy strategy) {
        this.pushStrategy = strategy;
    }

    @Override
    public void removePackage(Nupkg nupkg) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String toString() {
        final String url = remoteSource == null ? null : remoteSource.getUrl();
        final String folder = hostedSource == null ? null : hostedSource.getRootFolderName();
        return "ProxyPackageSource{" + url + " --> " + folder + '}';
    }

    @Override
    public void refreshPackage(Nupkg nupkg) {
        if (nupkg instanceof ProxyNupkg) {
            ProxyNupkg proxyNupkg = (ProxyNupkg) nupkg;
            proxyNupkg.setPackageSource(hostedSource);
        }
    }

    @Override
    public String getName() {
        return remoteSource.getName();
    }

    @Override
    public void setName(String storageName) {
        remoteSource.setName(storageName);
    }
}
TOP

Related Classes of ru.aristar.jnuget.sources.ProxyPackageSource

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.