OpticPointImpl.java

// @formatter:off
 /*******************************************************************************
 *
 * This file is part of JMad.
 * 
 * Copyright (c) 2008-2011, CERN. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 ******************************************************************************/
// @formatter:on

package cern.accsoft.steering.jmad.domain.optics;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cern.accsoft.steering.jmad.domain.types.enums.JMadPlane;
import cern.accsoft.steering.jmad.domain.var.enums.JMadTwissVariable;
import cern.accsoft.steering.jmad.domain.var.enums.MadxTwissVariable;
import cern.accsoft.steering.jmad.util.bean.NamedBean;
import com.google.common.collect.ImmutableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class OpticPointImpl implements NamedBean, OpticPoint {

    /**
     * the logger for the class
     */
    protected static final Logger LOGGER = LoggerFactory.getLogger(OpticPointImpl.class);

    /**
     * The name of this point (element name)
     */
    private final String name;

    /**
     * all the madx-variables that are available at an optics-point
     */
    public static final List<MadxTwissVariable> MADX_VARIABLES = ImmutableList.of( //
            MadxTwissVariable.S, //
            MadxTwissVariable.BETX, MadxTwissVariable.BETY, //
            MadxTwissVariable.ALFX, MadxTwissVariable.ALFY, //
            MadxTwissVariable.MUX, MadxTwissVariable.MUY, //
            MadxTwissVariable.DX, MadxTwissVariable.DY, //
            MadxTwissVariable.DPX, MadxTwissVariable.DPY, //
            MadxTwissVariable.X, MadxTwissVariable.Y, //
            MadxTwissVariable.PX, MadxTwissVariable.PY, //
            MadxTwissVariable.DDX, MadxTwissVariable.DDY, //
            MadxTwissVariable.DDPX, MadxTwissVariable.DDPY);

    /**
     * the values for the variables
     */
    private Map<MadxTwissVariable, Double> variableValues = new HashMap<>();

    public OpticPointImpl(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public Double getValue(MadxTwissVariable variable) {
        if (!this.getMadxVariables().contains(variable)) {
            LOGGER.warn("It is not foreseen, that this bean handles the madx-variable '" + variable.toString()
                    + "'. Therefore there may be no getters and setters for this!");
        }
        return this.variableValues.get(variable);
    }

    public void setValue(MadxTwissVariable variable, Double value) {
        if (!this.getMadxVariables().contains(variable)) {
            LOGGER.warn("It is not foreseen, that this bean handles the madx-variable '" + variable.toString()
                    + "'. Therefore there may be no getters and setters for this!");
        }
        this.variableValues.put(variable, value);
        firePropertyChanged();
    }

    @Override
    public Double getValue(JMadTwissVariable variable, JMadPlane plane) {
        return this.getValue(variable.getMadxTwissVariable(plane));
    }

    @Override
    public Double getBetx() {
        return getValue(MadxTwissVariable.BETX);
    }

    @Override
    public Double getBety() {
        return getValue(MadxTwissVariable.BETY);
    }

    @Override
    public Double getMux() {
        return getValue(MadxTwissVariable.MUX);
    }

    @Override
    public Double getMuy() {
        return getValue(MadxTwissVariable.MUY);
    }

    @Override
    public Double getDx() {
        return getValue(MadxTwissVariable.DX);
    }

    @Override
    public Double getDy() {
        return getValue(MadxTwissVariable.DY);
    }

    @Override
    public Double getAlfx() {
        return getValue(MadxTwissVariable.ALFX);
    }

    @Override
    public Double getAlfy() {
        return getValue(MadxTwissVariable.ALFY);
    }

    @Override
    public Double getDdx() {
        return getValue(MadxTwissVariable.DDX);
    }

    @Override
    public Double getDpx() {
        return getValue(MadxTwissVariable.DPX);
    }

    @Override
    public Double getDpy() {
        return getValue(MadxTwissVariable.DPY);
    }

    @Override
    public Double getDdy() {
        return getValue(MadxTwissVariable.DDY);
    }

    @Override
    public Double getDdpx() {
        return getValue(MadxTwissVariable.DDPX);
    }

    @Override
    public Double getDdpy() {
        return getValue(MadxTwissVariable.DDPY);
    }

    @Override
    public Double getX() {
        return getValue(MadxTwissVariable.X);
    }

    @Override
    public Double getPx() {
        return getValue(MadxTwissVariable.PX);
    }

    @Override
    public Double getY() {
        return getValue(MadxTwissVariable.Y);
    }

    @Override
    public Double getPy() {
        return getValue(MadxTwissVariable.PY);
    }

    public List<MadxTwissVariable> getMadxVariables() {
        return OpticPointImpl.MADX_VARIABLES;
    }

    /**
     * this method may be overridden by subclasses in order to notify their listeners. For the moment we do nothing
     * here!
     */
    protected void firePropertyChanged() {
        /* Do nothing. May be overridden by subclass */
    }

    @Override
    public Double getPosition() {
        return getValue(MadxTwissVariable.S);
    }
}