from fortrace.core.qemu_monitor import QEMUMonitorSession
from fortrace.utility.applications.application import (
ApplicationType,
GenericApplication,
ParentNotifier,
)
from fortrace.utility.applications.console.linux_terminal import GenericLinuxTerminal
from fortrace.utility.applications.console.terminal_factory import get_terminal
from fortrace.utility.applications.file_manager.file_manager_factory import (
get_file_browser,
)
from fortrace.utility.applications.text_editor.text_editor_factory import (
get_text_editor,
)
from fortrace.utility.applications.web_browsers.web_browser_factory import (
get_web_browser,
)
[docs]
def get_application(
application_type: ApplicationType,
name: str,
qs: QEMUMonitorSession,
parent_notifier: ParentNotifier,
**kwargs,
) -> GenericApplication:
"""Factory to create an application object by calling the correct sub-factory.
Args:
application_type: ApplicationType to filter for correct sub-factory
name: name of the application (if not included ValueError is thrown)
qs: handle to QEMUMonitor
parent_notifier: attribute of desktop environment to handle changes in windows
**kwargs: relevant to certain applications that might be started with extra arguments, e.g., Terminals
Returns:
Handle to opened application
"""
match application_type:
case ApplicationType.FILE_MANAGER:
return get_file_browser(name, qs, parent_notifier)
case ApplicationType.TERMINAL:
return get_terminal(name, qs, parent_notifier, **kwargs)
case ApplicationType.TEXT_EDITOR:
return get_text_editor(name, qs, parent_notifier)
case ApplicationType.WEB_BROWSER:
return get_web_browser(name, qs, parent_notifier)
case ApplicationType.OTHER:
return GenericApplication(name, application_type, qs, parent_notifier)
case _:
raise ValueError(f"ApplicationType {application_type} is not supported")