Introduction to the Context Menu API
Design
Interface
package org.lorainelab.igb.context.menu; import java.util.Optional; import org.lorainelab.igb.context.menu.model.AnnotationContextEvent; import org.lorainelab.igb.context.menu.model.ContextMenuItem; /** * * @author dcnorris */ public interface AnnotationContextMenuProvider { public Optional<ContextMenuItem> buildMenuItem(AnnotationContextEvent event); public MenuSection getMenuSection(); }
Data Model
AnnotationContextEvent
package org.lorainelab.igb.context.menu.model; import com.affymetrix.genometry.symmetry.impl.SeqSymmetry; import java.util.List; /** * * @author dcnorris */ public class AnnotationContextEvent { private final List<SeqSymmetry> selectedItems; public AnnotationContextEvent(List<SeqSymmetry> selectedItems) { this.selectedItems = selectedItems; } public List<SeqSymmetry> getSelectedItems() { return selectedItems; } }
ContextMenuItem
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; } }
MenuIcon
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); } }