@startuml
class InitServiceMixin {
  firewall
  services_classes : dict
}

class RulesDownloaderService {
  services_classes : dict
  get_all_rules()
  remove_oldest_objects()
}

RulesDownloaderService --|> InitServiceMixin
package "CISCO firewalls downloaders" {
class CiscoFTDDownloaderService {
  CLASS_NAME : str
  cisco_ftd
  create_rule(rule: CiscoFTDPolicyPyModel) -> Optional[Rule]
  download_rules_from_firewall() -> List[dict]
  load_rules_to_database(rules: List[CiscoFTDPolicyPyModel]) -> List[Rule]
}
CiscoFTDDownloaderService --* RulesDownloaderService


class CiscoDownloaderService {
  all_objects_by_context : dict
  create_rule(rule: models.CiscoRule) -> Rule
  download_rules_from_firewall() -> List[dict]
  get_action(rule: models.CiscoRule) -> str
  get_context(rule: models.CiscoRule) -> str
  get_description(rule: models.CiscoRule) -> str
  get_destinations(rule: models.CiscoRule) -> List[NetworkObject]
  get_enabled(rule: models.CiscoRule) -> bool
  get_logging(rule: models.CiscoRule) -> Optional[Logging]
  get_name(rule: models.CiscoRule) -> str
  get_parsed_data(rule: models.CiscoRule) -> dict
  get_path_to_rule(rule: models.CiscoRule) -> dict
  get_policy_name(rule: models.CiscoRule) -> str
  get_position(rule: models.CiscoRule) -> int
  get_rule_id(rule: models.CiscoRule) -> str
  get_services(rule: models.CiscoRule) -> List
  get_sources(rule: models.CiscoRule) -> List[NetworkObject]
  get_times(rule: models.CiscoRule) -> List[Time]
  get_users(rule: models.CiscoRule) -> List[User]
  load_rules_to_database(rules: List[dict]) -> List[Rule]
}
}

CiscoDownloaderService --* RulesDownloaderService

@enduml