forum.bitel.ru
http://forum.bitel.ru/

Предложение по созданию API GUI клиента биллинга
http://forum.bitel.ru/viewtopic.php?f=19&t=5693
Страница 1 из 1

Автор:  vdd [ 12 июл 2011, 13:09 ]
Заголовок сообщения:  Предложение по созданию API GUI клиента биллинга

Просим предоставить нам (пользователям биллинга) возможность в GUI клиенте добавлять свои GUI элементы и обрабатывать запросы/ответы сервера.
Для этого предлагаем обеспечить низкоуровневый интерфейс (например, в виде callback) для получения точки входа в иерархию swing и фильтрации запросов и ответов сервера, что бы не приходилось делать "фокусы" как в http://forum.bgbilling.ru/viewtopic.php?f=22&t=5622

Создание высокоуровнего интерфейса (например, возможность использования динамической подгрузки классов и/или скриптов) берем на себя.

Автор:  Cromeshnic [ 12 июл 2011, 13:29 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

Поддерживаю.

Автор:  skyb [ 12 июл 2011, 13:31 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

+

Автор:  dimOn [ 12 июл 2011, 15:56 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

Предложите более-менее подробную архитектуру этого. Ибо
Цитата:
получения точки входа в иерархию swing и фильтрации запросов и ответов сервера
читается как каля-баля. Что такое по-вашему точка входа в иерархию swing :lupa:

Автор:  vdd [ 12 июл 2011, 16:01 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

dimOn писал(а):
Ибо
Цитата:
получения точки входа в иерархию swing и фильтрации запросов и ответов сервера
читается как каля-баля. Что такое по-вашему точка входа в иерархию swing :lupa:


Надо полагать это провокация. Не будем отвечать на провокацию и продолжим диалог в позитивном ключе. :roll:

Автор:  skyb [ 12 июл 2011, 16:04 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

vdd писал(а):
dimOn писал(а):
Ибо
Цитата:
получения точки входа в иерархию swing и фильтрации запросов и ответов сервера
читается как каля-баля. Что такое по-вашему точка входа в иерархию swing :lupa:


Надо полагать это провокация. Не будем отвечать на провокацию и продолжим диалог в позитивном ключе. :roll:

:mrgreen: :mrgreen: :mrgreen:

Автор:  dimOn [ 12 июл 2011, 16:05 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

vdd писал(а):
dimOn писал(а):
Ибо
Цитата:
получения точки входа в иерархию swing и фильтрации запросов и ответов сервера
читается как каля-баля. Что такое по-вашему точка входа в иерархию swing :lupa:


Надо полагать это провокация. Не будем отвечать на провокацию и продолжим диалог в позитивном ключе. :roll:

не, я хочу чтобы вы описали как вы вообще видите возможность дать универсальную точку входа куда угодно в уже скомпилированном коде. Имхо, это невозможно. Но ведь всякое может быть, вот и хочу узнать как так :facepalm:

Автор:  skyb [ 12 июл 2011, 16:06 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

dimOn писал(а):
vdd писал(а):
dimOn писал(а):
Ибо
Цитата:
получения точки входа в иерархию swing и фильтрации запросов и ответов сервера
читается как каля-баля. Что такое по-вашему точка входа в иерархию swing :lupa:


Надо полагать это провокация. Не будем отвечать на провокацию и продолжим диалог в позитивном ключе. :roll:

не, я хочу чтобы вы описали как вы вообще видите возможность дать универсальную точку входа куда угодно в уже скомпилированном коде. Имхо, это невозможно. Но ведь всякое может быть, вот и хочу узнать как так :facepalm:

js ???

Автор:  dimOn [ 12 июл 2011, 16:10 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

wtf? :shock: речь о gui вообще, не?

Автор:  skyb [ 12 июл 2011, 16:19 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

dimOn писал(а):
wtf? :shock: речь о gui вообще, не?

да я фиг знает, вот в 3-ем гноме(в 15 RFRemix) на js написано много аплетов......не, я канеш не исключаю что я нуб в этом и чегота не догоняю )))))

Автор:  vdd [ 12 июл 2011, 16:29 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

dimOn писал(а):
Предложите более-менее подробную архитектуру этого.

Например, это может выглядеть так:

Код:
interface GUIClientCB{
 void ready(bitel.billing.ShellFrame);  // вызывается после готовности GUI к работе, т.е. ShellFrame и все статичные элементы GUI созданы.
 Outcome handleRequest(Exchange ex); //вызывается перед отправкой запроса на сервер. Класс Exchange обеспечивает возможность изменить содержание запроса
 Outcome handleResponse(Exchange ex);  //вызывается после получения ответа от сервера, но до передачи данных на дальнейшую обработку. Класс Exchange обеспечивает возможность изменения содержимого ответа до дальнейшей обработки
}
....
class GUIExt implement GUIClientCB{
...
public Outcome handleRequest(Exchange ex) throws Exception {
...
      return Outcome.CONTINUE;
   }
   public Outcome handleResponse(Exchange ex) throws Exception {
...
      return Outcome.CONTINUE;
   }
}
....
 public static void main(String[] args) {
         GUIExt ge=new GUIExt();
         bitel.billing.ShellFrame.main(args,ge);



GUIClientCB:ready() вызывается после того, как пользователь залогинился и создались все "основные элементы GUI"

Автор:  dimOn [ 12 июл 2011, 16:38 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

Как вы собираетесь вставлять любые контролы (вкладки, кнопки, меню итд) в любое место таким вот образом - вот что интересно.

Автор:  vdd [ 12 июл 2011, 16:42 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

dimOn писал(а):
Как вы собираетесь вставлять любые контролы (вкладки, кнопки, меню итд) в любое место таким вот образом - вот что интересно.

Вот тут я это показывал:
http://forum.bgbilling.ru/viewtopic.php?f=22&t=5622
В эту тему куски кода скопировать?

В боевом варианте будут вешаться обработчики событий на контейнеры, что бы ловить появление нужных GUI контролов. (Например, появление закладки поиска договоров)

Автор:  dimOn [ 12 июл 2011, 17:54 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

То что там в той теме, как мне кажется, недостаточно для решения описанной вами проблемы. Как вы себе это представляете в коде самого клиента будет работать? Тот ваш код понятен - вы из подгруженного класса своего какого-то вытаскиваете иерархию компонентов, роетесь в ней, доходите до нужного, чего-то там вставляете итд. Это всё ясно и так можно сделать, вот сделали же, но КАК это оформить в более красивом виде то по-вашему. Чтобы было удобнее, чем в том коде и чтобы это было настолько же универсально. Вот что хочется увидеть. Цепочки связей GUI-компонентов мы и сами не знаем, контролировать и описывать каждый диалог в клиенте что-ле нужто? Это нереально. Или вы хотите чтобы плагин взял и вытащил просто указатель на шелфрейм, а потом уже сам всюду пихал что хочет такими хакерскими методами? Так оно и щас можно также сделать, это будет почти то же самое что вы сделали. Вот и опишите, что не хватает вам в этом варианте и что надо от нас, понимаете? :umnik:

Автор:  vdd [ 12 июл 2011, 18:33 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

От вас нужно:
1) обеспечить гарантию получения указателя на шелфрейм и доступа к меню, тулбару и TabPane.
2) обеспечить перехват запросов-ответов, что бы не нужно было это делать через локальный прокси.

Можно начать с 1 пункта.

Зачем нужен низкоуровневый API, когда можно и так подцепится?
1. Цикл подхвата указателя на шелфрейм просто не красив, но основная проблема в определении момента готовности GUI (то есть момента, когда пользователь залогинился и проинициализировались все "базовые контролы") - делать это в цикле не только не красиво, но и не надежно.
2. Наличие API означает, что мы можем создавать свои "довески" не боясь, что при очередном апдейте все придется выкинуть, так как что-то поменялось и "хакерские трюки поверх хакерских трюков" больше не работают.

Как и что добавлять - что бы предложить что-то конкретное, нужно начать, например (кроме собственных плагинов), собрать пожелания других пользователей биллинга. Для того, что бы начать, нужен низкоуровневый API, потому как без этого минимума никто не будет тратить время на бесплодные фантазии. Вспомним API сервера версии 4.0.

Поэтому и просим минимум, потому что понятно, что никакой специальной поддержки в GUI никто добавлять не будет, так как это осложняет программирование этого самого GUI и не нужно самим разработчикам (в отличие от серверного API). Создать вокруг низкоуровнего API библиотеку, представляющую GUI, например, в виде дерева, или позволяющую регистрировать фильтры на высокоуровневые события - уже дело техники и вкуса.

Автор:  stark [ 13 июл 2011, 10:58 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

vdd писал(а):
От вас нужно:
1) обеспечить гарантию получения указателя на шелфрейм и доступа к меню, тулбару и TabPane.
[/quote="vdd"]
шелфрейм - сингелтон ShellFrame.getFrame
меню - вам нужна возможность добавить свой item в общее меню окна ?
TabPane - поконкретнее можно ?

vdd писал(а):
2) обеспечить перехват запросов-ответов, что бы не нужно было это делать через локальный прокси.


Это есть.

Автор:  vdd [ 13 июл 2011, 11:39 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

stark писал(а):
vdd писал(а):
От вас нужно:
1) обеспечить гарантию получения указателя на шелфрейм и доступа к меню, тулбару и TabPane.

шелфрейм - сингелтон ShellFrame.getFrame
меню - вам нужна возможность добавить свой item в общее меню окна ?
TabPane - поконкретнее можно ?


ShellFrame.getFrame - не гарантирует получение указателя. Поэтому и просим что-то типа callback после залогинивания пользователя.
Меню - не только добавление своего элемента, но и, например, добавление ActionHandlerа, что бы поймать нужное событие меню.
TabPane - я не точно выразился, не посмотрел в eclipse точное название класса, пример ниже. Речь идет как о добавлении своих "закладок", например, как в во втором скриншоте в теме про "скрипты в клиенте", так и о возможности добавления своих обработчиков для обнаружения нужных
"закладок".
stark писал(а):
vdd писал(а):
2) обеспечить перехват запросов-ответов, что бы не нужно было это делать через локальный прокси.

Это есть.

Как этим воспользоваться? (Иными словами - озвучте API, пожалуйста)

Код:
               ContractTabbedPane t=sf.getTabbedPane();
           BGTabPanel dump= new BGTabPanel(null, null);
      dump.setLayout(new BoxLayout(dump, BoxLayout.PAGE_AXIS));
      textArea=new JTextArea();
      textArea.setLineWrap(true);
      textArea.setWrapStyleWord(true);
      textArea.setEditable(false);
      JScrollPane editorScrollPane = new JScrollPane(textArea);
      editorScrollPane.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
      editorScrollPane.setPreferredSize(new Dimension(250, 145));
      editorScrollPane.setMinimumSize(new Dimension(10, 10));
      dump.add(editorScrollPane);
      dump.validate();
      t.addTab("Dump",dump);
      t.validate();

Автор:  dimOn [ 13 июл 2011, 12:16 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

Цитата:
ShellFrame.getFrame - не гарантирует получение указателя. Поэтому и просим что-то типа callback после залогинивания пользователя.
как так не гарантирует? очень даже гарантирует, оно ВСЕГДА содержит ссылку на главный frame , это в коде используется в 100500 мест. Калбак КУДА после залогинивания? Чтобы сделать калбак, нужно как минимум какую-то инфраструктуру развернуть вокруг всего этого, не так ли? О чём лично я и спрашиваю сейчас. Вот сейчас есть какой-никакой механизм плагина, оттуда делать такое надо? Или что-то новое придумать? Если что-то новое, то в каком виде? Как вы хотите видеть э... ну распространение/поддержку/работу своего кода, в каком виде? В виде отдельной jar или как?

Автор:  vdd [ 13 июл 2011, 12:32 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

dimOn писал(а):
Цитата:
ShellFrame.getFrame - не гарантирует получение указателя. Поэтому и просим что-то типа callback после залогинивания пользователя.
как так не гарантирует? очень даже гарантирует, оно ВСЕГДА содержит ссылку на главный frame ,

Гарантировал бы, то не пришлось бы делать так:
Код:
bitel.billing.ShellFrame sf=null;
       while(null==sf){
          try {
             sf=bitel.billing.ShellFrame.getFrame();
              System.out.println("sf: "+sf);
             Thread.sleep(1000);
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
       }
       process(sf);

dimOn писал(а):
это в коде используется в 100500 мест.

Только весь этот код этот получает управление уже после инициализации swinga....

dimOn писал(а):
Калбак КУДА после залогинивания? Чтобы сделать калбак, нужно как минимум какую-то инфраструктуру развернуть вокруг всего этого, не так ли? О чём лично я и спрашиваю сейчас. Вот сейчас есть какой-никакой механизм плагина, оттуда делать такое надо? Или что-то новое придумать? Если что-то новое, то в каком виде?

Нужна какая-то серьезная инфраструктура, что бы вызвать ready() после залогинивания пользователя?
Код:
interface GUIClientCB{
void ready(bitel.billing.ShellFrame);  // вызывается после готовности GUI к работе, т.е. ShellFrame и все статичные элементы GUI созданы.
...
}
....
class GUIExt implement GUIClientCB{
...
public static void main(String[] args) {
         GUIExt ge=new GUIExt();
         bitel.billing.ShellFrame.main(args,ge);


dimOn писал(а):
Как вы хотите видеть э... ну распространение/поддержку/работу своего кода, в каком виде? В виде отдельной jar или как?


Нашего кода? Вроде предполагалось, что вы предоставляете только низкоуровневый API, а всем остальным занимаются пользователи. Поэтому какая разница? Вас же не беспокоит, как пользователи распространяют свои скрипты, или те же manadы? Скрипты, например, можно вообще будет брать из тех же библиотек скриптов, что и для сервера. Или вы хотите включить созданный пользователями верхнеуровневый API в стандартный дистрибутив?

dimOn писал(а):
Вот сейчас есть какой-никакой механизм плагина, оттуда делать такое надо?

Он где-то описан в свободном доступе?

Автор:  stark [ 14 июл 2011, 11:05 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

vdd писал(а):
dimOn писал(а):
Цитата:
ShellFrame.getFrame - не гарантирует получение указателя. Поэтому и просим что-то типа callback после залогинивания пользователя.
как так не гарантирует? очень даже гарантирует, оно ВСЕГДА содержит ссылку на главный frame ,

Гарантировал бы, то не пришлось бы делать так:
Код:
bitel.billing.ShellFrame sf=null;
       while(null==sf){
          try {
             sf=bitel.billing.ShellFrame.getFrame();
              System.out.println("sf: "+sf);
             Thread.sleep(1000);
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
       }
       process(sf);

dimOn писал(а):
это в коде используется в 100500 мест.

Только весь этот код этот получает управление уже после инициализации swinga....


А зачем вам так рано вклиниваться ? Я думал что встраивают обычно свою tab на куда-нибудь из уже существующих, которая открывается намного позже чем происходит инициализация ShellFrame.

Автор:  vdd [ 14 июл 2011, 11:42 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

Почему рано? (Это сейчас пришлось делать свой поток с самого начала и ловить в цикле появление рабочего шела - управление то больше никак не получить.)
Просим после залогинивания пользователя. Например, что бы можно было свои менюшки и кнопочки добавить. Или ActionHandlerы вовремя повесить, что бы пользователь не успел открыть нужное окно раньше, чем мы готовы это поймать и обработать.

Автор:  dimOn [ 14 июл 2011, 18:18 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

Вы, похоже, не понимаете меня :facepalm: КУДА вы хотите писать этот код? Типа вот написали вы класс, итд и что дальше то? Вызывать ready надо ГДЕ? Для этого должна быть какая-то инфраструктура итд итп, которая даст понять что ваш код существует и там в нём (где?) надо вызвать этот ваш реади итд итп. Клиент должен в некоторых местах дёрнуть всё это как минимум. это где-то должно лежать и где-то внутри нашей проги должно быть зарегистрировано, что вот такой кусок кода имеет место быть и надо его дёрнуть. Понимаете?

Так вот есть механизм плагинов, собираете определённым образом, они так же ложатся в БД в прописанные модули, сервер их отдаёт клиенту, он эти jar кладёт и знает про них и периодически их дёргает. Если вы напишете внутри плагина ShellFrame.getFrame() то оно точно уже есть и делайте вы там чо хотите точно так же, это всё уже есть. Нет, в паблик доступе подробной документации нет, у меня это есть в TODO описать и плагин-рыбу я тоже дописал, просто сейчас у меня срочное ТЗ в работе и мне типа некогда это заняться снова.

Автор:  vdd [ 14 июл 2011, 18:36 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

dimOn писал(а):
Вы, похоже, не понимаете меня :facepalm: КУДА вы хотите писать этот код? Типа вот написали вы класс, итд и что дальше то? Вызывать ready надо ГДЕ? Для этого должна быть какая-то инфраструктура итд итп, которая даст понять что ваш код существует и там в нём (где?) надо вызвать этот ваш реади итд итп. Клиент должен в некоторых местах дёрнуть всё это как минимум. это где-то должно лежать и где-то внутри нашей проги должно быть зарегистрировано, что вот такой кусок кода имеет место быть и надо его дёрнуть. Понимаете?


Прекрасно понимаю. Поэтому и показал код, который эту задачу решает другим способом. Вам не нравится, что ваш main будет не настоящим main - пусть будет определенный файл с определенным названием и определенным классом внутри - ваш код его загрузит (если он есть) и вызовет определенный метод. :roll:
dimOn писал(а):
Так вот есть механизм плагинов, собираете определённым образом, они так же ложатся в БД в прописанные модули, сервер их отдаёт клиенту, он эти jar кладёт и знает про них и периодически их дёргает. Если вы напишете внутри плагина ShellFrame.getFrame() то оно точно уже есть и делайте вы там чо хотите точно так же, это всё уже есть. Нет, в паблик доступе подробной документации нет, у меня это есть в TODO описать и плагин-рыбу я тоже дописал, просто сейчас у меня срочное ТЗ в работе и мне типа некогда это заняться снова.

Хорошо, раз плагин имеет фазу инициализации и не надо требовать от пользователя для этого выбора пункта меню, давайте подождем опубликования интерфеса плагинов.

Автор:  skn [ 14 июл 2011, 22:55 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

а как такой вариант, мы в ShellFrame добавляем вызов класса указанного в конфиге, если он существует он будет вызван если нет, то ни чего не будет.
хотя такой вариант вы сами можете реализвать создав класс расширяющий наш ShellFrame... и вызывать его при старте клиента... и не нужны ни какие потоки, и проверки в цикле.

Автор:  vdd [ 15 июл 2011, 11:54 ]
Заголовок сообщения:  Re: Предложение по созданию API GUI клиента биллинга

skn писал(а):
а как такой вариант, мы в ShellFrame добавляем вызов класса указанного в конфиге, если он существует он будет вызван если нет, то ни чего не будет.

Хороший вариант. Фиксируйте это как API и мы это используем.
skn писал(а):
хотя такой вариант вы сами можете реализвать создав класс расширяющий наш ShellFrame... и вызывать его при старте клиента... и не нужны ни какие потоки, и проверки в цикле.

Ваш ShellFrame реализует поведение типа "Шаблонный метод" (Метод родительского класса вызывает метод, который может/должен быть переопределен в дочернем классе) или что-то подобное? Хорошо, зафиксируйте это как api и мы это используем.
(Ничего не понадобится делать дополнительно, что бы в 100500 местах вызова ShellFrame.getFrame все было хорошо?)

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/