...
| Code Block | ||
|---|---|---|
| ||
package org.lorainelab.igb.context.menu.api.quickstartmodel; import static aQutecom.google.bndcommon.annotationbase.componentPreconditions.ComponentcheckNotNull; import java.util.Optional; import org.lorainelab.igb.context.menu.AnnotationContextMenuProviderstatic com.google.common.base.Preconditions.checkState; import orgcom.lorainelabgoogle.igbcommon.contextbase.menu.MenuSectionStrings; import orgcom.lorainelabgoogle.igbcommon.context.menu.model.AnnotationContextEventcollect.ImmutableSet; import orgjava.lorainelab.igb.context.menu.model.ContextMenuItemutil.Optional; import orgjava.slf4jutil.LoggerSet; import orgjava.util.slf4jfunction.LoggerFactoryFunction; /** * * @author dcnorris */ @Component(immediate = true) public class ContextMenuExtension implements AnnotationContextMenuProvider { private static final Logger logger = LoggerFactory.getLogger(ContextMenuExtension.class); @Override public Optional<ContextMenuItem> buildMenuItem(AnnotationContextEvent event) { ContextMenuItem contextMenuItem = new ContextMenuItem("Log Selection ids", (Void t) -> public class ContextMenuItem { private final String menuLabel; private MenuIcon menuIcon; private Function<Void, Void> action; private Set<ContextMenuItem> subMenuItems; private int weight = 0; public ContextMenuItem(String menuLabel, Set<ContextMenuItem> subMenuItems) { checkNotNull(menuLabel); checkNotNull(subMenuItems); checkState(!Strings.isNullOrEmpty(menuLabel)); checkState(!subMenuItems.isEmpty()); this.menuLabel = menuLabel; this.subMenuItems = ImmutableSet.copyOf(subMenuItems); } public ContextMenuItem(String menuLabel, Function<Void, Void> action) { checkNotNull(menuLabel); event.getSelectedItems().stream().map(selectedSym -> selectedSym.getID()).forEach(logger::info); checkState(!Strings.isNullOrEmpty(menuLabel)); checkNotNull(action); this.menuLabel = menuLabel; this.action = action; subMenuItems = ImmutableSet.of(); } public String getMenuLabel() { return menuLabel; } public Function<Void, Void> getAction() { return taction; } public Set<ContextMenuItem> })getSubMenuItems() { return subMenuItems; } public returnvoid Optional.ofNullable(contextMenuItem)setWeight(int weight) { this.weight = weight; } public void setMenuIcon(MenuIcon menuIcon) { this.menuIcon = menuIcon; @Override} public MenuSectionOptional<MenuIcon> getMenuSectiongetMenuIcon() { return MenuSection.INFORMATIONOptional.ofNullable(menuIcon); } } |
MenuIcon
| Code Block | ||
|---|---|---|
| ||
package org.lorainelab.igb.context.menu.model;
import com.google.common.io.BaseEncoding;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author dcnorris
*/
public class MenuIcon {
private String encodedImage;
private static final Logger logger = LoggerFactory.getLogger(MenuIcon.class);
public MenuIcon(InputStream resourceAsStream) {
try {
encodedImage = BaseEncoding.base64().encode(IOUtils.toByteArray(resourceAsStream));
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
public byte[] getEncodedImage() {
return BaseEncoding.base64().decode(encodedImage);
}
} |
...
| Code Block | ||
|---|---|---|
| ||
package org.lorainelab.igb.context.menu;
/**
*
* @author dcnorris
*/
public enum MenuSection {
INFORMATION, SEQUENCE, APP, UI_ACTION;
} |
Context Menu Sections
Conext Menu Quickstart Code
ContextMenuExtension
| Code Block | ||
|---|---|---|
| ||
package org.lorainelab.igb.context.menu.api.quickstart;
import aQute.bnd.annotation.component.Component;
import java.util.Optional;
import org.lorainelab.igb.context.menu.AnnotationContextMenuProvider;
import org.lorainelab.igb.context.menu.MenuSection;
import org.lorainelab.igb.context.menu.model.AnnotationContextEvent;
import org.lorainelab.igb.context.menu.model.ContextMenuItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author dcnorris
*/
@Component(immediate = true)
public class ContextMenuExtension implements AnnotationContextMenuProvider {
private static final Logger logger = LoggerFactory.getLogger(ContextMenuExtension.class);
@Override
public Optional<ContextMenuItem> buildMenuItem(AnnotationContextEvent event) {
ContextMenuItem contextMenuItem = new ContextMenuItem("Log Selection ids", (Void t) -> {
event.getSelectedItems().stream().map(selectedSym -> selectedSym.getID()).forEach(logger::info);
return t;
});
return Optional.ofNullable(contextMenuItem);
}
@Override
public MenuSection getMenuSection() {
return MenuSection.INFORMATION;
}
} |
pom.xml
| 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>9.0.0</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<groupId>org.lorainelab.igb</groupId>
<artifactId>context-menu-api</artifactId>
<packaging>bundle</packaging>
<name>Context Menu API</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.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.affymetrix</groupId>
<artifactId>affymetrix-common</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
</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>
${project.groupId}.context.menu,
${project.groupId}.context.menu.model
</Export-Package>
<Service-Component>*</Service-Component>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
|
