Skip to content

Commit 9b40d82

Browse files
committed
Merge branch 'dev'
# Conflicts: # pom.xml
2 parents 4f56c58 + 77c0f97 commit 9b40d82

File tree

14 files changed

+61
-182
lines changed

14 files changed

+61
-182
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>org.reactome.web</groupId>
88
<artifactId>diagram</artifactId>
99
<packaging>jar</packaging>
10-
<version>3.6.0</version>
10+
<version>3.6.2</version>
1111
<name>Reactome Diagram Viewer</name>
1212

1313
<description>
@@ -44,7 +44,7 @@
4444
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
4545

4646
<reactome.web.analysis-client>1.4.0</reactome.web.analysis-client>
47-
<reactome.web.model>2.0.1</reactome.web.model>
47+
<reactome.web.model>2.0.4</reactome.web.model>
4848
<reactome.web.carrousel>1.0.2</reactome.web.carrousel>
4949
<reactome.web.scroller>1.0.2</reactome.web.scroller>
5050
<reactome.web.quadtree>1.2.0</reactome.web.quadtree>
Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package org.reactome.web.diagram.renderers.layout.s300;
22

3-
import org.reactome.web.diagram.data.graph.model.GraphChemicalDrug;
4-
import org.reactome.web.diagram.data.graph.model.GraphObject;
5-
import org.reactome.web.diagram.data.interactors.common.DiagramBox;
6-
import org.reactome.web.diagram.data.layout.*;
3+
import org.reactome.web.diagram.data.layout.Coordinate;
4+
import org.reactome.web.diagram.data.layout.DiagramObject;
5+
import org.reactome.web.diagram.data.layout.Node;
6+
import org.reactome.web.diagram.data.layout.SummaryItem;
77
import org.reactome.web.diagram.data.layout.category.ShapeCategory;
8-
import org.reactome.web.diagram.data.layout.impl.NodePropertiesFactory;
98
import org.reactome.web.diagram.renderers.common.HoveredItem;
10-
import org.reactome.web.diagram.renderers.common.RendererProperties;
119
import org.reactome.web.diagram.renderers.layout.abs.ChemicalDrugAbstractRenderer;
12-
import org.reactome.web.diagram.renderers.layout.abs.TextRenderer;
1310
import org.reactome.web.diagram.util.AdvancedContext2d;
1411

1512
/**
@@ -23,18 +20,6 @@ public void draw(AdvancedContext2d ctx, DiagramObject item, Double factor, Coord
2320
drawSummaryItems(ctx, (Node) item, factor, offset);
2421
}
2522

26-
@Override
27-
public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, Coordinate offset) {
28-
Node node = (Node) item;
29-
double w = node.getProp().getWidth();
30-
double h = node.getProp().getHeight();
31-
if (h >= 30 && w >= h * 1.25) {
32-
drawChemicalDetails(ctx, node, factor, offset, RendererProperties.INTERACTOR_FONT_SIZE);
33-
} else {
34-
super.drawText(ctx, item, factor, offset);
35-
}
36-
}
37-
3823
@Override
3924
public HoveredItem getHovered(DiagramObject item, Coordinate pos) {
4025
Node node = (Node) item;
@@ -59,29 +44,4 @@ public boolean isVisible(DiagramObject item) {
5944
return true;
6045
}
6146

62-
protected void drawChemicalDetails(AdvancedContext2d ctx, Node node, Double factor, Coordinate offset, double fontSize){
63-
ctx.save();
64-
GraphObject graphObject = node.getGraphObject();
65-
if(graphObject instanceof GraphChemicalDrug) {
66-
NodeProperties prop = NodePropertiesFactory.transform(node.getProp(), factor, offset);
67-
DiagramBox box = new DiagramBox(prop);
68-
69-
double splitBasis = box.getHeight() < box.getWidth()/2 ? box.getHeight() : box.getWidth()/2;
70-
GraphChemicalDrug cd = (GraphChemicalDrug) graphObject;
71-
if (cd.getChemicalImage() != null) {
72-
double delta = splitBasis * 0.7; // Shrink the image in order to make it fit into the bubble
73-
Coordinate centre = box.getCentre();
74-
// Center the image vertically but keep it more to the left half of the bubble
75-
ctx.drawImage(cd.getChemicalImage(), centre.getX() - delta , centre.getY() - delta/2, delta, delta);
76-
}
77-
78-
String displayName = node.getDisplayName();
79-
DiagramBox textBox = box.splitHorizontally(splitBasis).get(1); //box is now the remaining of item box removing the image
80-
TextRenderer textRenderer = new TextRenderer(fontSize, RendererProperties.NODE_TEXT_PADDING);
81-
textRenderer.drawTextMultiLine(ctx, displayName, NodePropertiesFactory.get(textBox));
82-
83-
rxText(ctx, prop, factor);
84-
}
85-
ctx.restore();
86-
}
8747
}

src/main/java/org/reactome/web/diagram/renderers/layout/s300/ChemicalRenderer300.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, C
3131
Node node = (Node) item;
3232
double w = node.getProp().getWidth();
3333
double h = node.getProp().getHeight();
34-
if (h >= 30 && w >= h * 1.25) {
34+
if (h >= 30 && w >= h * 1.25 && node.getIsFadeOut() == null) {
3535
drawChemicalDetails(ctx, node, factor, offset, RendererProperties.INTERACTOR_FONT_SIZE);
3636
} else {
3737
super.drawText(ctx, item, factor, offset);
Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
package org.reactome.web.diagram.renderers.layout.s300;
22

3-
import org.reactome.web.diagram.data.graph.model.GraphEntityWithAccessionedSequence;
4-
import org.reactome.web.diagram.data.graph.model.GraphObject;
5-
import org.reactome.web.diagram.data.interactors.common.DiagramBox;
63
import org.reactome.web.diagram.data.layout.*;
74
import org.reactome.web.diagram.data.layout.category.ShapeCategory;
8-
import org.reactome.web.diagram.data.layout.impl.NodePropertiesFactory;
95
import org.reactome.web.diagram.renderers.common.HoveredItem;
10-
import org.reactome.web.diagram.renderers.common.RendererProperties;
116
import org.reactome.web.diagram.renderers.layout.abs.ProteinDrugAbstractRenderer;
12-
import org.reactome.web.diagram.renderers.layout.abs.TextRenderer;
137
import org.reactome.web.diagram.util.AdvancedContext2d;
148

15-
import java.util.List;
16-
import java.util.Objects;
17-
189

1910
/**
2011
* @author Kostas Sidiropoulos <ksidiro@ebi.ac.uk>
@@ -37,20 +28,6 @@ public void highlight(AdvancedContext2d ctx, DiagramObject item, Double factor,
3728
drawSummaryItems(ctx, node, factor, offset);
3829
}
3930

40-
@Override
41-
public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, Coordinate offset) {
42-
Node node = (Node) item;
43-
double w = node.getProp().getWidth();
44-
double h = node.getProp().getHeight();
45-
if (h >= 35 && w >= h * 1.5) {
46-
drawProteinDetails(ctx, node, factor, offset, 6.33 * factor);
47-
NodeProperties prop = NodePropertiesFactory.transform(node.getProp(), factor, offset);
48-
rxText(ctx, prop, factor);
49-
} else {
50-
super.drawText(ctx, item, factor, offset);
51-
}
52-
}
53-
5431
@Override
5532
@SuppressWarnings("Duplicates")
5633
public HoveredItem getHovered(DiagramObject item, Coordinate pos) {
@@ -82,51 +59,4 @@ public boolean nodeAttachmentsVisible() {
8259
return true;
8360
}
8461

85-
protected void drawProteinDetails(AdvancedContext2d ctx, Node node, Double factor, Coordinate offset, double fontSize){
86-
ctx.save();
87-
88-
GraphObject graphObject = node.getGraphObject();
89-
if(graphObject instanceof GraphEntityWithAccessionedSequence) {
90-
//The image size is supposed to fit the height of the box (and it is a SQUARE)
91-
DiagramBox box = (new DiagramBox(node.getInnerProp()!= null ? node.getInnerProp() : node.getProp())).transform(factor, offset);
92-
double splitBasis = box.getHeight() < box.getWidth()/2 ? box.getHeight() : box.getWidth()/2;
93-
94-
GraphEntityWithAccessionedSequence pe = (GraphEntityWithAccessionedSequence) graphObject;
95-
if (pe.getProteinImage() != null) {
96-
Coordinate centre = box.getCentre();
97-
double delta = splitBasis * 0.95;
98-
ctx.drawImage(pe.getProteinImage(), box.getMinX() + factor , centre.getY() - delta/1.9, delta, delta);
99-
}
100-
101-
box = box.splitHorizontally(splitBasis).get(1); //box is now the remaining of item box removing the image
102-
TextRenderer textRenderer = new TextRenderer(fontSize, RendererProperties.NODE_TEXT_PADDING);
103-
104-
String details = pe.getDetails();
105-
if (details == null) {
106-
if (Objects.equals(node.getDisplayName(), pe.getIdentifier())) {
107-
textRenderer.drawTextMultiLine(ctx, node.getDisplayName(), NodePropertiesFactory.get(box));
108-
} else {
109-
List<DiagramBox> vBoxes = box.splitVertically(box.getHeight() * 0.6);
110-
textRenderer.drawTextMultiLine(ctx, node.getDisplayName(), NodePropertiesFactory.get(vBoxes.get(0)));
111-
textRenderer.drawTextMultiLine(ctx, pe.getIdentifier(), NodePropertiesFactory.get(vBoxes.get(1)));
112-
}
113-
} else {
114-
List<DiagramBox> vBoxes = box.splitVertically(box.getHeight() * 0.3, box.getHeight() * 0.5);
115-
//If there is not details it means that we can use the whole right half of the box to write the alias
116-
ctx.setFont(RendererProperties.getFont(fontSize));
117-
DiagramBox aliasBox = vBoxes.get(0);
118-
119-
textRenderer.drawTextMultiLine(ctx, node.getDisplayName(), NodePropertiesFactory.get(aliasBox));
120-
121-
fontSize /= 2.11;
122-
ctx.setFont(RendererProperties.getFont(fontSize));
123-
textRenderer = new TextRenderer(fontSize, RendererProperties.NODE_TEXT_PADDING);
124-
textRenderer.drawTextSingleLine(ctx, pe.getIdentifier(), vBoxes.get(1).getCentre());
125-
126-
DiagramBox detailsBox = vBoxes.get(2);
127-
textRenderer.drawPreformattedText(ctx, details, NodePropertiesFactory.get(detailsBox), true);
128-
}
129-
}
130-
ctx.restore();
131-
}
13262
}

src/main/java/org/reactome/web/diagram/renderers/layout/s300/ProteinRenderer300.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, C
4242
Node node = (Node) item;
4343
double w = node.getProp().getWidth();
4444
double h = node.getProp().getHeight();
45-
if (h >= 35 && w >= h * 1.5) {
45+
if (h >= 35 && w >= h * 1.5 && node.getIsFadeOut() == null) {
4646
drawProteinDetails(ctx, node, factor, offset, 6.33 * factor);
4747
} else {
4848
super.drawText(ctx, item, factor, offset);
Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,11 @@
11
package org.reactome.web.diagram.renderers.layout.s800;
22

3-
import org.reactome.web.diagram.data.layout.Coordinate;
4-
import org.reactome.web.diagram.data.layout.DiagramObject;
5-
import org.reactome.web.diagram.data.layout.Node;
63
import org.reactome.web.diagram.renderers.layout.s300.ChemicalDrugRenderer300;
7-
import org.reactome.web.diagram.util.AdvancedContext2d;
84

95
/**
106
* @author Kostas Sidiropoulos <ksidiro@ebi.ac.uk>
117
* @author Antonio Fabregat <fabregat@ebi.ac.uk>
128
*/
139
public class ChemicalDrugRenderer800 extends ChemicalDrugRenderer300 {
14-
@Override
15-
public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, Coordinate offset) {
16-
Node node = (Node) item;
17-
double w = node.getProp().getWidth();
18-
double h = node.getProp().getHeight();
19-
if (h >= 30 && w >= h * 1.25) {
20-
drawChemicalDetails(ctx, node, factor, offset, 6.33 * factor);
21-
} else if (h >= 10 && w >= h * 1.1) {
22-
drawChemicalDetails(ctx, node, factor, offset, 2.75 * factor);
23-
} else {
24-
super.drawText(ctx, item, factor, offset);
25-
}
26-
}
10+
2711
}

src/main/java/org/reactome/web/diagram/renderers/layout/s800/ChemicalRenderer800.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, C
1616
Node node = (Node) item;
1717
double w = node.getProp().getWidth();
1818
double h = node.getProp().getHeight();
19-
if (h >= 30 && w >= h * 1.25) {
19+
if (h >= 30 && w >= h * 1.25 && node.getIsFadeOut() == null) {
2020
drawChemicalDetails(ctx, node, factor, offset, 6.33 * factor);
21-
} else if (h >= 10 && w >= h * 1.1) {
21+
} else if (h >= 10 && w >= h * 1.1 && node.getIsFadeOut() == null) {
2222
drawChemicalDetails(ctx, node, factor, offset, 2.75 * factor);
2323
} else {
2424
super.drawText(ctx, item, factor, offset);

src/main/java/org/reactome/web/diagram/renderers/layout/s800/ProteinDrugRenderer800.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,12 @@
11
package org.reactome.web.diagram.renderers.layout.s800;
22

3-
import org.reactome.web.diagram.data.layout.Coordinate;
4-
import org.reactome.web.diagram.data.layout.DiagramObject;
5-
import org.reactome.web.diagram.data.layout.Node;
6-
import org.reactome.web.diagram.data.layout.NodeProperties;
7-
import org.reactome.web.diagram.data.layout.impl.NodePropertiesFactory;
83
import org.reactome.web.diagram.renderers.layout.s300.ProteinDrugRenderer300;
9-
import org.reactome.web.diagram.util.AdvancedContext2d;
104

115
/**
126
* @author Kostas Sidiropoulos <ksidiro@ebi.ac.uk>
137
* @author Antonio Fabregat <fabregat@ebi.ac.uk>
148
*/
159
public class ProteinDrugRenderer800 extends ProteinDrugRenderer300 {
16-
@Override
17-
public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, Coordinate offset) {
18-
Node node = (Node) item;
19-
double w = node.getProp().getWidth();
20-
double h = node.getProp().getHeight();
21-
if (h >= 35 && w >= h * 1.5) {
22-
drawProteinDetails(ctx, node, factor, offset, 6.33 * factor);
23-
} else if (h >= 15 && w >= h * 1.2) {
24-
drawProteinDetails(ctx, node, factor, offset, 2.75 * factor);
25-
NodeProperties prop = NodePropertiesFactory.transform(node.getProp(), factor, offset);
26-
rxText(ctx, prop, factor);
27-
} else {
28-
super.drawText(ctx, item, factor, offset);
29-
}
30-
}
3110

3211
@Override
3312
public boolean nodeAttachmentsVisible() {

src/main/java/org/reactome/web/diagram/renderers/layout/s800/ProteinRenderer800.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public void drawText(AdvancedContext2d ctx, DiagramObject item, Double factor, C
1616
Node node = (Node) item;
1717
double w = node.getProp().getWidth();
1818
double h = node.getProp().getHeight();
19-
if (h >= 35 && w >= h * 1.5) {
19+
if (h >= 35 && w >= h * 1.5 && node.getIsFadeOut() == null) {
2020
drawProteinDetails(ctx, node, factor, offset, 6.33 * factor);
21-
} else if (h >= 15 && w >= h * 1.2) {
21+
} else if (h >= 15 && w >= h * 1.2 && node.getIsFadeOut() == null) {
2222
drawProteinDetails(ctx, node, factor, offset, 2.75 * factor);
2323
} else {
2424
super.drawText(ctx, item, factor, offset);

src/main/java/org/reactome/web/diagram/search/details/DetailsInfoPanel.java

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.reactome.web.diagram.search.details;
22

33
import com.google.gwt.core.client.GWT;
4+
import com.google.gwt.core.client.Scheduler;
45
import com.google.gwt.dom.client.Style;
56
import com.google.gwt.event.shared.EventBus;
67
import com.google.gwt.http.client.Response;
@@ -74,6 +75,7 @@ public class DetailsInfoPanel extends AbstractAccordionPanel implements ResultSe
7475
private List<Widget> resultWidgets = new ArrayList<>();
7576

7677
private final OverlayResource staticResource = new OverlayResource(DiagramFactory.INTERACTORS_INITIAL_RESOURCE, DiagramFactory.INTERACTORS_INITIAL_RESOURCE_NAME, OverlayResource.ResourceType.STATIC);
78+
private Collection<GraphObject> interactingPathways;
7779

7880
public DetailsInfoPanel(EventBus eventBus) {
7981
this.eventBus = eventBus;
@@ -154,6 +156,7 @@ public void onOccurrencesException(String msg) {
154156
@Override
155157
public void onResultSelected(ResultSelectedEvent event) {
156158
selectedResultItem = event.getSelectedResultItem();
159+
interactingPathways = new ArrayList<>();
157160

158161
clearMainPanel();
159162
clearResults();
@@ -168,6 +171,7 @@ public void onResultSelected(ResultSelectedEvent event) {
168171
populateWithLocalInteractor(item);
169172
queryForInteractorOccurrences(item);
170173
} else if(regulationTypes.contains(item.getExactType().toLowerCase())) {
174+
// In case this is a regulation we need an additional query to the server
171175
ContentClient.query(item.getStId(), new ObjectLoaded<DatabaseObject>() {
172176
@Override
173177
public void onObjectLoaded(DatabaseObject databaseObject) {
@@ -179,17 +183,17 @@ public void onObjectLoaded(DatabaseObject databaseObject) {
179183

180184
@Override
181185
public void onContentClientException(Type type, String message) {
182-
186+
//Nothing here
183187
}
184188

185189
@Override
186190
public void onContentClientError(ContentClientError error) {
187-
191+
//Nothing here
188192
}
189193
});
190194
} else {
191195
LocalOccurrencesFactory.searchForInstanceInDiagram(item.getStId(), args.getDiagramStId(), this);
192-
queryForContainingPathways(item);
196+
Scheduler.get().scheduleDeferred(() -> queryForContainingPathways(item));
193197
}
194198
show(true);
195199
} else if (selectedResultItem instanceof InteractorSearchResult) {
@@ -219,9 +223,19 @@ public void onSearchPerformed(SearchPerformedEvent event) {
219223
@Override
220224
public void onObjectListLoaded(List<Pathway> list) {
221225
hideSpinner();
222-
if(list != null && !list.isEmpty()) {
226+
// The following code removes the intersecting pathways between the 2 lists
227+
if(list != null && !list.isEmpty() && interactingPathways != null) {
228+
Set<String> interactingPathwayIds = interactingPathways.stream()
229+
.map(GraphObject::getStId)
230+
.collect(Collectors.toSet());
231+
list = list.stream()
232+
.filter(pathway -> !interactingPathwayIds.contains(pathway.getStId()))
233+
.collect(Collectors.toList());
234+
223235
int size = list.size();
224-
includeResultWidget(new EnhancedListPanel("Present in " + size + " pathway diagram" + (size > 1 ? "s:" : ":"), list, eventBus, context.getContent()));
236+
if(!list.isEmpty()) {
237+
includeResultWidget(new EnhancedListPanel("Present in " + size + " pathway diagram" + (size > 1 ? "s:" : ":"), list, eventBus, context.getContent()));
238+
}
225239
}
226240
}
227241

@@ -325,10 +339,10 @@ private void populateWithLocalOccurrences(Occurrences occurrences) {
325339
List<String> occList = occurrences.getOccurrences();
326340
if (occList != null && !occList.isEmpty()){
327341
//Selected entity is inside an encapsulated "Interacting" pathway
328-
Collection<GraphObject> list = occList.stream()
342+
interactingPathways = occList.stream()
329343
.map(occ -> context.getContent().getDatabaseObject(occ))
330344
.collect(Collectors.toList());
331-
includeResultWidget(new DatabaseObjectListPanel("Inside interacting pathway" + (list.size()>1 ? "s:" : ":"), list, eventBus));
345+
includeResultWidget(new DatabaseObjectListPanel("Inside " + interactingPathways.size() + " subpathway" + (interactingPathways.size()>1 ? "s:" : ":"), interactingPathways, eventBus));
332346
}
333347

334348
List<String> interactsWithList = occurrences.getInteractsWith();
@@ -385,8 +399,18 @@ public void onAncestorsLoaded(Ancestors ancestors) {
385399
}
386400

387401
if (!pathways.isEmpty() && !item.isDisplayed()) {
402+
403+
Set<String> interactingPathwayIds = interactingPathways.stream()
404+
.map(GraphObject::getStId)
405+
.collect(Collectors.toSet());
406+
407+
pathways = pathways.stream()
408+
.filter(pathway -> !interactingPathwayIds.contains(pathway.getStId()))
409+
.collect(Collectors.toSet());
388410
int size = pathways.size();
389-
includeResultWidget(new EnhancedListPanel("Present in " + size + " pathway diagram" + (size > 1 ? "s:" : ":"), pathways, eventBus, context.getContent()));
411+
if(!pathways.isEmpty()) {
412+
includeResultWidget(new EnhancedListPanel("Present in " + size + " pathway diagram" + (size > 1 ? "s:" : ":"), pathways, eventBus, context.getContent()));
413+
}
390414
}
391415
}
392416

0 commit comments

Comments
 (0)