-
Notifications
You must be signed in to change notification settings - Fork 1
New Extension
papousek edited this page Apr 10, 2012
·
2 revisions
The module should have the following maven description
<groupId>org.sybila.parasim.extension</groupId>
<artifactId>your-new-extension-api</artifactId>
<packaging>jar</packaging>
To get configuration from Parasim
<parent>
<groupId>org.sybila.parasim</groupId>
<artifactId>parasim-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>${path.to.the.parasim.parent.pom.xml}</relativePath>
</parent>
The module should have the following maven description
<groupId>org.sybila.parasim.extension</groupId>
<artifactId>your-new-extension-impl</artifactId>
<packaging>jar</packaging>
To get configuration from Parasim
<parent>
<groupId>org.sybila.parasim</groupId>
<artifactId>parasim-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>${path.to.the.parasim.parent.pom.xml}</relativePath>
</parent>
Implementation module of your extension has to contain a class implementing org.sybila.parasim.core.LoadableExtension
. This class registers classes of your extension which provide the given functionality:
package org.sybila.parasim.myextension;
public class MyExtension implements LoadableExtension {
public void register(ExtensionBuilder builder) {
builder.extension(FunctionalityRegistrar.class);
}
}
To provide loadable extension you have to put a special org.sybila.parasim.core.LoadableExtension
file to your implementation module:
.
|-- pom.xml
|-- src
|-- main
`-- resources
`-- META-INF
`-- services
`-- org.sybila.parasim.core.LoadableExtension
This special file should contain names of classes implementing org.sybila.parasim.core.LoadableExtension
seperated by new line:
package org.sybila.parasim.myextension.MyExtension;
The first way:
public class FunctionalityRegistrar {
@Inject
private Instance<Functionality> functionality;
public void registerFunctionality(@Observes ManagerStarted event, ...) {
functionality.set(new Functionality(...));
}
}
The second way:
public class FunctionalityRegistrar {
@Provide
public Functionality provideFunctionality(...) {
functionality.set(new Functionality(...));
}
}
You can fire a new event:
public class FunctionalityRegistrar {
@Inject
private Event<FunctionalityReady> event;
@Provide
public Functionality provideFunctionality(...) {
functionality.set(new Functionality(...));
event.fire(new FunctionalityReady());
}
}