From e4097d21e5f56ec66d8f9821bfb6e8f86b2d7e6f Mon Sep 17 00:00:00 2001
From: Matthew Horridge <matthew.horridge@stanford.edu>
Date: Fri, 11 Dec 2015 19:08:45 -0800
Subject: [PATCH] Closes #324

---
 .../ui/library/entitylabel/EntityLabel.java   | 23 +++++++++++++++----
 .../ui/library/entitylabel/EntityLabel.ui.xml |  2 +-
 .../projectfeed/ProjectChangeEventPanel.java  |  6 ++++-
 .../ui/projectfeed/ProjectFeedBasePanel.java  |  5 ++--
 .../ui/projectfeed/ProjectFeedPanel.java      |  8 +++++--
 .../ui/projectfeed/ProjectFeedPortlet.java    |  2 +-
 .../notes/OWLAPINotesManagerNotesAPIImpl.java |  1 +
 7 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.java b/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.java
index b01502fbd1..8a06d05d38 100644
--- a/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.java
+++ b/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.java
@@ -1,12 +1,13 @@
 package edu.stanford.bmir.protege.web.client.ui.library.entitylabel;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.user.client.ui.InlineLabel;
+import com.google.gwt.user.client.ui.*;
 import edu.stanford.bmir.protege.web.shared.entity.OWLEntityData;
+import edu.stanford.bmir.protege.web.shared.selection.SelectionModel;
 
 /**
  * Author: Matthew Horridge<br>
@@ -26,13 +27,15 @@ interface EntityLabelUiBinder extends UiBinder<HTMLPanel, EntityLabel> {
     protected InlineLabel typeLabel;
 
     @UiField
-    protected InlineLabel browserTextLabel;
+    protected InlineHyperlink browserTextLabel;
 
     @UiField
     protected InlineLabel iriLabel;
 
     private OWLEntityData entityData;
 
+    private SelectionModel selectionModel;
+
     public EntityLabel() {
         HTMLPanel rootElement = ourUiBinder.createAndBindUi(this);
         initWidget(rootElement);
@@ -44,6 +47,10 @@ public void setEntity(OWLEntityData entityData) {
         updateDisplay();
     }
 
+    public void setSelectionModel(SelectionModel selectionModel) {
+        this.selectionModel = selectionModel;
+    }
+
     public OWLEntityData getEntityData() {
         return entityData;
     }
@@ -53,6 +60,14 @@ public OWLEntityData getEntityData() {
     private void updateDisplay() {
         typeLabel.setText(entityData.getEntity().getEntityType().getName() + ": ");
         browserTextLabel.setText(entityData.getBrowserText());
+        browserTextLabel.addClickHandler(new ClickHandler() {
+            @Override
+            public void onClick(ClickEvent event) {
+                if (selectionModel != null) {
+                    selectionModel.setSelection(entityData);
+                }
+            }
+        });
         iriLabel.setText("(" + entityData.getEntity().getIRI().toQuotedString() + ")");
     }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.ui.xml b/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.ui.xml
index e25d5fa9c8..4c525c4f4e 100644
--- a/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.ui.xml
+++ b/src/main/java/edu/stanford/bmir/protege/web/client/ui/library/entitylabel/EntityLabel.ui.xml
@@ -16,7 +16,7 @@
     </ui:style>
 
     <g:HTMLPanel>
-        <g:InlineLabel ui:field="typeLabel" addStyleNames="{style.type-style}"/><g:InlineLabel ui:field="browserTextLabel" addStyleNames="{style.browser-text-style}"/>
+        <g:InlineLabel ui:field="typeLabel" addStyleNames="{style.type-style}"/><g:InlineHyperlink ui:field="browserTextLabel" addStyleNames="{style.browser-text-style}"/>
         <g:InlineLabel ui:field="iriLabel" addStyleNames="{style.iri-style}" visible="false"/>
     </g:HTMLPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectChangeEventPanel.java b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectChangeEventPanel.java
index dc93b48d43..04673c27c1 100644
--- a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectChangeEventPanel.java
+++ b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectChangeEventPanel.java
@@ -10,6 +10,7 @@
 import edu.stanford.bmir.protege.web.client.ui.library.entitylabel.EntityLabel;
 import edu.stanford.bmir.protege.web.client.ui.library.timelabel.ElapsedTimeLabel;
 import edu.stanford.bmir.protege.web.shared.entity.OWLEntityData;
+import edu.stanford.bmir.protege.web.shared.selection.SelectionModel;
 
 import java.util.Set;
 
@@ -35,6 +36,7 @@ public class ProjectChangeEventPanel extends Composite implements ProjectFeedIte
     protected InlineLabel descriptionField;
 
 
+    private SelectionModel selectionModel;
 
     interface ChangeEventPanelUiBinder extends UiBinder<HTMLPanel, ProjectChangeEventPanel> {
 
@@ -42,8 +44,9 @@ interface ChangeEventPanelUiBinder extends UiBinder<HTMLPanel, ProjectChangeEven
 
     private static ChangeEventPanelUiBinder ourUiBinder = GWT.create(ChangeEventPanelUiBinder.class);
 
-    public ProjectChangeEventPanel() {
+    public ProjectChangeEventPanel(SelectionModel selectionModel) {
         HTMLPanel rootElement = ourUiBinder.createAndBindUi(this);
+        this.selectionModel = selectionModel;
         initWidget(rootElement);
     }
 
@@ -66,6 +69,7 @@ public void setChangedEntities(final Set<OWLEntityData> entities) {
         for(OWLEntityData entityData : entities) {
             final EntityLabel changedEntityLabel = new EntityLabel();
             changedEntityLabel.setEntity(entityData);
+            changedEntityLabel.setSelectionModel(selectionModel);
             changedEntitiesTable.setWidget(row, 0, changedEntityLabel);
             row++;
         }
diff --git a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedBasePanel.java b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedBasePanel.java
index 4153c7fa9a..f4f831d44e 100644
--- a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedBasePanel.java
+++ b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedBasePanel.java
@@ -3,6 +3,7 @@
 import com.google.gwt.user.client.ui.Composite;
 import edu.stanford.bmir.protege.web.shared.event.*;
 import edu.stanford.bmir.protege.web.shared.project.ProjectId;
+import edu.stanford.bmir.protege.web.shared.selection.SelectionModel;
 
 /**
  * Author: Matthew Horridge<br>
@@ -14,8 +15,8 @@ public class ProjectFeedBasePanel extends Composite {
 
     private ProjectFeedPanel eventPanel;
 
-    public ProjectFeedBasePanel(final ProjectId projectId, HasEventHandlerManagement eventHandlerMan) {
-        eventPanel = new ProjectFeedPanel(projectId);
+    public ProjectFeedBasePanel(final ProjectId projectId, HasEventHandlerManagement eventHandlerMan, SelectionModel selectionModel) {
+        eventPanel = new ProjectFeedPanel(projectId, selectionModel);
         initWidget(eventPanel);
         eventHandlerMan.addProjectEventHandler(ProjectChangedEvent.TYPE, new ProjectChangedHandler() {
             @Override
diff --git a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPanel.java b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPanel.java
index a90c8d8371..391d76acf1 100644
--- a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPanel.java
+++ b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPanel.java
@@ -15,6 +15,7 @@
 import edu.stanford.bmir.protege.web.shared.event.UserStoppedViewingProjectEvent;
 import edu.stanford.bmir.protege.web.shared.notes.NoteId;
 import edu.stanford.bmir.protege.web.shared.project.ProjectId;
+import edu.stanford.bmir.protege.web.shared.selection.SelectionModel;
 
 import java.util.Date;
 import java.util.HashSet;
@@ -35,6 +36,8 @@ public class ProjectFeedPanel extends Composite {
 
     private RevisionNumber lastRevisionNumber = RevisionNumber.getRevisionNumber(0);
 
+    private SelectionModel selectionModel;
+
     private Timer elapsedTimesUpdateTimer = new Timer() {
         @Override
         public void run() {
@@ -54,8 +57,9 @@ interface RollingProjectChangedEventPanelUiBinder extends UiBinder<HTMLPanel, Pr
 
     private static RollingProjectChangedEventPanelUiBinder ourUiBinder = GWT.create(RollingProjectChangedEventPanelUiBinder.class);
 
-    public ProjectFeedPanel(ProjectId projectId) {
+    public ProjectFeedPanel(ProjectId projectId, SelectionModel selectionModel) {
         HTMLPanel rootElement = ourUiBinder.createAndBindUi(this);
+        this.selectionModel = selectionModel;
         initWidget(rootElement);
     }
 
@@ -64,7 +68,7 @@ public void postChangeEvent(ProjectChangedEvent event) {
             return;
         }
         lastRevisionNumber = event.getRevisionNumber();
-        final ProjectChangeEventPanel changePanel = new ProjectChangeEventPanel();
+        final ProjectChangeEventPanel changePanel = new ProjectChangeEventPanel(selectionModel);
         changePanel.setUserName(event.getUserId().getUserName());
         changePanel.setTimestamp(event.getTimestamp());
         changePanel.setChangedEntities(event.getSubjects());
diff --git a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPortlet.java b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPortlet.java
index 1c1eeabf50..2883daa335 100644
--- a/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPortlet.java
+++ b/src/main/java/edu/stanford/bmir/protege/web/client/ui/projectfeed/ProjectFeedPortlet.java
@@ -20,7 +20,7 @@ public ProjectFeedPortlet(SelectionModel selectionModel, Project project) {
 
     @Override
     public void initialize() {
-        basePanel = new ProjectFeedBasePanel(getProjectId(), this);
+        basePanel = new ProjectFeedBasePanel(getProjectId(), this, getSelectionModel());
         setTitle("Project feed");
         setSize(300, 180);
         add(basePanel);
diff --git a/src/main/java/edu/stanford/bmir/protege/web/server/notes/OWLAPINotesManagerNotesAPIImpl.java b/src/main/java/edu/stanford/bmir/protege/web/server/notes/OWLAPINotesManagerNotesAPIImpl.java
index 7a4dd82e4a..e22f7e6b8d 100644
--- a/src/main/java/edu/stanford/bmir/protege/web/server/notes/OWLAPINotesManagerNotesAPIImpl.java
+++ b/src/main/java/edu/stanford/bmir/protege/web/server/notes/OWLAPINotesManagerNotesAPIImpl.java
@@ -28,6 +28,7 @@
 import org.semanticweb.owlapi.change.OWLOntologyChangeRecord;
 import org.semanticweb.owlapi.model.*;
 import org.semanticweb.owlapi.util.SimpleIRIMapper;
+import org.yaml.snakeyaml.nodes.NodeId;
 
 import javax.inject.Inject;
 import java.io.File;