Платформа LUWRAIN поддерживает механизм расширений, который позволяет дополнять систему различной новой функциональностью. Этот механизм наиболее полезен при желании создать своё приложение, но возможны и другие варианты применения.
Каждое расширение должно содержать класс, реализующий интерфейс org.luwrain.core.Extension
.
Для удобства также создан класс org.luwrain.core.EmptyExtension
, который позволяет не реализовывать все функции интерфейса Extension
,
а только добавить непосредственно необходимые.
При загрузке платформа LUWRAIN самостоятельно создаст экземпляр класса расширения и запросит множество объектов, которое новое расширение желает интегрировать в систему. Подобные объекты могут быть следующих типов:
org.luwrain.core.Command
);org.luwrain.core.Shortcut
);org.luwrain.i18n.Lang
);org.luwrain.cpanel.Factory
).Способ получения объектов этих типов различается и в настоящий момент пока не установился окончательно.
Например, объекты национальных языков должны быть зарегистрированы в специальном объекте, передаваемом при вызове функции i18nExtension
.
Как указывалось выше, платформа LUWRAIN каждый объект расширения создаёт самостоятельно.
Для определения множество классов, которые могут восприниматься как классы расширений для загрузки LUWRAIN просматривает манифесты в загружаемых файлах *.jar
и проводит поиск значения Extensions
в секции org/luwrain
.
Строка значения Extensions
должна содержать разделённый многоточием список классов,
каждый из которых будет обработан как класс расширения.
Задать подобное значение для расширения org.luwrain.foobar.Extension
при сборке проекта при помощи Apache Maven и с использованием плагина maven-jar-plugin
можно следующим способом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>false</addClasspath>
</manifest>
<manifestSections>
<manifestSection>
<name>org/luwrain</name>
<manifestEntries>
<Extensions>org.luwrain.foobar.Extension</Extensions>
</manifestEntries>
</manifestSection>
</manifestSections>
</archive>
</configuration>
</plugin>
Если проект использует для сборки утилиту Apache Ant, то конфигурация расширения может выглядеть следующим образом:
<jar jarfile="foobar.jar">
<manifest>
<section name="org/luwrain">
<attribute name="Extensions" value="org.luwrain.foobar.Extension"/>
</section>
</manifest>
<...>
</jar>