' 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.

@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

  package org.orekit #ECEBD8 {

    package propagation #DDEBD8 {
      interface BoundedPropagator
    }

    package files #DDEBD8 {

      package general #CBDBC8 {

        class OrekitEphemerisFile

        interface EphemerisFile {
          +getSatellites()
        }

        interface EphemerisFile.SatelliteEphemeris {
          +getId()
          +getSegments()
          +getPropagator()
        }

        interface EphemerisFile.EphemerisSegment {
          +getFrame()
          +getStart()
          +getStop()
          +getInterpolationSamples()
          +getAvailableDerivatives()
          +getCoordinates()
          +getPropagator()
        }

        interface EphemerisFileWriter {
          +write(EphemerisFile)
        }

        EphemerisFile *--> EphemerisFile.SatelliteEphemeris
        EphemerisFile.SatelliteEphemeris o--> EphemerisFile.EphemerisSegment

        OrekitEphemerisFile ..|> EphemerisFile
        EphemerisFile <-- EphemerisFileWriter

        BoundedPropagator <-- EphemerisFile.SatelliteEphemeris
        BoundedPropagator <-- EphemerisFile.EphemerisSegment

      }

      package ccsds.ndm #CBDBC8 {
        package odm.oem #CCCCC7 {
          class OemFile
          class OemWriter
          class StreamingOemWriter
          OemFile ..|> EphemerisFile
          OemWriter --> StreamingOemWriter
          EphemerisFileWriter <|.. OemWriter
        }
      }

     package sp3 #CBDBC8 {
       class SP3File
       SP3File ..|> EphemerisFile
     }

     package ilrs #CBDBC8 {
       class CPFFile
       CPFFile ..|> EphemerisFile
     }

    }

  }
@enduml
