...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.affymetrix</groupId> <artifactId>igb-project</artifactId> <version>8.6.0</version> <relativePath>../../pom.xml</relativePath> </parent> <groupId>com<groupId>org.lorainelab.lorainelab<igb</groupId> <artifactId>weblinks</artifactId> <packaging>bundle</packaging> <name>WebLinks</name> <dependencies> <dependency> <groupId>biz.aQute.bnd</groupId> <artifactId>bndlib</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.affymetrix</groupId> <artifactId>genometry</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.affymetrix</groupId> <artifactId>igb-services</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.affymetrix</groupId> <artifactId>igbSwingExt</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <scope>provided</scope> </dependency> <!--Start of logging dependencies--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <scope>provided</scope> </dependency> <!--End of logging dependencies--> <dependency> <groupId>com<groupId>org.lorainelab.lorainelab<igb</groupId> <artifactId>igb-preferences</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.jidesoft</groupId> <artifactId>jide-ultimate</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.affymetrix</groupId> <artifactId>affymetrix-common</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com<groupId>org.lorainelab.lorainelab<igb</groupId> <artifactId>igb-genoviz-extensions</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com<groupId>org.lorainelab.lorainelab<igb</groupId> <artifactId>synonym-lookup</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com<groupId>org.lorainelab.lorainelab<igb</groupId> <artifactId>context-menu-api</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <configuration> <filesets> <fileset> <directory>${project.parent.basedir}/bundles/dynamic</directory> <includes> <include>${project.build.finalName}.jar</include> </includes> <followSymlinks>false</followSymlinks> </fileset> </filesets> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>install</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <version>${project.version}</version> </artifactItem> </artifactItems> <outputDirectory>${project.parent.basedir}/bundles/dynamic</outputDirectory> <overWriteReleases>true</overWriteReleases> <overWriteSnapshots>true</overWriteSnapshots> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> <Import-Package>*</Import-Package> <Export-Package/> <Service-Component>*</Service-Component> <Bundle-Description>${bundleDescription}</Bundle-Description> </instructions> </configuration> </plugin> <plugin> <groupId>com<groupId>org.lorainelab.lorainelab<igb</groupId> <artifactId>bundle-markdown-encoder</artifactId> <executions> <execution> <goals> <goal>encodeMarkdown</goal> </goals> </execution> </executions> <configuration> <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> </configuration> </plugin> </plugins> </build> </project> |
...
Code Block | ||
---|---|---|
| ||
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <scope>provided</scope> </dependency> |
...
org.lorainelab.igb:context-menu-api
This API module defines the interfaces and methods Web Links must implement in order to add items to the annotation context (right-click) menu.
Code Block | ||
---|---|---|
| ||
<dependency> <groupId>com<groupId>org.lorainelab.lorainelab<igb</groupId> <artifactId>context-menu-api</artifactId> <scope>provided</scope> </dependency> |
...
As you can see, there is an activate method annotated with the @Activate annotation to signal that this method should be called once all service dependencies have been satisfied. The content of the method makes it clear that the igbService variable must have been instantiated before this reference. This short block of code is a great example of the power of Declarative Services to manage the lifecycle of our services. With almost no work, we can publish and consume services from the registry.
Context Menu API (
...
org.lorainelab.igb:context-menu-api)
The LinkControl class implements the interface AnnotationContextMenuProvider, defined in the context-menu-api module. This interface defines methods that enable the framework (IGB itself) to add menu items to context menus when users right-click them in IGB.
...
Code Block | ||||
---|---|---|---|---|
| ||||
package comorg.lorainelab.igb.context.menu; public interface AnnotationContextMenuProvider { public Optional<ContextMenuItem> buildMenuItem(AnnotationContextEvent event); public MenuSection getMenuSection(); public static enum MenuSection { INFORMATION, SEQUENCE, APP, UI_ACTION; } } |
...