Skip to content
Snippets Groups Projects
Commit ec7dad53 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

pathways can be drawn using glyphs

parent 5eaef346
No related branches found
No related tags found
2 merge requests!805Merge 13.1.0 beta.1,!802pathways can be drawn using glyphs
Pipeline #10548 canceled
...@@ -28,6 +28,7 @@ minerva (12.3.1~beta.1) unstable; urgency=low ...@@ -28,6 +28,7 @@ minerva (12.3.1~beta.1) unstable; urgency=low
close button twice (#818) close button twice (#818)
* Bug fix: empty type for data overlay is allowed (#827) * Bug fix: empty type for data overlay is allowed (#827)
* Bug fix: genetic variants data overlay was ignoring color parameter (#827) * Bug fix: genetic variants data overlay was ignoring color parameter (#827)
* Bug fix: pathways can be drawn using glyphs (#825)
minerva (13.1.0~beta.0) unstable; urgency=low minerva (13.1.0~beta.0) unstable; urgency=low
* Feature: annotators are more flexible - you can define set of input and * Feature: annotators are more flexible - you can define set of input and
......
...@@ -18,8 +18,11 @@ import lcsb.mapviewer.converter.zip.LayoutZipEntryFile; ...@@ -18,8 +18,11 @@ import lcsb.mapviewer.converter.zip.LayoutZipEntryFile;
import lcsb.mapviewer.converter.zip.ZipEntryFile; import lcsb.mapviewer.converter.zip.ZipEntryFile;
import lcsb.mapviewer.model.Project; import lcsb.mapviewer.model.Project;
import lcsb.mapviewer.model.map.layout.graphics.Glyph; import lcsb.mapviewer.model.map.layout.graphics.Glyph;
import lcsb.mapviewer.model.map.layout.graphics.Layer;
import lcsb.mapviewer.model.map.layout.graphics.LayerText;
import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.Model;
import lcsb.mapviewer.model.map.model.ModelData; import lcsb.mapviewer.model.map.model.ModelData;
import lcsb.mapviewer.model.map.model.ModelSubmodelConnection;
import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.model.map.species.Element;
public class ProjectFactory { public class ProjectFactory {
...@@ -90,7 +93,15 @@ public class ProjectFactory { ...@@ -90,7 +93,15 @@ public class ProjectFactory {
} }
private void assignGlyphsToElements(Project project) throws InvalidGlyphFile { private void assignGlyphsToElements(Project project) throws InvalidGlyphFile {
Set<ModelData> models = new HashSet<>();
models.addAll(project.getModels());
for (ModelData model : project.getModels()) { for (ModelData model : project.getModels()) {
for (ModelSubmodelConnection connection : model.getSubmodels()) {
models.add(connection.getSubmodel());
}
}
for (ModelData model : models) {
for (Element element : model.getElements()) { for (Element element : model.getElements()) {
Glyph glyph = extractGlyph(project, element.getNotes()); Glyph glyph = extractGlyph(project, element.getNotes());
if (glyph != null) { if (glyph != null) {
...@@ -98,6 +109,15 @@ public class ProjectFactory { ...@@ -98,6 +109,15 @@ public class ProjectFactory {
element.setGlyph(glyph); element.setGlyph(glyph);
} }
} }
for (Layer layer : model.getLayers()) {
for (LayerText text : layer.getTexts()) {
Glyph glyph = extractGlyph(project, text.getNotes());
if (glyph != null) {
text.setNotes(removeGlyph(text.getNotes()));
text.setGlyph(glyph);
}
}
}
} }
} }
......
...@@ -23,6 +23,8 @@ import lcsb.mapviewer.model.Project; ...@@ -23,6 +23,8 @@ import lcsb.mapviewer.model.Project;
import lcsb.mapviewer.model.map.OverviewImage; import lcsb.mapviewer.model.map.OverviewImage;
import lcsb.mapviewer.model.map.OverviewLink; import lcsb.mapviewer.model.map.OverviewLink;
import lcsb.mapviewer.model.map.OverviewModelLink; import lcsb.mapviewer.model.map.OverviewModelLink;
import lcsb.mapviewer.model.map.layout.graphics.Layer;
import lcsb.mapviewer.model.map.layout.graphics.LayerText;
import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.Model;
import lcsb.mapviewer.model.map.model.ModelData; import lcsb.mapviewer.model.map.model.ModelData;
import lcsb.mapviewer.model.map.model.ModelFullIndexed; import lcsb.mapviewer.model.map.model.ModelFullIndexed;
...@@ -211,6 +213,53 @@ public class ProjectFactoryTest extends ConverterTestFunctions { ...@@ -211,6 +213,53 @@ public class ProjectFactoryTest extends ConverterTestFunctions {
} }
@Test
public void testParseGlyphsAndPutThemAsTextGlyphs() throws Exception {
try {
Model model = new ModelFullIndexed(null);
Layer layer = new Layer();
LayerText text = new LayerText();
text.setNotes("Glyph: glyphs/g1.png");
layer.addLayerText(text);
model.addLayer(layer);
MockConverter.modelToBeReturned = model;
ComplexZipConverter converter = new ComplexZipConverter(MockConverter.class);
ProjectFactory projectFactory = new ProjectFactory(converter);
ComplexZipConverterParams params = new ComplexZipConverterParams();
params.zipFile(new ZipFile("testFiles/complex_with_glyphs.zip"));
params.entry(new ModelZipEntryFile("main.xml", "main", true, false, null));
ZipFile zipFile = new ZipFile("testFiles/complex_with_glyphs.zip");
ZipEntryFileFactory factory = new ZipEntryFileFactory();
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
if (!entry.isDirectory()) {
params.entry(factory.createZipEntryFile(entry, zipFile));
}
}
Project project = projectFactory.create(params);
assertNotNull(project);
model = project.getModels().iterator().next().getModel();
LayerText fetchedProtein = model.getLayers().iterator().next().getTexts().get(0);
assertFalse("Glyph field should be removed from notes", fetchedProtein.getNotes().contains("Glyph"));
assertNotNull("Glyph in the protein is not defined but should", fetchedProtein.getGlyph());
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
private GenericProtein createProtein() { private GenericProtein createProtein() {
GenericProtein result = new GenericProtein("s" + elementCounter++); GenericProtein result = new GenericProtein("s" + elementCounter++);
return result; return result;
......
...@@ -43,11 +43,11 @@ public class CreateHierarchyCommand extends ModelCommand { ...@@ -43,11 +43,11 @@ public class CreateHierarchyCommand extends ModelCommand {
private static final double LOG_4 = Math.log(4); private static final double LOG_4 = Math.log(4);
/** /**
* Top left corner x coordinate of the text associated with compratment. * Top left corner x coordinate of the text associated with compartment.
*/ */
private static final double DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT = 10; private static final double DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT = 10;
/** /**
* Top left corner y coordinate of the text associated with compratment. * Top left corner y coordinate of the text associated with compartment.
*/ */
private static final double DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT = 10; private static final double DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT = 10;
...@@ -180,6 +180,7 @@ public class CreateHierarchyCommand extends ModelCommand { ...@@ -180,6 +180,7 @@ public class CreateHierarchyCommand extends ModelCommand {
compartment.setName(extractNameFromText(text.getNotes())); compartment.setName(extractNameFromText(text.getNotes()));
compartment.setNotes(extractNotesFromText(text.getNotes())); compartment.setNotes(extractNotesFromText(text.getNotes()));
compartment.setZ(text.getZ()); compartment.setZ(text.getZ());
compartment.setGlyph(text.getGlyph());
rap.processNotes(compartment); rap.processNotes(compartment);
compartment.setNamePoint(new Point2D.Double(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT, compartment.setNamePoint(new Point2D.Double(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT,
......
...@@ -5,9 +5,11 @@ import java.awt.geom.Rectangle2D; ...@@ -5,9 +5,11 @@ import java.awt.geom.Rectangle2D;
import java.io.Serializable; import java.io.Serializable;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType; import javax.persistence.GenerationType;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.ManyToOne;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
...@@ -92,6 +94,12 @@ public class LayerText implements Serializable, Drawable { ...@@ -92,6 +94,12 @@ public class LayerText implements Serializable, Drawable {
*/ */
private Double fontSize = DEFAULT_LAYER_FONT_SIZE; private Double fontSize = DEFAULT_LAYER_FONT_SIZE;
/**
* Glyph used for drawing (instead of text).
*/
@ManyToOne(fetch = FetchType.LAZY)
private Glyph glyph = null;
/** /**
* Default constructor. * Default constructor.
*/ */
...@@ -130,6 +138,9 @@ public class LayerText implements Serializable, Drawable { ...@@ -130,6 +138,9 @@ public class LayerText implements Serializable, Drawable {
height = layerText.getHeight(); height = layerText.getHeight();
notes = layerText.getNotes(); notes = layerText.getNotes();
fontSize = layerText.getFontSize(); fontSize = layerText.getFontSize();
if (layerText.getGlyph() != null) {
setGlyph(new Glyph(layerText.getGlyph()));
}
} }
/** /**
...@@ -377,4 +388,12 @@ public class LayerText implements Serializable, Drawable { ...@@ -377,4 +388,12 @@ public class LayerText implements Serializable, Drawable {
return "x=" + x + ";y=" + y + "; w=" + width + ", h=" + height; return "x=" + x + ";y=" + y + "; w=" + width + ", h=" + height;
} }
public Glyph getGlyph() {
return glyph;
}
public void setGlyph(Glyph glyph) {
this.glyph = glyph;
}
} }
alter table layer_text_table add column glyph_id integer;
alter table layer_text_table add constraint layer_text_table_glyph_fk FOREIGN KEY (glyph_id)
REFERENCES glyph_table (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment