diff --git a/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/EntityBannerFormatter.java b/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/EntityBannerFormatter.java new file mode 100644 index 000000000..ec3de0c09 --- /dev/null +++ b/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/EntityBannerFormatter.java @@ -0,0 +1,23 @@ +package org.protege.editor.owl.ui.view; + +import org.protege.editor.owl.OWLEditorKit; +import org.semanticweb.owlapi.model.OWLEntity; + +import javax.annotation.Nonnull; + +/** + * Matthew Horridge + * Stanford Center for Biomedical Informatics Research + * 7 Sep 16 + */ +public interface EntityBannerFormatter { + + /** + * Formats a banner for the specified entity under the context of the specified editor kit. + * @param entity The entity. + * @param editorKit The editor kit. + * @return A string representing the banner. May be empty. + */ + @Nonnull + String formatBanner(@Nonnull OWLEntity entity, @Nonnull OWLEditorKit editorKit); +} diff --git a/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/EntityBannerFormatterImpl.java b/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/EntityBannerFormatterImpl.java new file mode 100644 index 000000000..10f514e11 --- /dev/null +++ b/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/EntityBannerFormatterImpl.java @@ -0,0 +1,35 @@ +package org.protege.editor.owl.ui.view; + +import org.protege.editor.owl.OWLEditorKit; +import org.semanticweb.owlapi.model.OWLEntity; + +import javax.annotation.Nonnull; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Matthew Horridge + * Stanford Center for Biomedical Informatics Research + * 7 Sep 16 + */ +public class EntityBannerFormatterImpl implements EntityBannerFormatter { + + private static final Pattern OBO_STYLE_ID_PATTERN = Pattern.compile("/(\\w+)_(\\d+)$"); + + @Nonnull + @Override + public String formatBanner(@Nonnull OWLEntity entity, @Nonnull OWLEditorKit editorKit) { + String rendering = editorKit.getOWLModelManager().getRendering(entity); + String iri = entity.getIRI().toString(); + String oboStyleId = ""; + Matcher oboIdMatcher = OBO_STYLE_ID_PATTERN.matcher(iri); + if(oboIdMatcher.find()) { + oboStyleId = " \u2014 " + oboIdMatcher.group(1) + ":" + oboIdMatcher.group(2); + } + return String.format( + "%s %s \u2014 %s", + rendering, + oboStyleId, + iri); + } +} diff --git a/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/SelectedEntityCardView.java b/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/SelectedEntityCardView.java index a3f2fc0a8..a6c2451e4 100644 --- a/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/SelectedEntityCardView.java +++ b/protege-editor-owl/src/main/java/org/protege/editor/owl/ui/view/SelectedEntityCardView.java @@ -6,6 +6,7 @@ import org.protege.editor.core.util.HandlerRegistration; import org.protege.editor.owl.model.selection.SelectionDriver; import org.protege.editor.owl.model.selection.SelectionPlane; +import org.protege.editor.owl.ui.renderer.OWLSystemColors; import org.protege.editor.owl.ui.util.NothingSelectedPanel; import org.semanticweb.owlapi.model.*; import org.slf4j.Logger; @@ -17,6 +18,8 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** @@ -52,9 +55,16 @@ public class SelectedEntityCardView extends AbstractOWLViewComponent implements private static final Logger logger = LoggerFactory.getLogger(SelectedEntityCardView.class); + private JLabel entityIRILabel; + + private EntityBannerFormatter entityBannerFormatter; protected void initialiseOWLView() throws Exception { setLayout(new BorderLayout()); + entityBannerFormatter = new EntityBannerFormatterImpl(); + entityIRILabel = new JLabel(); + entityIRILabel.setBorder(BorderFactory.createEmptyBorder(1, 4, 3, 0)); + add(entityIRILabel, BorderLayout.NORTH); add(cardPanel); cardPanel.setLayout(cardLayout); cardPanel.add(new NothingSelectedPanel(), BLANK_PANEL); @@ -118,6 +128,7 @@ public void reset() { } viewsPanes.clear(); + entityIRILabel.setText(""); createViewPanes(true); validate(); @@ -130,42 +141,49 @@ public void reset() { private void processSelection() { OWLObject selectedObject = getOWLWorkspace().getOWLSelectionModel().getSelectedObject(); if(selectedObject == null) { + entityIRILabel.setIcon(null); + entityIRILabel.setText(""); + entityIRILabel.setBackground(null); selectPanel(BLANK_PANEL); return; } if(!(selectedObject instanceof OWLEntity)) { return; } - ((OWLEntity) selectedObject).accept(new OWLEntityVisitor() { - public void visit(@Nonnull OWLClass cls) { - selectPanel(CLASSES_PANEL); - } + OWLEntity selEntity = (OWLEntity) selectedObject; + String banner = entityBannerFormatter.formatBanner(selEntity, getOWLEditorKit()); + entityIRILabel.setIcon(getOWLWorkspace().getOWLIconProvider().getIcon(selEntity)); + entityIRILabel.setText(banner); + selEntity.accept(new OWLEntityVisitor() { + public void visit(@Nonnull OWLClass cls) { + selectPanel(CLASSES_PANEL); + } - public void visit(@Nonnull OWLObjectProperty property) { - selectPanel(OBJECT_PROPERTIES_PANEL); - } + public void visit(@Nonnull OWLObjectProperty property) { + selectPanel(OBJECT_PROPERTIES_PANEL); + } - public void visit(@Nonnull OWLDataProperty property) { - selectPanel(DATA_PROPERTIES_PANEL); - } + public void visit(@Nonnull OWLDataProperty property) { + selectPanel(DATA_PROPERTIES_PANEL); + } - public void visit(@Nonnull OWLAnnotationProperty property) { - selectPanel(ANNOTATION_PROPERTIES_PANEL); - } + public void visit(@Nonnull OWLAnnotationProperty property) { + selectPanel(ANNOTATION_PROPERTIES_PANEL); + } - public void visit(@Nonnull OWLNamedIndividual individual) { - selectPanel(INDIVIDUALS_PANEL); - } + public void visit(@Nonnull OWLNamedIndividual individual) { + selectPanel(INDIVIDUALS_PANEL); + } - public void visit(@Nonnull OWLDatatype dataType) { - selectPanel(DATATYPES_PANEL); - } - }); + public void visit(@Nonnull OWLDatatype dataType) { + selectPanel(DATATYPES_PANEL); + } + }); }