1 /* Copyright 2002-2025 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 package org.orekit.files.ccsds.section; 18 19 import java.util.ArrayList; 20 import java.util.Collections; 21 import java.util.List; 22 23 import org.orekit.errors.OrekitException; 24 import org.orekit.errors.OrekitMessages; 25 26 /** Container for comments in various CCSDS messages. 27 * <p> 28 * CCSDS files accept comments only at the beginning of sections. 29 * Once header/metadata/data content has started, comments in the 30 * corresponding section are refused. 31 * </p> 32 * @author Luc Maisonobe 33 * @since 11.0 34 */ 35 public class CommentsContainer implements Section { 36 37 /** Comments, as one line per string. */ 38 private List<String> comments; 39 40 /** Indicator for accepting comments. */ 41 private boolean acceptComments; 42 43 /** Create a new meta-data. 44 */ 45 public CommentsContainer() { 46 comments = new ArrayList<>(); 47 acceptComments = true; 48 } 49 50 /** Complain if a field is negative. 51 * @param field field to check 52 * @param key key associated with the field 53 */ 54 public void checkNotNegative(final int field, final String key) { 55 if (field < 0) { 56 throw new OrekitException(OrekitMessages.UNINITIALIZED_VALUE_FOR_KEY, key); 57 } 58 } 59 60 /** Complain if a field is NaN. 61 * @param field field to check 62 * @param key key associated with the field 63 */ 64 public void checkNotNaN(final double field, final String key) { 65 if (Double.isNaN(field)) { 66 throw new OrekitException(OrekitMessages.UNINITIALIZED_VALUE_FOR_KEY, key); 67 } 68 } 69 70 /** Complain if a field is null. 71 * @param field field to check 72 * @param key key associated with the field 73 */ 74 public void checkNotNull(final Object field, final String key) { 75 if (field == null) { 76 throw new OrekitException(OrekitMessages.UNINITIALIZED_VALUE_FOR_KEY, key); 77 } 78 } 79 80 /** Complain if a key is not allowed. 81 * @param version format version 82 * @param field field to check 83 * @param key key associated with the field 84 * @param minVersion version at which key started to be allowed 85 * @param maxVersion version at which key started to be forbidden 86 */ 87 public void checkAllowed(final double version, final Object field, final String key, 88 final double minVersion, final double maxVersion) { 89 if (field != null && (version < minVersion || version >= maxVersion)) { 90 throw new OrekitException(OrekitMessages.CCSDS_KEYWORD_NOT_ALLOWED_IN_VERSION, 91 key, version); 92 } 93 } 94 95 /** {@inheritDoc} */ 96 @Override 97 public void validate(final double version) { 98 // nothing to do here 99 } 100 101 /** Get the comments. 102 * @return comments 103 */ 104 public List<String> getComments() { 105 return Collections.unmodifiableList(comments); 106 } 107 108 /** Set the comments. This removes all previous comments and replaces them with the new ones. 109 * @param comments List with new comments 110 */ 111 public void setComments(final List<String> comments) { 112 this.comments = comments; 113 } 114 115 /** Check if container is still accepting comments. 116 * <p> 117 * A container that still accept comments does not contain any other data. 118 * </p> 119 * @return true if container is still accepting comments 120 */ 121 public boolean acceptComments() { 122 return acceptComments; 123 } 124 125 /** Set flag to refuse further comments. 126 */ 127 public void refuseFurtherComments() { 128 acceptComments = false; 129 } 130 131 /** 132 * Add comment. 133 * <p> 134 * Comments are accepted only at start. Once 135 * other content is stored in the same section, comments are refused. 136 * </p> 137 * @param comment comment line 138 * @return true if comment was accepted 139 */ 140 public boolean addComment(final String comment) { 141 if (acceptComments) { 142 comments.add(comment); 143 return true; 144 } else { 145 return false; 146 } 147 } 148 }