ModelDefinitionCreator.java

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

package cern.accsoft.steering.jmad.tools.modeldefs.creating;

import static java.util.stream.Collectors.toSet;

import java.nio.file.Paths;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cern.accsoft.steering.jmad.modeldefs.ModelDefinitionFactory;
import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinition;

public final class ModelDefinitionCreator {

    private static final Logger LOGGER = LoggerFactory.getLogger(ModelDefinitionCreator.class);

    private final LocalFactoriesFinder finder;

    public ModelDefinitionCreator(LocalFactoriesFinder finder) {
        this.finder = finder;
    }

    public static final ModelDefinitionCreator scan(String basePath) {
        return new ModelDefinitionCreator(LocalFactoriesFinder.scanning(Paths.get(basePath)));
    }

    public static final ModelDefinitionCreator scanDefault() {
        return new ModelDefinitionCreator(LocalFactoriesFinder.scanningDefault());
    }

    public ModelDefinitionCreator and() {
        return this;
    }

    public void writeToDefault() {
        write(ModelDefinitionWriter.create());
    }

    public void writeTo(String destinationPath) {
        write(ModelDefinitionWriter.toDestination(destinationPath));
    }

    private void write(ModelDefinitionWriter writer) {
        Set<ModelDefinitionFactory> factories = finder.findModelDefinitionFactories();
        if (factories.isEmpty()) {
            LOGGER.info("No factories found. Nothing to do.");
            return;
        }

        Set<JMadModelDefinition> modelDefs = factories.stream().map(ModelDefinitionFactory::create).collect(toSet());
        writer.write(modelDefs);
    }

    public static void main(String... args) {
        scanDefault().and().writeToDefault();
    }
}