SequenceBlock.java

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

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

import static java.util.Objects.requireNonNull;

import java.util.function.Consumer;

import cern.accsoft.steering.jmad.domain.beam.Beam;
import cern.accsoft.steering.jmad.domain.machine.SequenceDefinitionImpl;

public class SequenceBlock {

    private final SequenceDefinitionImpl sequenceDefinition;

    public SequenceBlock(SequenceDefinitionImpl sequenceDefinition) {
        this.sequenceDefinition = requireNonNull(sequenceDefinition, "sequenceDefinition must not be null");
    }

    public void beam(Consumer<BeamBlock> beamBlock) {
        AssertUtil.requireNull(sequenceDefinition.getBeam(), "beam is already defined. Cannot define twice.");
        Beam beam = new Beam();
        beamBlock.accept(new BeamBlock(beam));
        sequenceDefinition.setBeam(beam);
    }

    public OngoingRange range(String rangeName) {
        return new OngoingRange(rangeName, sequenceDefinition);
    }
}