OngoingOptics.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.lang;

  5. import static java.util.Objects.requireNonNull;
  6. import static java.util.stream.Collectors.toList;

  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.function.Consumer;

  10. import cern.accsoft.steering.jmad.domain.file.ModelFile;
  11. import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinitionImpl;
  12. import cern.accsoft.steering.jmad.modeldefs.domain.OpticsDefinitionImpl;

  13. public class OngoingOptics {

  14.     private final JMadModelDefinitionImpl modelDefinition;
  15.     private final String name;
  16.     private boolean isDefault = false;
  17.     private Boolean overlay = null;

  18.     public OngoingOptics(String name, JMadModelDefinitionImpl modelDefinition) {
  19.         this.name = requireNonNull(name, "name must not be null");
  20.         this.modelDefinition = requireNonNull(modelDefinition, "modelDefinition must not be null");
  21.     }

  22.     public OngoingOptics isDefault() {
  23.         this.isDefault = true;
  24.         return this;
  25.     }

  26.     public OngoingOptics isOverlay() {
  27.         this.overlay = true;
  28.         return this;
  29.     }

  30.     public void isDefinedAs(Consumer<FileBlock> fileBlock) {
  31.         List<ModelFileBuilder> builders = new ArrayList<>();
  32.         fileBlock.accept(new FileBlock(builders));

  33.         List<ModelFile> modelFiles = builders.stream().map(ModelFileBuilder::build).collect(toList());
  34.         OpticsDefinitionImpl opticsDefinition = opticsDefinition(modelFiles);
  35.         modelDefinition.addOpticsDefinition(opticsDefinition);

  36.         if (isDefault) {
  37.             AssertUtil.requireNull(modelDefinition.getDefaultOpticsDefinition(),
  38.                     "Default optics definition is already set. Cannot set twice!");
  39.             modelDefinition.setDefaultOpticsDefinition(opticsDefinition);
  40.         }
  41.     }

  42.     private OpticsDefinitionImpl opticsDefinition(List<ModelFile> modelFiles) {
  43.         ModelFile[] fileArray = modelFiles.toArray(new ModelFile[modelFiles.size()]);
  44.         if (overlay == null) {
  45.             return new OpticsDefinitionImpl(name, fileArray);
  46.         } else {
  47.             return new OpticsDefinitionImpl(name, overlay, fileArray);
  48.         }
  49.     }

  50. }