Обновления по запросам от Web-страниц

Администратор обновлений Eclipse позволяет отслеживать и просматривать Web-сайты обновлений Eclipse предопределенным способом. Web-сайт обновления содержит структуру категорий, отображаемых на панели, которые в свою очередь содержат комплекты. Отдельные комплекты можно проверить на панели Предварительный просмотр, входящей в состав администратора обновлений. Если установка комплекта возможна, на этой панели будет доступна кнопка "Установить сейчас", запускающая мастер установки Eclipse. В результате установки комплект добавляется в продукт.

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

Администратор выполнения позволяет запустить сервлет, принимающий запросы от Web-страниц. По умолчанию эта функция не применяется: она активируется отдельно на странице Параметры>Установка/Обновление>Обновления по запросам от Web-страниц. При нажатии кнопки OK администратор обновлений запускает сервер приложений, предназначенный для обработки входящих запросов. В результате во все URL, открываемые с помощью администратора обновлений, добавляется закодированная информация об URL обратного вызова. Если начальный URL указывает на обычную Web-страницу, то в закодированный URL добавляется запрос с URL обратного вызова, применяемым для обращения к Eclipse:

http://acme.com/myApplication.html

преобразуется в

http://acme.com/myApplication.html?updateURL=<локальный-хост>:<локальный-порт>?org.eclipse.update/install

где 'локальный-хост' - это адрес сервера Eclipse, установленного в локальной системе, локальный порт выбирается в динамическом режиме при запуске сервера, а в запросе указано имя Web-приложения Eclipse и имя сервлета, обрабатывающего запрос.

Если исходный URL представляет собой запрос:

http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2

то в ходе кодировки нужная информация просто добавляется в запрос в качестве дополнительного параметра:

http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2&updateURL=<localhost>:<localport>?org.eclipse.update/install

Закодированные данные игнорируются обычными Web-страницами и запросами. Как правило, они не приводят к неполадкам и не изменяют оформление. В ходе кодировки в URL добавляется информация, доступная для поддерживающих ее страниц.

Поскольку Web-страница должна запускаться администратором обновлений, закладки на Web-сайты, указанные на панели Обновления, можно создать в качестве Web-закладок. Администратор обновлений обрабатывает такие закладки соответствующим образом. Если дважды щелкнуть на закладке, связанный URL откроется в Web-браузере (если операционная система и система организации окон поддерживают встроенный браузер, то оно откроется непосредственно в окне администратора обновлений; в противном случае, оно откроется в отдельном окне браузера).

Задачи, доступные для выполнения на Web-странице

Поставщики могут настроить Web-страницы обновлений произвольным образом: разработать Web-приложения, взаимодействующие с базами данных, либо использовать простой, статический текст на языке описания HTML. Применение более сложной архитектуры позволяет поставщикам представить пользователям дополнительные возможности. В частности, сложные запросы на поиск новых комплектов, обновлений и исправлений, эффективное внешнее оформление комплектов, статьи с описанием их возможностей, различные полезные ссылки, голосования, позволяющие определить наиболее популярные комплекты. Кроме того, при необходимости поставщики могут ограничить доступ пользователей к некоторым комплектам с помощью идентификации, требовать регистрацию пользователей и т.д.

Вызов Eclipse из Web-страницы

Закодированную информацию можно извлечь различными способами. Например, можно использовать очень простую функцию JavaScript, приведенную ниже:

<SCRIPT LANGUAGE="JavaScript">

function getArgs() {
   var args = new Object();
   var query = location.search.substring(1);
   var pairs = query.split("&");
   for (var i=0; i<pairs.length; i++) {
      var pos = pairs[i].indexOf('=');
      if (pos == -1) continue;
      var argname = pairs[i].substring(0, pos);
      var value = pairs[i].substring(pos+1);
      args[argname] = unescape(value);
   }
   return args;
}
</SCRIPT>

Данная функция выполняет анализ URL текущей страницы и возвращает аргументы запроса в виде массива.

Роль URL обратного вызова заключается в том, чтобы разрешить Web-страницам возвращать управление Eclipse. Web-страница сообщает Eclipse о комплекте, выбранном пользователем. Роль обновления по запросу Web-страницы не сводится к тому, чтобы сделать Web-сайты обновлений ненужными: они все равно необходимы, однако в этом сценарии они применяются в качестве расположения для хранения комплектов. Web-страница обращается к Eclipse и передает URL сайта обновления, а также ИД и версию выбранного комплекта. Эта информация кодируется с помощью исходного URL обратного вызова, в который добавляются дополнительные аргументы, образующие запрос.

Ниже перечислены аргументы, предусмотренные для запросов обратного вызова:

Возвращать управление Eclipse следует только после того, как пользователь выберет на Web-странице все необходимые комплекты, непосредственно перед загрузкой обновлений. Ниже приведена соответствующая реализация:

<input type="button" 	name="Download" value="Download" 
			onClick="javascript:download('com.example.root', '1.0.0')">

В данном случае ИД комплекта и версии закодированы в теге кнопки.

Функцию загрузки можно реализовать следующим образом:

function download(id, version) {
   var args = getArgs();
   if (args.updateURL) {
      var updateURL = args.updateURL;
      var callback = updateURL+"?server=
      "+escape("http://acme.com/updateSite/")+
      "&feature="+escape(id+'_'+version)+"&backURL="+escape(location);
      location = callback;
   }
}

В функции JavaScript, рассмотренной выше, URL обратного вызова, изначально закодированный в URL страницы, применяется для формирования запроса. После создания запроса браузеру предлагается открыть его. На этом этапе браузер вызывает сервлет Eclipse, обрабатывающий запрос, устанавливающий соединение с сайтом обновления поставщика (в данном случае - "http://acme.com/updateSite/") и выполняющий поиск комплекта в соответствии с указанными ИД и версией. Если ошибки отсутствуют, окно Eclipse перемещается на передний план и в нем открывается стандартный мастер установки. На данном этапе управление передается обратно Eclipse и установка завершается обычным образом.

Обратите внимание, что наличие URL обратного вызова имеет критическое значение для работы механизма в целом. Если страница с ссылкой или кнопкой загрузки расположена в структуре Web-сайта на несколько уровней ниже, корневая Web-страница (запущенная из администратора обновлений) должна передать URL обратного вызова всем страницам, открытым с ее помощью. Для этой цели подходят различные способы (непосредственная кодировка на странице, сохранение временного cookie, сохранение URL в сервлете, обрабатывающем страницы сайта, и т.д.) .