ModelDefinitionCreator.java

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

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

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

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

  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;

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

  12. public final class ModelDefinitionCreator {

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

  14.     private final LocalFactoriesFinder finder;

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

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

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

  24.     public ModelDefinitionCreator and() {
  25.         return this;
  26.     }

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

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

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

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

  42.     public static void main(String... args) {
  43.         scanDefault().and().writeToDefault();
  44.     }
  45. }