CenterName.java

/* Copyright 2002-2020 CS Group
 * Licensed to CS Group (CS) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * CS licenses this file to You 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.
 */
package org.orekit.files.ccsds;

import org.orekit.annotation.DefaultDataContext;
import org.orekit.bodies.CelestialBodies;
import org.orekit.bodies.CelestialBody;
import org.orekit.data.DataContext;

/** Orbit central bodies for which a Celestial body can be created.
 * @author sports
 * @since 6.1
 */
public enum CenterName {
    /** Solar system barycenter aggregated body. */
    SOLAR_SYSTEM_BARYCENTER {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getSolarSystemBarycenter();
        }
    },
    /** Sun body. */
    SUN {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getSun();
        }
    },
    /** Mercury body. */
    MERCURY {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getMercury();
        }
    },
    /** Venus body. */
    VENUS {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getVenus();
        }
    },
    /** Earth-Moon barycenter bodies pair. */
    EARTH_MOON {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getEarthMoonBarycenter();
        }
    },
    /** Earth body. */
    EARTH {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getEarth();
        }
    },
    /** Moon body. */
    MOON {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getMoon();
        }
    },
    /** Mars body. */
    MARS {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getMars();
        }
    },
    /** Jupiter body. */
    JUPITER {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getJupiter();
        }
    },
    /** Saturn body. */
    SATURN {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getSaturn();
        }
    },
    /** Uranus body. */
    URANUS {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getUranus();
        }
    },
    /** Neptune body. */
    NEPTUNE {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getNeptune();
        }
    },
    /** Pluto body. */
    PLUTO {

        /** {@inheritDoc}
         * @param celestialBodies*/
        public CelestialBody getCelestialBody(final CelestialBodies celestialBodies) {
            return celestialBodies.getPluto();
        }
    };

    /**
     * Get the celestial body corresponding to the CCSDS constant.
     *
     * <p>This method uses the {@link DataContext#getDefault() default data context}.
     *
     * @return celestial body corresponding to the CCSDS constant
     * @see #getCelestialBody(CelestialBodies)
     */
    @DefaultDataContext
    public CelestialBody getCelestialBody() {
        return getCelestialBody(DataContext.getDefault().getCelestialBodies());
    }

    /**
     * Get the celestial body corresponding to the CCSDS constant.
     *
     * @param celestialBodies the set of celestial bodies to use.
     * @return celestial body corresponding to the CCSDS constant
     * @since 10.1
     */
    public abstract CelestialBody getCelestialBody(CelestialBodies celestialBodies);

}