1 /* Copyright 2002-2021 CS GROUP
2 * Licensed to CS GROUP (CS) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * CS licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.orekit.frames;
19
20 import org.hipparchus.CalculusFieldElement;
21 import org.orekit.time.AbsoluteDate;
22 import org.orekit.time.FieldAbsoluteDate;
23
24 /** Utility for Transform providers.
25 * @author Luc Maisonobe
26 * @since 9.2
27 */
28 public class TransformProviderUtils {
29
30 /** Identity provider.
31 * <p>
32 * The transforms generated by this providers are always {@link Transform#IDENTITY}.
33 * </p>
34 */
35 public static final TransformProvider IDENTITY_PROVIDER = new TransformProvider() {
36
37 /** Serializable UID. */
38 private static final long serialVersionUID = 20180330L;
39
40 /** {@inheritDoc}
41 * <p>
42 * Always returns {@link Transform#IDENTITY}
43 * </p>
44 */
45 @Override
46 public Transform getTransform(final AbsoluteDate date) {
47 return Transform.IDENTITY;
48 }
49
50 /** {@inheritDoc}
51 * <p>
52 * Always returns {@link FieldTransform#getIdentity(org.hipparchus.Field)}
53 * </p>
54 */
55 @Override
56 public <T extends CalculusFieldElement<T>> FieldTransform<T> getTransform(final FieldAbsoluteDate<T> date) {
57 return FieldTransform.getIdentity(date.getField());
58 }
59
60 };
61
62 /** Private constructor.
63 * <p>This class is a utility class, it should neither have a public
64 * nor a default constructor. This private constructor prevents
65 * the compiler from generating one automatically.</p>
66 */
67 private TransformProviderUtils() {
68 }
69
70 /** Reverse a transform provider.
71 * @param provider provider to reverse
72 * @return a new provider which provide a transform similar to
73 * {@code provider.getTransform(date).getInverse()}
74 */
75 public static TransformProvider getReversedProvider(final TransformProvider provider) {
76 return new TransformProvider() {
77
78 /** serializable UID. */
79 private static final long serialVersionUID = 20180330L;
80
81 /** {@inheritDoc} */
82 @Override
83 public Transform getTransform(final AbsoluteDate date) {
84 return provider.getTransform(date).getInverse();
85 }
86
87 /** {@inheritDoc} */
88 @Override
89 public <T extends CalculusFieldElement<T>> FieldTransform<T> getTransform(final FieldAbsoluteDate<T> date) {
90 return provider.getTransform(date).getInverse();
91 }
92
93 };
94 }
95
96 /** Combine two transform providers.
97 * @param first first provider to apply
98 * @param second second provider to apply
99 * @return a new provider which provide a transform similar to
100 * {@code new Transform(date, first.getTransform(date), second.getTransform(date))}
101 */
102 public static TransformProvider getCombinedProvider(final TransformProvider first,
103 final TransformProvider second) {
104 return new TransformProvider() {
105
106 /** serializable UID. */
107 private static final long serialVersionUID = 20180330L;
108
109 /** {@inheritDoc} */
110 @Override
111 public Transform getTransform(final AbsoluteDate date) {
112 return new Transform(date, first.getTransform(date), second.getTransform(date));
113 }
114
115 /** {@inheritDoc} */
116 @Override
117 public <T extends CalculusFieldElement<T>> FieldTransform<T> getTransform(final FieldAbsoluteDate<T> date) {
118 return new FieldTransform<>(date, first.getTransform(date), second.getTransform(date));
119 }
120
121 };
122 }
123
124 }