2. Ilja Panin http://the33cows.com
Что такое Eclipse Monkey ?
Это плагин к Eclipse который позволяет
писать к нему расширения на языке
JavaScript (также Ruby, Python и Groove).
4. Ilja Panin http://the33cows.com
Основные возможности
• файловая система
• запуск программ
• веб-запросы
• …
Работа с Eclipse Platform:
• Workspace
• Projects
• Debugger
• Plug-ins
• …
Работа с Java:
7. 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 >
8. 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 >
9. Ilja Panin http://the33cows.com
Кастомные диалоги и окна
Можно создать любой произвольный диалог используя
SWT: The Standard Widget Toolkit
E >
http://www.eclipse.org/swt/
10. Ilja Panin http://the33cows.com
Работа с View
Мы можем получить доступ к любому View.
Можем открывать их, закрывать, работать с ними, как
это делает платформа или плагины
E >
Подробнее: http://code.google.com/p/monkey-for-flex/wiki/KnowHow
11. Ilja Panin http://the33cows.com
Использование «чужого» кода
По умолчанию Eclipse Monkey доступны только
основные ресурсы платформы.
Чтобы начать использовать остальные ресурсы
платформы или плагинов нужно воспользоваться
функцией:
loadBundle(<имя пакета>)
E >
Пример:
loadBundle("com.adobe.flexbuilder.editors.common");
//”Загружает” классы Flex Builder
12. 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
13. Ilja Panin http://the33cows.com
Работа с редакторами
Получить текущий редактор можно следующим образом:
var editor = window.getActivePage().getActiveEditor();
Для работы с редактором (получение текста, вставка, текста,
управление курсором и выделением) нужно получить ссылку на
класс наследованный от
org.eclipse.ui.editors.text.TextEditor
В Flex Builder для MXML редактора используя getActiveEditor()
мы не получим ссылки на требуемый типа редактора.
14. 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. ASEditor
2. MXMLEditor
3. CSSEditor
ASEditor – «простой» редактор, наследуется от
org.eclipse.ui.editors.text.TextEditor и мы можем работать с ним
сразу
15. Ilja Panin http://the33cows.com
Работа с редакторами.
Вставка, удаление, выделение текста
Для работы с текстом нужно изучить хелп по
org.eclipse.ui.editors.text.TextEditor,
org.eclipse.jface.text.TextSelection :)
Я сейчас уже не помню, что к чему и использую несколько ранее
написанных мною методов. Они будут выложены вместе с
докладом
E >
16. 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 можно даже найти скромный раздел:
17. 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
18. 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 >