SetMisalignmentsTask.java

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

package cern.accsoft.steering.jmad.kernel.task;

import java.util.ArrayList;
import java.util.List;

import cern.accsoft.steering.jmad.domain.misalign.MisalignmentConfiguration;
import cern.accsoft.steering.jmad.domain.misalign.PatternOrClassMisalignmentConfiguration;
import cern.accsoft.steering.jmad.kernel.cmd.Command;

/**
 * A wrapper for a multiple number of tasks such that the command that is sent to the kernel is at once. This class can
 * distinguish both: {@link MisalignmentConfiguration} and {@link PatternOrClassMisalignmentConfiguration} types and
 * creates the commands accordingly.
 * 
 * @author agorzaws
 */
public class SetMisalignmentsTask extends AbstractTask {

    private List<MisalignmentConfiguration> misalignments;

    public SetMisalignmentsTask(List<MisalignmentConfiguration> config) {
        this.misalignments = new ArrayList<>(config);
    }

    @Override
    protected List<Command> getCommands() {
        List<Command> toReturn = new ArrayList<Command>();
        for (MisalignmentConfiguration misalignmentConfiguration : misalignments) {
            if (misalignmentConfiguration instanceof PatternOrClassMisalignmentConfiguration) {
                toReturn.addAll(new SetClassMisalignment(
                        (PatternOrClassMisalignmentConfiguration) misalignmentConfiguration).getCommands());
            } else {
                toReturn.addAll(new SetMisalignment(misalignmentConfiguration).getCommands());
            }
        }
        return toReturn;
    }

}