eclipse monkey
TRANSCRIPT
Ilja Panin http://the33cows.com
Eclipse Monkey
Безграничный функционал Flex Builder
Ilja Panin http://the33cows.com
Что такое Eclipse Monkey ?
Это плагин к Eclipse который позволяет писать к нему расширения на языке
JavaScript (также Ruby, Python и Groove).
Ilja Panin http://the33cows.com
Установка
Устанавливается как и большинство плагинов Eclipse, адрес сайта:
http://download.eclipse.org/technology/dash/update/
Ilja Panin http://the33cows.com
Основные возможности
• файловая система • запуск программ• веб-запросы • …
Работа с Eclipse Platform:• Workspace• Projects• Debugger• Plug-ins• …
Работа с Java:
Ilja Panin http://the33cows.com
Инициализация скриптов
• Выбор пункта из меню • По сочетанию клавиш• По событию среды
Ilja Panin http://the33cows.com
Hello world
/* * Menu: sample > hello word * Key: M3+6 * Kudos: Ilja Panin http://the33cows.com * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript */ function main(){ Packages.org.eclipse.jface.dialogs.MessageDialog.openInformation(window.getShell(), "Monkey", "Hello World");}
E >
Ilja Panin http://the33cows.com
Стандартные диалоги
Packages.org.eclipse.jface.dialogs.InputDialog Диалог ввода текста
Packages.org.eclipse.swt.widgets.FontDialogДиалог выбора шрифта
Packages.org.eclipse.swt.widgets.ColorDialog Стандартный диалог выбора цвета
Больше информации о диалогах можно найти в хелпе к эклипс платформеИскать в пакете org.eclipse.swt.widgets
E >
Ilja Panin http://the33cows.com
Кастомные диалоги и окна
Можно создать любой произвольный диалог используя SWT: The Standard Widget Toolkit
E >
http://www.eclipse.org/swt/
Ilja Panin http://the33cows.com
Работа с View
Мы можем получить доступ к любому View.
Можем открывать их, закрывать, работать с ними, как это делает платформа или плагины
E >
Подробнее: http://code.google.com/p/monkey-for-flex/wiki/KnowHow
Ilja Panin http://the33cows.com
Использование «чужого» кода
По умолчанию Eclipse Monkey доступны только основные ресурсы платформы. Чтобы начать использовать остальные ресурсы платформы или плагинов нужно воспользоваться функцией:
loadBundle(<имя пакета>)
E >
Пример: loadBundle("com.adobe.flexbuilder.editors.common");//”Загружает” классы Flex Builder
Ilja Panin http://the33cows.com
Работа с JavaРаботая с Eclipse Monkey, мы имеем возможность использовать стандартные объекты Java, их методы и свойства
E >
Пример 1: Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");//запукает процесс tskill.exe, который убивает процесс adl// AIR отладчик, подробнее у меня в блоге.
Пример 2:hashSet = new Packages.java.util.HashSet();//создали экземпляр класса HashSet
Ilja Panin http://the33cows.com
Работа с редакторами
Получить текущий редактор можно следующим образом:
var editor = window.getActivePage().getActiveEditor();
Для работы с редактором (получение текста, вставка, текста, управление курсором и выделением) нужно получить ссылку на класс наследованный от org.eclipse.ui.editors.text.TextEditorВ Flex Builder для MXML редактора используя getActiveEditor() мы не получим ссылки на требуемый типа редактора.
Ilja Panin http://the33cows.com
Работа с редакторами. Flex Builder
Flex Builder имеет 3 типа редакторов
MXMLEditor и CSSEditor – сложные редакторы, каждый объединяет в себя визуальный и текстовый редактор. Для получения текстового редактора я использую следующий код:
this.getCurrentTextEditor = function() {var editor = window.getActivePage().getActiveEditor();if (editor) { if (editor.getClass().getName() == "com.adobe.flexbuilder.editors.mxml.MXMLEditor" || editor.getClass().getName() == "com.adobe.flexbuilder.editors.css.CSSEditor") { editor = editor.getCodeEditor(); } } return editor;}
1. ASEditor2. MXMLEditor3. CSSEditor
ASEditor – «простой» редактор, наследуется от org.eclipse.ui.editors.text.TextEditor и мы можем работать с ним сразу
Ilja Panin http://the33cows.com
Работа с редакторами. Вставка, удаление, выделение текста
Для работы с текстом нужно изучить хелп по org.eclipse.ui.editors.text.TextEditor,
org.eclipse.jface.text.TextSelection :)
Я сейчас уже не помню, что к чему и использую несколько ранее написанных мною методов. Они будут выложены вместе с докладом
E >
Ilja Panin http://the33cows.com
Flex Builder Code Model
Adobe Flex Builder 3 Extensibility > Adobe Flex Builder 3 Extensibility API Reference
Взяв его на вооружение будем «правильно готовить» билдер :)
Разработчики Flex Builder предоставили нам возможность работать с API Flex Builder. В Help можно даже найти скромный раздел:
Ilja Panin http://the33cows.com
Flex Builder Code Modelдоступ к модели кода
Получить доступ к нему мы можем используя следующий код:
loadBundle("com.adobe.flexbuilder.codemodel");var CMFactory = Packages.com.adobe.flexbuilder.codemodel.common.CMFactory;
Дальше пример того, что можно сделать имея этот класс.
Входной точкой для работы с API Flex Builder является класс
com.adobe.flexbuilder.codemodel.common.CMFactory
Ilja Panin http://the33cows.com
Flex Builder Code Modelавтогенерация кода класс для любого интерфейса
У Flex Builder немного хромает автогенерация кода когда класс имплементирует какой либо интерфейс:
- Код методов создается лишь тогда когда мы выбираем интерфейс при создании класса, если мы добавляем интерфейс потом то мы код приходиться создавать с нуля ручкам.
- Мы не можем задать произвольный шаблон для генерации кода - Если интерфейс наследован от другого то автогенератор добавляет все
методы, и те которые не нужны. Например:
MyAxisRenderer extends UIComponent implements IAxisRenderer где public interface IAxisRenderer extends IUIComponent
При генерации билдером в MyAxisRenderer будут вставлены все методы из IUIComponent хотя они есть т.к. мы наследовались от UIComponent
Возьмем Eclipse Monkey и будем шаманить… E >
Ilja Panin http://the33cows.com
Почитать о Eclipse Monkey
За стартовую точку я советую взять проектmonkey-for-flex