Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • orekit/orekit
  • gbonnefille/orekit
  • sdinot/orekit
  • vmouraux/orekit
  • Petrush/orekit
  • gprat/orekit
  • Shiva_Iyer/orekit
  • yzokras/orekit
  • hankg/orekit
  • markrutten/orekit
  • ThomasP/orekit
  • mikael/orekit
  • AmirAllahvirdi/orekit
  • rferme/orekit
  • plan3d/orekit
  • andrewsgoetz/orekit
  • Vyom-Yadav/orekit
  • crusconi/orekit
  • afossa/orekit
  • julie.bayard/orekit
  • polmes/orekit
  • kendra.hale/orekit
  • mvanel73/orekit
  • ShippingEnjoyer/orekit
  • tommyfryer/orekit
  • bpfoster/orekit
  • louis_aucouturier/orekit
  • pascal/orekit
  • gaetanpierre0/orekit
  • bryan/orekit
  • vcucchie/orekit
  • GuillaumeFiorello/orekit
  • lirw1984/orekit
  • bradh/orekit
  • qmor/orekit
  • Jasquier/orekit
  • jfraserh/orekit
  • Rafael-Ayala/orekit
  • guillermojanner/orekit
  • Sohnny/orekit
  • laura.garcia/orekit
  • nick.lafarge/orekit
  • whigg/orekit
  • bullat/orekit
  • Zudo/orekit
  • Geckonoid/orekit
  • derekkayhan/orekit
  • simon-van-hulle/orekit
  • briannaaubin/orekit
  • quentin.gegoue/orekit
  • alexbm/orekit
  • rocuv/orekit
52 results
Show changes
Showing
with 1265 additions and 82 deletions
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -25,6 +25,7 @@
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package bodies #DDEBD8 {
......
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam SequenceActorBorderColor #6A584B
skinparam SequenceParticipantBackgroundColor #F3EFEB/CCC9C5
skinparam SequenceParticipantBorderColor #6A584B
skinparam SequenceLifeLineBackgroundColor #CCC9C5/F3EFEB
skinparam SequenceLifeLineBorderColor #6A584B
skinparam SequenceArrowColor #6A584B
skinparam SequenceBorderColor #6A584B
skinparam SequenceFontSize 11
hide footbox
box "User application" #F3EDF7
participant Main
end box
participant MessageParser
participant DataSource
participant LexicalAnalyzerSelector
participant BufferedInputStream
participant XyzLexicalAnalyzer
participant ParseToken
participant NdmConstituent
activate Main
create DataSource
Main -> DataSource : new
create MessageParser
Main -> MessageParser : new
Main -> MessageParser : parse(source)
activate MessageParser
MessageParser -> LexicalAnalyzerSelector : select
activate LexicalAnalyzerSelector
LexicalAnalyzerSelector -> DataSource : openStreamOnce
activate DataSource
return stream
deactivate DataSource
create BufferedInputStream
LexicalAnalyzerSelector -> BufferedInputStream : new
LexicalAnalyzerSelector -> BufferedInputStream : read first 24 bytes
activate BufferedInputStream
BufferedInputStream --> LexicalAnalyzerSelector : 24 bytes
deactivate BufferedInputStream
create XyzLexicalAnalyzer
LexicalAnalyzerSelector -> XyzLexicalAnalyzer : new
LexicalAnalyzerSelector -> BufferedInputStream : reset to stream start
activate BufferedInputStream
deactivate BufferedInputStream
LexicalAnalyzerSelector --> MessageParser : selected lexical analyzer
deactivate LexicalAnalyzerSelector
MessageParser -> XyzLexicalAnalyzer : accept(parser)
activate XyzLexicalAnalyzer
XyzLexicalAnalyzer -> MessageParser : reset(fileFormat)
activate MessageParser
deactivate MessageParser
loop until end of message reached
XyzLexicalAnalyzer -> BufferedInputStream : read
activate BufferedInputStream
BufferedInputStream --> XyzLexicalAnalyzer : characters
deactivate BufferedInputStream
create ParseToken
XyzLexicalAnalyzer -> ParseToken : new
XyzLexicalAnalyzer -> MessageParser : process(parseToken)
activate MessageParser
deactivate MessageParser
end
deactivate XyzLexicalAnalyzer
create NdmConstituent
MessageParser -> NdmConstituent : build
MessageParser --> Main : NdmConstituent
deactivate MessageParser
deactivate Main
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package data #DDEBD8 {
class DataSource {
+getName()
+getOpener()
}
}
package files.ccsds.utils #DDEBD8 {
enum FileFormat {
+KVN
+XML
}
package lexical #CBDBC8 {
class KvnLexicalAnalyzer
class XmlLexicalAnalyzer
interface LexicalAnalyzer {
+accept(MessageParser)
}
class LexicalAnalyzerSelector {
+LexicalAnalyzer select(DataSource)
}
note right
selection is based on
data source first bytes
(looking for XML declaration)
end note
enum TokenType {
+START
+ENTRY
+STOP
+RAW_LINE
}
class ParseToken
interface "MessageParser<T>" as MessageParser {
+parseMessage(Datasource)
+reset(FileFormat)
+process(ParseToken)
+T build()
}
}
}
}
DataSource <-- KvnLexicalAnalyzer
DataSource <-- XmlLexicalAnalyzer
KvnLexicalAnalyzer ..|> LexicalAnalyzer
XmlLexicalAnalyzer ..|> LexicalAnalyzer
LexicalAnalyzer -right-> ParseToken : produces
LexicalAnalyzer <-- LexicalAnalyzerSelector : create
LexicalAnalyzer --> MessageParser : reset
MessageParser --> LexicalAnalyzerSelector : select
FileFormat <-left- LexicalAnalyzer
TokenType "1" <--o ParseToken
ParseToken <-- MessageParser : "process"
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package data #DDEBD8 {
class DataSource
}
package files.ccsds #DDEBD8 {
package section #CBDBC8 {
class HeaderProcessingState
class KvnStructureProcessingState
class XmlStructureProcessingState
}
package ndm #CBDBC8 {
package odm.opm #CCCCC7 {
class OpmParser
class Opm
}
class ParserBuilder {
+withConventions()
+withDataContext()
+withParsedUnitsBehavior()
+with...()
+buildOpmParser()
+buildOmmParser()
+buildOemParser()
+buildOcmParser()
+buildApmParser()
+buildAemParser()
+buildTdmParser()
}
enum ParsedUnitsBehavior {
+IGNORE_PARSED
+CONVERT_COMPATIBLE
+STRICT_COMPLIANCE
}
ParserBuilder -right-> OpmParser : build
ParserBuilder o--> ParsedUnitsBehavior
OpmParser --> Opm: "build"
}
package utils #CBDBC8 {
package lexical #CCCCC7 {
interface LexicalAnalyzer
enum TokenType {
+START
+ENTRY
+STOP
+RAW_LINE
}
class ParseToken {
+getName()
+getType()
+getContent()
+processAsDouble(scaling, doubleConsumer)
+processAsDate(dateConsumer, contextBinding)
+processAsTimeSystem(timeSystemConsumer)
+processAs...(...Consumer, extraParams)
}
interface "MessageParser<T>" as MessageParser {
+parseMessage(Datasource)
+reset(FileFormat)
+process(ParseToken)
+T build()
}
}
package parsing #CCCCC7 {
abstract class "AbstractMessageParser<T>" as AbstractMessageParser {
#reset(fileFormat, initialState)
+prepareHeader()
+inHeader()
+finalizeHeader()
+prepareMetadata()
+inMetadata()
+finalizeMetadata()
+prepareData()
+inData()
+finalizeData()
+setFallback(ProcessingState)
}
interface ProcessingState {
+boolean processToken(ParseToken)
}
}
enum FileFormat {
+KVN
+XML
}
}
}
}
DataSource <-- LexicalAnalyzer
LexicalAnalyzer --> ParseToken : produces
LexicalAnalyzer <-- MessageParser
TokenType "1" <--o ParseToken
ParseToken <-left- ProcessingState
MessageParser --> FileFormat
ParseToken <-- MessageParser : "process"
AbstractMessageParser ..|> MessageParser
ProcessingState <--o AbstractMessageParser : "current"
ProcessingState <--o AbstractMessageParser : "fallback"
HeaderProcessingState ..|> ProcessingState
KvnStructureProcessingState ..|> ProcessingState
XmlStructureProcessingState ..|> ProcessingState
OpmParser .right.|> ProcessingState
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit.files.ccsds #ECEBD8 {
package section #DDEBD8 {
interface Section {
checkMandatoryEntries()
}
class Header {
-formatVersion
-creationDate
-originator
-messageId
}
class Metadata {
-timeSystem
}
interface Data
note top
marker interface
end note
class Segment
Section <|.. Header
Section <|.. Metadata
Section <|.. Data
Metadata <--o Segment
Data <--o Segment
}
package ndm #DDEBD8 {
package odm #CBDBC8 {
class OdmMetadata
Metadata <|-- OdmMetadata
package oem #CCCCC7 {
class OemData {
-ephemeridesDataLines
-covarianceMatrices
}
class OemMetadata
class Oem
Data <|.. OemData
OdmMetadata <|-- OemMetadata
}
package opm #CCCCC7 {
class OpmMetadata
class OpmData {
- stateVector
- keplerianElements
- spacecraftParameters
- covariance
- maneuvers
- userDefinedParameters
}
class Opm
OdmMetadata <|-- OpmMetadata
Data <|.. OpmData
}
}
note bottom
only OEM and OPM are detailed here
similar constructions exist for messages
OMM, OCM, TDM, APM, and AEM
end note
abstract class NdmConstituent
class Ndm
NdmConstituent <|-- Oem
NdmConstituent <|-- Opm
Header "1" <--o NdmConstituent
Segment "*" <--o NdmConstituent
NdmConstituent "*" <--o Ndm
}
}
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit.files #ECEBD8 {
package general #DDEBD8 {
interface EphemerisFile {
+getSatellites()
}
interface "EphemerisFile.EphemerisSegment" as EphemerisSegment {
+getMu()
+getFrame()
+getInertialFrame()
+getInterpolationSamples()
+getAvailableDerivatives()
+getCoordinates()
+getStart()
+getStop()
+getPropagator()
}
interface "EphemerisFile.SatelliteEphemeris" as SatelliteEphemeris {
+getId()
+getMu()
+getSegments()
+getStart()
+getStop()
+getPropagator()
}
interface EphemerisFileWriter
}
package ccsds #DDEBD8 {
package section #CBDBC8 {
interface Header
class Segment
}
package utils #CBDBC8 {
enum FileFormat {
+KVN
+XML
}
package generation #CCCCC7 {
interface MessageWriter {
+writeMessage(generator, message)
+writeHeader(generator, header)
+writeSegment(generator, segment)
}
interface Generator {
+FileFormat getFileFormat()
+startMessage(messageTypeKey, version)
+writeComments(commentsContainer)
+writeEntry(key, value, mandatory)
+writeEmptyLine()
+writeRawData(data)
+enterSection(name)
+exitSection()
+close()
}
class KvnGenerator
class XmlGenerator
}
}
package ndm.odm #CBDBC8 {
package oem #CCCCC7 {
class StreamingOemWriter
class OemWriter
}
package opm #CCCCC7 {
class OpmWriter
}
}
}
}
Header <-- MessageWriter
Segment <-- MessageWriter
Generator <|.. KvnGenerator
Generator <|.. XmlGenerator
MessageWriter --> Generator
FileFormat <-left- Generator
MessageWriter <|.. OpmWriter
MessageWriter <|.. OemWriter
EphemerisSegment <--o SatelliteEphemeris
SatelliteEphemeris <--* EphemerisFile
EphemerisFile <-- EphemerisFileWriter
OemWriter ..|> EphemerisFileWriter
StreamingOemWriter o-right-> OemWriter
@enduml
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -25,24 +25,20 @@
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package data #DDEBD8 {
interface DataLoader
}
package frames #DDEBD8 {
class Frame
}
package utils #DDEBD8 {
interface PVCoordinatesProvider
interface ExtendedPVCoordinatesProvider
}
package bodies #DDEBD8 {
interface CelestialBody {
+Frame getFrame()
+Frame getInertiallyOrientedFrame()
+Frame getBodyOrientedFrame()
+String getName()
......@@ -74,28 +70,30 @@
interface IAUPole {
+Vector3D getPole(AbsoluteDate date)
+Vector3D getNode(AbsoluteDate date)
+double getPrimeMeridianAngle(AbsoluteDate date)
}
class IAUPoleFactory {
abstract class PredefinedIAUPoles {
+IAUPole getIAUPole(EphemerisType body)
}
abstract class AbstractCelestialBody
DataLoader <|.. CelestialBodyLoader
CelestialBodyLoader <|-- JPLEphemeridesLoader
CelestialBodyLoader <|.. JPLEphemeridesLoader
CelestialBody "*" <-left-o "1" CelestialBodyFactory
CelestialBodyFactory "1" o--> "*" CelestialBodyLoader
PVCoordinatesProvider <|.. CelestialBody
CelestialBody -up-> Frame
CelestialBody <|-- AbstractCelestialBody
IAUPole "*" <-left-* "1" IAUPoleFactory : creates
AbstractCelestialBody "1" *--> IAUPole
AbstractCelestialBody <-left- JPLEphemeridesLoader : creates
CelestialBodyFactory "1" o--> "*" CelestialBodyLoader
ExtendedPVCoordinatesProvider <|-- CelestialBody
CelestialBody -up-> Frame
IAUPole "*" <-left-* "1" PredefinedIAUPoles : creates
CelestialBody "1" *--> IAUPole
CelestialBody <-left- JPLEphemeridesLoader : creates
}
package data #DDEBD8 {
abstract class AbstractSelfFeedingLoader
JPLEphemeridesLoader --|> AbstractSelfFeedingLoader
}
}
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package attitude #DDEBD8 {
interface AttitudeProvider
}
package forces #DDEBD8 {
interface ForceModel
package maneuvers #CBDBC8 {
package propulsion #CCCCC7 {
interface PropulsionModel
}
package trigger #CCCCC7 {
interface ManeuverTriggers
}
interface Maneuver
ForceModel <|.. Maneuver
AttitudeProvider <--o Maneuver : "optional attitude override"
Maneuver o--> PropulsionModel
Maneuver o--> ManeuverTriggers
}
}
}
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package data #DDEBD8 {
interface DataLoader
abstract class AbstractSelfFeedingLoader {
#feed(final DataLoader loader)
}
}
package "..." as dummy #DDEBD8 {
class SomeData
}
}
package user.application #F3EDF7 {
class "ContainerWithNestedCustomParser.Parser" as Nested #EAE6F7/B9B3D2
class ContainerWithNestedCustomParser #EAE6F7/B9B3D2
AbstractSelfFeedingLoader <|-- ContainerWithNestedCustomParser
SomeData <--* ContainerWithNestedCustomParser
ContainerWithNestedCustomParser o-right- Nested
DataLoader <|-- Nested
}
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package data #DDEBD8 {
interface DataContext {
+ {static} LazyLoadedDataContext getDefault()
+ {static} setDefault(LazyLoadedDataContext)
..
+TimeScales getTimeScales()
+Frames getFrames()
+CelestialBodies getCelestialBodies()
+...()
}
note top
manages factories
end note
class LazyLoadedDataContext {
+DataProvidersManager getDataProvidersManager()
}
class DataProvidersManager {
+boolean feed(String supportedNames, DataLoader loader)
}
LazyLoadedDataContext o-- DataProvidersManager
DataContext <|-- LazyLoadedDataContext
}
package time #DDEBD8 {
interface TimeScales {
{static} +TimeScales of(utcMinusTai, eopSupplier)
+TimeScale getTai()
+TimeScale getUtc()
+TimeScale getUt1()
+...()
}
DataContext o-- TimeScales
class LazyLoadedTimeScales
TimeScales <|-- LazyLoadedTimeScales
LazyLoadedDataContext o-- LazyLoadedTimeScales
}
package bodies #DDEBD8 {
interface CelestialBodies{
+CelestialBody getSun()
+CelestialBody getMoon()
+...()
}
class LazyLoadedCelestialBodies
DataContext o-- CelestialBodies
CelestialBodies <|-- LazyLoadedCelestialBodies
LazyLoadedDataContext o-- LazyLoadedCelestialBodies
}
package frames #DDEBD8 {
interface Frames {
{static} +Frames of(timeScales, celestialBodies)
{static} +Frames of(timeScales, icrfSupplier)
+Frame getGcrf()
+Frame getItrf(...)
+...()
}
class LazyLoadedFrames
class LazyLoadedEop
DataContext o-- Frames
Frames <|-- LazyLoadedFrames
LazyLoadedTimeScales o-- LazyLoadedEop
LazyLoadedFrames o-- LazyLoadedEop
LazyLoadedFrames o-right- CelestialBodies
LazyLoadedDataContext o-- LazyLoadedFrames
}
}
package user.application #F3EDF7 {
class MyDataContext #EAE6F7/B9B3D2
class MyProvider #EAE6F7/B9B3D2
class DataBase #EAE6F7/B9B3D2
class Main #EAE6F7/B9B3D2
DataContext <|-- MyDataContext
MyDataContext o-- MyProvider
Main --> MyDataContext : creates
MyProvider *--> "1" DataBase
}
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package data #DDEBD8 {
class FiltersManager {
+addFilter(final DataFilter filter)
+void clearFilters()
+DataSource applyRelevantFilters(final DataSource original)
}
class DataSource {
+String getName()
+DataSource.Opener getOpener()
}
interface DataFilter {
DataSource filter(DataSource original)
}
interface "DataSource.Opener" as Opener {
+boolean rawDataIsBinary()
+InputStream openStreamOnce()
+Reader openReaderOnce()
}
note left
allows lazy opening of stream or reader
beware it may fail if called more than once
especially with network-based streams
end note
FiltersManager "1" o--> "*" DataFilter: applies
DataSource <-down- DataFilter : filters
DataSource --> Opener
DataFilter <|-- GzipFilter
DataFilter <|-- UnixFilter
UnixFilter --> Opener : creates
GzipFilter --> Opener : creates
}
package files.rinex #DDEBD8 {
class HatanakaCompressFilter
DataFilter <|-- HatanakaCompressFilter
Opener <-left- HatanakaCompressFilter : creates
}
}
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam SequenceActorBorderColor #6A584B
skinparam SequenceParticipantBackgroundColor #F3EFEB/CCC9C5
skinparam SequenceParticipantBorderColor #6A584B
skinparam SequenceLifeLineBackgroundColor #CCC9C5/F3EFEB
skinparam SequenceLifeLineBorderColor #6A584B
skinparam SequenceArrowColor #6A584B
skinparam SequenceBorderColor #6A584B
skinparam SequenceFontSize 11
hide footbox
participant DataProvidersManager
participant FiltersManager
participant GzipFilter
participant "DataProvider\nDirectoryCrawler" as DirectoryCrawler
participant MSAFEPattern
participant "DataLoader\nMSAFELoader" as MSAFELoader
participant "DataSource\nutc-tai.dat" as DataSource1
participant "DataSource\nmay2019f10_prd.txt.gz" as DataSource2
participant "DataSource\nmay2019f10_prd.txt" as DataSource3
activate DataProvidersManager
DataProvidersManager -> DirectoryCrawler : feed
activate DirectoryCrawler
create DataSource1
DirectoryCrawler -> DataSource1 : create
DirectoryCrawler -> DataProvidersManager : getFiltersManager
DirectoryCrawler -> FiltersManager : applyRelevantFilters
activate FiltersManager
FiltersManager -> GzipFilter : filter
activate GzipFilter
GzipFilter -> DataSource1 : getName
return no filtering
deactivate GzipFilter
FiltersManager --> DirectoryCrawler
deactivate FiltersManager
DirectoryCrawler -> MSAFEPattern : check name
activate MSAFEPattern
MSAFEPattern --> DirectoryCrawler : no match
deactivate MSAFEPattern
DirectoryCrawler -> DirectoryCrawler : drop utc-tai.dat
create DataSource2
DirectoryCrawler -> DataSource2 : create
DirectoryCrawler -> DataProvidersManager : getFiltersManager
DirectoryCrawler -> FiltersManager : applyRelevantFilters
activate FiltersManager
FiltersManager -> GzipFilter : filter
activate GzipFilter
GzipFilter -> DataSource2 : getName
create DataSource3
GzipFilter -> DataSource3 : create
return filtered DataSource
deactivate GzipFilter
FiltersManager -> FiltersManager : restart loop on filters
FiltersManager -> GzipFilter : filter
activate GzipFilter
GzipFilter -> DataSource3 : getName
return no filtering
deactivate GzipFilter
FiltersManager --> DirectoryCrawler
deactivate FiltersManager
DirectoryCrawler -> MSAFEPattern : check name
activate MSAFEPattern
MSAFEPattern --> DirectoryCrawler : match found
deactivate MSAFEPattern
DirectoryCrawler -> DataSource3 : openStreamOnce
activate DataSource3
DataSource3 -> DataSource2 : openStreamOnce
activate DataSource2
DataSource2 --> DataSource3 : compressed stream
deactivate DataSource2
DataSource3 --> DirectoryCrawler : uncompressed stream
deactivate DataSource3
DirectoryCrawler -> MSAFELoader : feed
activate MSAFELoader
MSAFELoader -> MSAFELoader : parse data
MSAFELoader --> DirectoryCrawler
deactivate MSAFELoader
DirectoryCrawler --> DataProvidersManager
deactivate DirectoryCrawler
deactivate DataProvidersManager
@enduml
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -31,23 +31,22 @@
package data #DDEBD8 {
interface DataProvider {
+Pattern GZIP_FILE_PATTERN
+Pattern ZIP_ARCHIVE_PATTERN
+boolean feed(Pattern supported, DataLoader visitor)
+boolean feed(Pattern supported, DataLoader visitor, DataProvidersManager manager)
}
note right
note left
knows how to retrieve data
from storage, not parse it
end note
class DataProvidersManager {
+String OREKIT_DATA_PATH
+DataProvidersManager getInstance()
+void addDefaultProviders()
+void addProvider(DataProvider provider)
+DataProvider removeProvider(Class<? extends DataProvider> providerClass)
+DataProvider removeProvider(DataProvider provider)
+void clearProviders()
+FiltersManager getFiltersManager()
+void resetFiltersToDefault()
+boolean isSupported(Class<? extends DataProvider> providerClass)
+boolean isSupported(DataProvider provider)
+List<DataProvider> getProviders()
......@@ -55,10 +54,18 @@
+void clearLoadedDataNames()
+boolean feed(String supportedNames, DataLoader loader)
}
note top
manages configuration
note bottom
manages providers
(i.e. knows how to retrieve
data from storage)
end note
class FiltersManager {
+addFilter(final DataFilter filter)
+void clearFilters()
+DataSource applyRelevantFilters(final DataSource original)
}
interface DataLoader {
+boolean stillAcceptsData()
+void loadData(InputStream input, String name)
......@@ -68,7 +75,13 @@
not retrieve it from storage
end note
interface DataFilter {
DataSource filter(DataSource original)
}
DataProvider "*" <--o "1" DataProvidersManager : manages, feeds
DataProvidersManager "1" o--> "1" FiltersManager
FiltersManager "1" o--> "*" DataFilter: applies
DirectoryCrawler --|> DataProvider
ClassPathCrawler --|> DataProvider
NetworkCrawler --|> DataProvider
......@@ -77,30 +90,15 @@
}
package time #DDEBD8 {
DataLoader <|-- UTCTAIHistoryFilesLoader
}
package frames #DDEBD8 {
interface EOPHistoryLoader
DataLoader <|.. EOPHistoryLoader
}
package various.other.packages #DDEBD8 {
class "...DataLoader" as DummyDataLoader
DataLoader <|-- DummyDataLoader
package "..." as dummy #DDEBD8 {
class "...Loader" as DummyLoader
note bottom
all Orekit loaders are
implemented this way
end note
DataLoader <|-- DummyLoader
}
}
package user.application #F3EDF7 {
class MyProvider #EAE6F7/B9B3D2
class DataBase #EAE6F7/B9B3D2
class Main #EAE6F7/B9B3D2
DataProvider <|-- MyProvider
DataProvidersManager <-- Main : configures
MyProvider <--* Main
MyProvider *--> "1" DataBase
}
@enduml
' Copyright 2002-2025 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.
@startuml
skinparam svek true
skinparam ClassBackgroundColor #F3EFEB/CCC9C5
skinparam ClassArrowColor #691616
skinparam ClassBorderColor #691616
skinparam NoteBackgroundColor #F3EFEB
skinparam NoteBorderColor #691616
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
interface Propagator {
+ SpacecraftState propagate(AbsoluteDate target)
+MatrixHarvester setupMatricesComputation(name, initialSTM, initialJacobian)
}
interface MatricesHarvester {
+void setReferenceState(SpacecraftState state)
+RealMatrix getStateTransitionMatrix(SpacecraftState state)
+RealMatrix getParametersJacobian(SpacecraftState state)
+List<String> getJacobiansColumnsNames()
+OrbitType getOrbitType()
+PositionAngleType getPositionAngleType()
}
Propagator -right-> MatricesHarvester
package integration #DDEBD8 {
class AbstractIntegratedPropagator {
+void addAdditionalDerivativesProvider(AdditionalDerivativesProvider provider)
}
interface AdditionalDerivativesProvider {
+String getName()
+yield()
+void derivatives()
}
AbstractIntegratedPropagator o--> AdditionalDerivativesProvider : providers
Propagator <|.. AbstractIntegratedPropagator
}
package semianalytical.dsst #DDEBD8 {
class DSSTHarvester
class DSSTStateTransitionMatrixGenerator {
-List<DSSTForceModel> forceModels
}
class DSSTIntegrableJacobianColumnGenerator {
-String columnName
}
class DSSTPropagator
MatricesHarvester <|.. DSSTHarvester
AbstractIntegratedPropagator <|-- DSSTPropagator
DSSTStateTransitionMatrixGenerator <--o DSSTPropagator
DSSTIntegrableJacobianColumnGenerator <--o DSSTPropagator
DSSTHarvester <--o DSSTPropagator
AdditionalDerivativesProvider <|.. DSSTStateTransitionMatrixGenerator
AdditionalDerivativesProvider <|.. DSSTIntegrableJacobianColumnGenerator
}
}
@enduml
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -25,22 +25,23 @@
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.hipparchus.ode #DDEBD8 {
package org.hipparchus.ode #ECEBD8 {
interface ODEIntegrator
}
package org.orekit.forces #DDEBD8 {
package org.orekit.forces #ECEBD8 {
class ForceModel
}
package org.orekit.propagation.semianalytical.dsst #DDEBD8 {
package org.orekit.propagation.semianalytical.dsst #ECEBD8 {
class DSSTPropagator {
+void setInitialState(SpacecraftState state)
+void setInitialState(SpacecraftState state, boolean isOsculating)
+void setInitialState(SpacecraftState state, PropagationType type)
+void addForceModel(DSSTForceModel model)
+void removeForceModels()
+SpacecraftState propagate(AbsoluteDate start, AbsoluteDate target)
......@@ -48,19 +49,20 @@
ODEIntegrator <--* "1" DSSTPropagator
package forces #ECEBD8 {
package forces #DDEBD8 {
class AuxiliaryElements
interface DSSTForceModel {
+void initialize(AuxiliaryElements auxiliary)
+void initializeStep(AuxiliaryElements auxiliary)
+double[] getMeanElementRate(SpacecraftState state)
+void updateShortPeriodTerms(SpacecraftState ... meanStates)
+void initializeShortPeriodTerms(AuxiliaryElements auxiliary, PropagationType type, double[] parameters)
+double[] getMeanElementRate(SpacecraftState state, AuxiliaryElements auxiliary, double[] parameters)
+void updateShortPeriodTerms(double[] parameters, SpacecraftState ... meanStates)
+EventDetector[] getEventDetectors()
}
DSSTForceModel -right-> AuxiliaryElements
DSSTForceModel <|-- DSSTZonal
DSSTForceModel <|-- DSSTJ2SquaredClosedForm
DSSTForceModel <|-- DSSTTesseral
DSSTForceModel <|-- DSSTThirdBody
DSSTForceModel <|-- AbstractGaussianContribution
......
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -25,12 +25,13 @@
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package propagation.semianalytical.dsst #DDEBD8 {
Package forces #CEEBD8 {
Package forces #CBDBC8 {
interface DSSTForceModel
interface ShortPeriodTerms
DSSTForceModel <|-- DSSTTesseral
......@@ -38,15 +39,15 @@
ShortPeriodTerms <|-- TesseralShortPeriodicCoefficients
}
package utilities #CEEBD8 {
package hansen #EAECE6 {
package utilities #CBDBC8 {
package hansen #CCCCC7 {
class HansenTesseralLinear
}
TesseralShortPeriodicCoefficients *--> "*" ShortPeriodicsInterpolatedCoefficient
DSSTTesseral *--> HansenTesseralLinear
}
package forces.gravity.potential #DDEBD8 {
package forces.gravity.potential #CBDBC8 {
interface UnnormalizedSphericalHarmonicsProvider
UnnormalizedSphericalHarmonicsProvider "1" <--* DSSTTesseral
}
......
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -25,12 +25,13 @@
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package propagation.semianalytical.dsst #DDEBD8 {
Package forces #CEEBD8 {
Package forces #CBDBC8 {
ThirdBodyShortPeriodicCoefficients <--* DSSTThirdBody
interface DSSTForceModel
interface ShortPeriodTerms
......@@ -38,8 +39,8 @@
DSSTForceModel <|-- DSSTThirdBody
}
package utilities #CEEBD8 {
package hansen #EAECE6 {
package utilities #CBDBC8 {
package hansen #CCCCC7 {
class HansenThirdBodyLinear
}
ThirdBodyShortPeriodicCoefficients *--> "*" ShortPeriodicsInterpolatedCoefficient
......
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -25,21 +25,26 @@
skinparam NoteFontColor #691616
skinparam ClassFontSize 11
skinparam PackageFontSize 12
skinparam linetype ortho
package org.orekit #ECEBD8 {
package propagation.semianalytical.dsst #DDEBD8 {
Package forces #CEEBD8 {
Package forces #CBDBC8 {
interface DSSTForceModel
interface ShortPeriodTerms
interface J2SquaredModel
DSSTForceModel <|-- DSSTZonal
DSSTZonal --> ZonalShortPeriodicCoefficients
ShortPeriodTerms <|-- ZonalShortPeriodicCoefficients
DSSTForceModel <|-- DSSTJ2SquaredClosedForm
J2SquaredModel "1" <--* DSSTJ2SquaredClosedForm
J2SquaredModel <|-- ZeisModel
}
package utilities #CEEBD8 {
package hansen #EAECE6 {
package utilities #CBDBC8 {
package hansen #CCCCC7 {
class HansenZonalLinear
}
ZonalShortPeriodicCoefficients *--> "*" ShortPeriodicsInterpolatedCoefficient
......@@ -50,6 +55,7 @@
package forces.gravity.potential #DDEBD8 {
interface UnnormalizedSphericalHarmonicsProvider
UnnormalizedSphericalHarmonicsProvider "1" <--* DSSTZonal
UnnormalizedSphericalHarmonicsProvider "1" <--* DSSTJ2SquaredClosedForm
}
}
......
' Copyright 2002-2019 CS Systèmes d'Information
' Licensed to CS Systèmes d'Information (CS) under one or more
' Copyright 2002-2025 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
......@@ -36,35 +36,52 @@
end box
participant Propagator
participant StepHandlerMultiplexer
participant EphemerisGenerator
participant Ephemeris
activate U
U -> Propagator : setEphemerisMode()
U -> Propagator : getEphemerisGenerator()
activate Propagator
Propagator -> Ephemeris : create
activate Ephemeris
deactivate Ephemeris
Propagator -> EphemerisGenerator : create
activate EphemerisGenerator
deactivate EphemerisGenerator
Propagator -> StepHandlerMultiplexer : addStepHandler(generator)
activate StepHandlerMultiplexer
deactivate StepHandlerMultiplexer
return generator
deactivate Propagator
U -> Propagator : propagate
activate Propagator
Propagator -> Ephemeris : add sample
activate Ephemeris
deactivate Ephemeris
Propagator -> Ephemeris : add sample
activate Ephemeris
deactivate Ephemeris
Propagator -> Ephemeris : add sample
activate Ephemeris
deactivate Ephemeris
Propagator --> U : final state
Propagator -> StepHandlerMultiplexer : provide step
activate StepHandlerMultiplexer
StepHandlerMultiplexer -> EphemerisGenerator : add sample
activate EphemerisGenerator
deactivate EphemerisGenerator
deactivate StepHandlerMultiplexer
Propagator -> StepHandlerMultiplexer : provide step
activate StepHandlerMultiplexer
StepHandlerMultiplexer -> EphemerisGenerator : add sample
activate EphemerisGenerator
deactivate EphemerisGenerator
deactivate StepHandlerMultiplexer
Propagator -> StepHandlerMultiplexer : provide step
activate StepHandlerMultiplexer
StepHandlerMultiplexer -> EphemerisGenerator : add sample
activate EphemerisGenerator
deactivate EphemerisGenerator
deactivate StepHandlerMultiplexer
return final state
deactivate Propagator
U -> Propagator : getGeneratedEphemeris
activate Propagator
Propagator --> U : generated ephemeris
deactivate Propagator
U -> Ephemeris : propagate
activate Ephemeris
deactivate Ephemeris
U -> EphemerisGenerator : getGeneratedEphemeris
activate EphemerisGenerator
activate EphemerisGenerator
EphemerisGenerator -> Ephemeris : create
activate Ephemeris
deactivate Ephemeris
return generated ephemeris
deactivate EphemerisGenerator
deactivate EphemerisGenerator
deactivate U
@enduml