4.5.9. Специфика Desktop Client

Реализация универсального пользовательского интерфейса в блоке Desktop Client основана на Java Swing. Рассмотрим основные классы, входящие в состав инфраструктуры десктоп клиента.

DesktopClientInfrastructure
Рисунок 21. Классы инфраструктуры Desktop Client
  • App - центральный класс инфраструктуры десктоп приложения. Содержит ссылки на Connection и главный TopLevelFrame, а также методы инициализации и получения параметров приложения (см. ниже).

    В конкретном приложении необходимо создать собственный класс-наследник App и переопределить в нем следующие методы:

    • getDefaultAppPropertiesConfig - должен возвращать строку, в которой через пробел перечислены файлы свойств приложения, например:

      @Override
      protected String getDefaultAppPropertiesConfig() {
          return "/cuba-desktop-app.properties /desktop-app.properties";
      }
    • getDefaultHomeDir - должен вовращать путь к каталогу, в котором приложение будет хранить временные и рабочие файлы, например:

      @Override
      protected String getDefaultHomeDir() {
          return System.getProperty("user.home") + "/.mycompany/sales";
      }
    • getDefaultLogConfig - должен возвращать имя файла настройки Logback, если таковой определен в проекте. Например:

      @Override
      protected String getDefaultLogConfig() {
          return "sales-logback.xml";
      }

      Кроме того, в собственном классе-наследнике App необходимо определить метод main() следующим образом:

      public static void main(final String[] args) {
          SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                  app = new App();
                  app.init(args);
                  app.show();
                  app.showLoginDialog();
              }
          });
      }
  • Connection - класс, обеспечивающий функциональность подключения к среднему слою и хранящий пользовательскую сессию UserSession.

  • LoginDialog - диалог логина пользователя. В конкретном приложении можно создать наследника LoginDialog и переопределить метод createLoginDialog() класса App для его использования.

  • TopLevelFrame - наследник JFrame, являющийся окном самого верхнего уровня. В приложении существует как минимум один экземпляр данного класса, создаваемый при старте приложения и содержащий главное меню. Этот экземпляр возвращается методом getMainFrame() класса App.

    При отделении пользователем вкладок главного окна или компонента TabSheet (см. атрибут detachable) создаются дополнительные экземпляры TopLevelFrame, не содержащие главного меню.

  • WindowManager - центральный класс, реализующий логику работы экранов системы. Ему делегируются вызовы openWindow(), openEditor(), showMessageDialog() и другие методы интерфейса Frame, реализуемого контроллерами экранов. Класс WindowManager расположен в общем модуле gui платформы и является абстрактным. В модуле desktop имеется конкретный класс DesktopWindowManager, реализующий специфику десктоп клиента.

    Как правило, WindowManager не используется в прикладном коде напрямую.

  • ExceptionHandlers - содержит коллекцию обработчиков исключений клиентского уровня.