JMadModelPackageServiceConfiguration.java

/**
 * Copyright (c) 2018 European Organisation for Nuclear Research (CERN), All Rights Reserved.
 */

package org.jmad.modelpack.service.conf;

import static org.jmad.modelpack.domain.JMadModelRepositories.cernGitlabOld;
import static org.jmad.modelpack.domain.JMadModelRepositories.cernGitlabPro;
import static org.jmad.modelpack.domain.JMadModelRepositories.cernGitlabTesting;
import static org.jmad.modelpack.domain.JMadModelRepositories.defaultLocalFileRepository;
import static org.jmad.modelpack.domain.JMadModelRepositories.internal;

import cern.accsoft.steering.jmad.service.JMadService;
import cern.accsoft.steering.jmad.util.JMadPreferences;
import cern.accsoft.steering.jmad.util.TempFileUtilImpl;
import org.jmad.modelpack.cache.ModelPackageFileCache;
import org.jmad.modelpack.cache.impl.ModelPackageFileCacheImpl;
import org.jmad.modelpack.connect.classpath.conf.InternalConnectorConfiguration;
import org.jmad.modelpack.connect.gitlab.conf.GitlabConnectorConfiguration;
import org.jmad.modelpack.connect.localfile.conf.LocalFileConnectorConfiguration;
import org.jmad.modelpack.service.JMadModelPackageService;
import org.jmad.modelpack.service.impl.ConcurrentModelPackageRepositoryManager;
import org.jmad.modelpack.service.impl.MultiConnectorModelPackageService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;

/**
 * Spring configuration that only creates the beans for the jmad-modelpack-service. It expects all the necessary beans
 * already in the context. You can use the {@link JMadModelPackageServiceStandaloneConfiguration} if you want to
 * have a fully configured, ready-to-use, context.
 */
@Import({GitlabConnectorConfiguration.class,
        InternalConnectorConfiguration.class,
        LocalFileConnectorConfiguration.class})
public class JMadModelPackageServiceConfiguration {

    @Bean
    public ModelPackageFileCache modelPackageFileCache(JMadService jMadService) {
        JMadPreferences preferences = jMadService.getPreferences();
        TempFileUtilImpl tempFileUtil = new TempFileUtilImpl();
        tempFileUtil.setPreferences(preferences);
        tempFileUtil.init();
        return new ModelPackageFileCacheImpl(tempFileUtil);
    }

    @Bean
    public ConcurrentModelPackageRepositoryManager packageRepositoryManager() {
        ConcurrentModelPackageRepositoryManager manager = new ConcurrentModelPackageRepositoryManager();
        manager.enable(cernGitlabPro());
        manager.enable(internal());
        defaultLocalFileRepository().ifPresent(manager::enable);
        manager.disable(cernGitlabOld());
        manager.disable(cernGitlabTesting());
        return manager;
    }

    @Bean("jmadModelPackageService")
    public JMadModelPackageService jmadModelPackageService() {
        return new MultiConnectorModelPackageService();
    }
}