diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java index ca09d6630b632b46f85b683bd981bad5b5d7f669..97cbe2c445492fe9e1256eb6562115cb302e68d3 100644 --- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java +++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParser.java @@ -129,7 +129,7 @@ public class RestAnnotationParser extends XmlParser { sb.append(createEntry(NoteField.PANTHER, filterMiriam(data, MiriamType.PANTHER), forceFullInfo)); sb.append(createEntry(NoteField.DESCRIPTION, null, forceFullInfo)); sb.append(createEntry(NoteField.ABBREVIATION, element.getAbbreviation(), forceFullInfo)); - sb.append(createEntry(NoteField.SEMANTIC_ZOOM_LEVEL_VISIBILITY, element.getSemanticZoomLevelVisibility(), forceFullInfo)); + sb.append(createEntry(NoteField.SEMANTIC_ZOOM_LEVEL_VISIBILITY, element.getVisibilityLevel(), forceFullInfo)); sb.append(createEntry(NoteField.CHARGED_FORMULA, element.getFormula(), forceFullInfo)); if (element instanceof Species) { sb.append(createEntry(NoteField.CHARGE, ((Species) element).getCharge(), forceFullInfo)); @@ -640,12 +640,12 @@ public class RestAnnotationParser extends XmlParser { if (zoomLevelVisibility == null) { return; } - if (element.getSemanticZoomLevelVisibility() == null) { - element.setSemanticZoomLevelVisibility(zoomLevelVisibility); - } else if (!element.getSemanticZoomLevelVisibility().equals(zoomLevelVisibility)) { + if (element.getVisibilityLevel() == null || element.getVisibilityLevel().isEmpty()) { + element.setVisibilityLevel(zoomLevelVisibility); + } else if (!element.getVisibilityLevel().equals(zoomLevelVisibility)) { logger.warn( elementUtils.getElementTag(element) + " New " + NoteField.SEMANTIC_ZOOM_LEVEL_VISIBILITY.getCommonName() + " different than default [" - + zoomLevelVisibility + "][" + element.getSemanticZoomLevelVisibility() + "]. Ignoring."); + + zoomLevelVisibility + "][" + element.getVisibilityLevel() + "]. Ignoring."); } } diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java index f396388cca327cc80d47f17676da9bc3f648813b..f9d45fd607a6ecc4e8bfb6c1ce9995de66c4f6b9 100644 --- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java +++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/annotation/RestAnnotationParserTest.java @@ -428,16 +428,22 @@ public class RestAnnotationParserTest extends CellDesignerTestFunctions { } @Override - public void setSemanticZoomLevelVisibility(String zoomLevelVisibility) { + public void setVisibilityLevel(String zoomLevelVisibility) { // TODO Auto-generated method stub - + } @Override - public String getSemanticZoomLevelVisibility() { + public String getVisibilityLevel() { // TODO Auto-generated method stub return null; } + + @Override + public void setVisibilityLevel(Integer zoomLevelVisibility) { + // TODO Auto-generated method stub + + } }); fail("Exception expected"); } catch (NotImplementedException e) { diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java index 14ed133d42d6e5522f028500d8ced615c663c054..19fe2746b3875dd1d711cdb74e95291197b4587c 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java @@ -17,6 +17,7 @@ import org.apache.log4j.Logger; import lcsb.mapviewer.commands.ColorExtractor; import lcsb.mapviewer.common.MimeType; import lcsb.mapviewer.converter.graphics.bioEntity.BioEntityConverterImpl; +import lcsb.mapviewer.converter.graphics.bioEntity.SemanticZoomLevelMatcher; import lcsb.mapviewer.converter.graphics.layer.LayerConverter; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.compartment.PathwayCompartment; @@ -67,6 +68,7 @@ import lcsb.mapviewer.modelutils.map.ElementUtils; * */ public abstract class AbstractImageGenerator { + private SemanticZoomLevelMatcher zoomLevelMatcher = new SemanticZoomLevelMatcher(); /** * Model is drawn as a partial image (x,y,width,height parameters of @@ -78,32 +80,32 @@ public abstract class AbstractImageGenerator { * TODO maybe more effecient (and safe) solution would be to include text * desciption as parts of the object border */ - private static final int SINGLE_FRAME_MARGIN = 100; + private static final int SINGLE_FRAME_MARGIN = 100; /** * On which level in hierarchical view we should visualize map. */ - private int level = Integer.MAX_VALUE; + private int level = Integer.MAX_VALUE; /** * Zoom factor of the drawing. */ - private double scale = 1; + private double scale = 1; /** * This is a frame border from which we take all elements to draw. */ - private Rectangle2D.Double border = null; + private Rectangle2D.Double border = null; /** * Object that helps to convert {@link ColorSchema} values into colors. */ - private ColorExtractor colorExtractor = null; + private ColorExtractor colorExtractor = null; /** * Util class for simple operations on {@link Element elements}. */ - private ElementUtils eu = new ElementUtils(); + private ElementUtils eu = new ElementUtils(); /** * This class contains a list of params that are used for drawing. @@ -675,7 +677,7 @@ public abstract class AbstractImageGenerator { // draw only elements that don't have parents (aren't included in any // compartment/complexes) if (element instanceof Species) { - if (((Species) element).getComplex() == null && ((Species) element).getCompartment() == null) { + if (((Species) element).getComplex() == null && element.getCompartment() == null) { drawSpecies((Species) element, params.getVisibleLayoutsForElement(element), params); } } @@ -735,7 +737,7 @@ public abstract class AbstractImageGenerator { // If 'compartment' has not the big enough visibility level then should not // be visible. - if (compartment.getVisibilityLevel() > level && params.nested) { + if (!(zoomLevelMatcher.isVisible(level, compartment.getVisibilityLevel())) && params.nested) { return; } @@ -746,7 +748,7 @@ public abstract class AbstractImageGenerator { */ boolean fill = true; - if (compartment.getTransparencyLevel() <= level || !params.nested) { + if (zoomLevelMatcher.isTransparent(level, compartment.getTransparencyLevel()) || !params.nested) { fill = false; } @@ -817,7 +819,7 @@ public abstract class AbstractImageGenerator { // VisibilityLevel is big enough, then it is // displayed. - if (species.getVisibilityLevel() > level && params.nested) { + if (!(zoomLevelMatcher.isVisible(level, species.getVisibilityLevel())) && params.nested) { return; } @@ -832,10 +834,16 @@ public abstract class AbstractImageGenerator { boolean rescale = false; if (species instanceof Complex) { - if (((Complex) species).getElements().size() == 0) { + Complex complex = (Complex) species; + if (complex.getElements().size() == 0) { rescale = true; - } else if (((Complex) species).getElements().get(0).getVisibilityLevel() > level) { + } else { rescale = true; + for (Element child : complex.getElements()) { + if ((zoomLevelMatcher.isVisible(level, child.getVisibilityLevel())) || !params.nested) { + rescale = false; + } + } } } @@ -862,7 +870,7 @@ public abstract class AbstractImageGenerator { // mode if (!complex.getState().equalsIgnoreCase("brief")) { // depending on current zoom level, children are drawn or not - if (complex.getTransparencyLevel() <= level) { + if (zoomLevelMatcher.isTransparent(level, complex.getTransparencyLevel()) || !params.nested) { for (Species a : complex.getElements()) { drawSpecies(a, visibleLayouts, params); } diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverter.java index 83ea40c73472ad4b2659099afbe4484ef0b19abe..fc23fb911c173d2ef0c938e9de04531fdb171a90 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverter.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverter.java @@ -157,7 +157,7 @@ public abstract class BioEntityConverter<T extends BioEntity> { */ protected boolean isVisible(BioEntity bioEntity, ConverterParams params) { if (params.isSemanticZoomingOn()) { - boolean result = semanticZoomLevelMatcher.matchLevel(params.getLevel(), bioEntity.getSemanticZoomLevelVisibility()); + boolean result = semanticZoomLevelMatcher.isVisible(params.getLevel(), bioEntity.getVisibilityLevel()); if (bioEntity instanceof Element) { Compartment compartment = ((Element) bioEntity).getCompartment(); if (compartment != null) { diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/SemanticZoomLevelMatcher.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/SemanticZoomLevelMatcher.java index 195b6e4916344c1838861a851220c82bb323c6f6..a5c28959bc3b5294e7dfc17ecee784ebe1f10249 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/SemanticZoomLevelMatcher.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/SemanticZoomLevelMatcher.java @@ -12,7 +12,15 @@ public class SemanticZoomLevelMatcher { * range of levels to be checked * @return true if level is in the range */ - public boolean matchLevel(int level, String semanticZoomLevelVisibility) { + public boolean isVisible(int level, String semanticZoomLevelVisibility) { + return matchLevel(level, semanticZoomLevelVisibility); + } + + public boolean isTransparent(int level, String semanticZoomLevelVisibility) { + return matchLevel(level, semanticZoomLevelVisibility); + } + + private boolean matchLevel(int level, String semanticZoomLevelVisibility) { if (semanticZoomLevelVisibility == null || semanticZoomLevelVisibility.isEmpty()) { return true; } @@ -30,5 +38,6 @@ public class SemanticZoomLevelMatcher { } return false; } + } diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java index 555a06d3d0e4ffb5246bc36d5b137c9c9b8d79c6..842e457046c096c80786e9a2dd5370c97b18043e 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/compartment/CompartmentConverter.java @@ -14,6 +14,7 @@ import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.common.geometry.EllipseTransformation; import lcsb.mapviewer.common.geometry.LineTransformation; import lcsb.mapviewer.converter.graphics.ConverterParams; +import lcsb.mapviewer.converter.graphics.bioEntity.SemanticZoomLevelMatcher; import lcsb.mapviewer.converter.graphics.bioEntity.element.ElementConverter; import lcsb.mapviewer.converter.graphics.geometry.FontFinder; import lcsb.mapviewer.converter.graphics.geometry.RectangleTooSmallException; @@ -33,56 +34,58 @@ import lcsb.mapviewer.model.map.layout.ColorSchema; */ public abstract class CompartmentConverter<T extends Compartment> extends ElementConverter<T> { + private SemanticZoomLevelMatcher zoomLevelMatcher = new SemanticZoomLevelMatcher(); + /** * Default class logger. */ @SuppressWarnings("unused") - private static Logger logger = Logger.getLogger(CompartmentConverter.class.getName()); + private static Logger logger = Logger.getLogger(CompartmentConverter.class.getName()); /** * Default font size. */ - private static final int DEFAULT_FONT_SIZE = 10; + private static final int DEFAULT_FONT_SIZE = 10; /** * Alpha level for inside of the transparent compartments. */ - public static final int DEFAULT_ALPHA_LEVEL = 8; + public static final int DEFAULT_ALPHA_LEVEL = 8; /** * Class used for transformation of lines. */ - private LineTransformation lineTransformation = new LineTransformation(); + private LineTransformation lineTransformation = new LineTransformation(); /** * Class used for transformation of ellipses. */ - private EllipseTransformation ellipseTransformation = new EllipseTransformation(); + private EllipseTransformation ellipseTransformation = new EllipseTransformation(); /** * Default alpha level for transparent compartments. */ - private static int alphaLevel = DEFAULT_ALPHA_LEVEL; + private static int alphaLevel = DEFAULT_ALPHA_LEVEL; /** * Default alpha level for semi-transparent borders. */ - protected static final int HIGH_ALPHA_LEVEL = 127; + protected static final int HIGH_ALPHA_LEVEL = 127; /** * Class used for finding place to draw desciption of the compartment. */ - private PlaceFinder placeFinder; + private PlaceFinder placeFinder; /** * Object used for synchronization when accessing {@link #placeFinder}. */ - private String placeFinderSynchronization = ""; + private String placeFinderSynchronization = ""; /** * Object that helps to convert {@link ColorSchema} values into colors. */ - private ColorExtractor colorExtractor; + private ColorExtractor colorExtractor; /** * Default constructor. @@ -103,12 +106,13 @@ public abstract class CompartmentConverter<T extends Compartment> extends Elemen "Dimension of the alias must be bigger than 0. Alias id: " + alias.getElementId() + " (name: \"" + alias.getName() + "\")"); } Rectangle2D border = alias.getBorder(); - if (params.getLevel() >= alias.getVisibilityLevel() && params.getLevel() < alias.getTransparencyLevel()) { + if (zoomLevelMatcher.isVisible(params.getLevel(), alias.getVisibilityLevel()) + && !zoomLevelMatcher.isTransparent(params.getLevel(), alias.getTransparencyLevel())) { synchronized (placeFinderSynchronization) { if (placeFinder == null || placeFinder.getModel() != alias.getModelData()) { placeFinder = new PlaceFinder(alias.getModelData().getModel()); } - border = placeFinder.getRetangle(alias); + border = placeFinder.getRetangle(alias, params.getLevel()); } } else if (!params.isTextCentered()) { border = new Rectangle2D.Double( diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/ComplexConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/ComplexConverter.java index 345fb9394478a769db5eb1ffeee759a457a08b7f..8c36e5f603ff79e8573a724de9b509ff80fc04f4 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/ComplexConverter.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/ComplexConverter.java @@ -13,6 +13,7 @@ import org.apache.log4j.Logger; import lcsb.mapviewer.commands.ColorExtractor; import lcsb.mapviewer.converter.graphics.ConverterParams; +import lcsb.mapviewer.converter.graphics.bioEntity.SemanticZoomLevelMatcher; import lcsb.mapviewer.converter.graphics.geometry.FontFinder; import lcsb.mapviewer.converter.graphics.geometry.RectangleTooSmallException; import lcsb.mapviewer.model.graphics.LineType; @@ -30,20 +31,22 @@ import lcsb.mapviewer.model.map.species.Complex; */ public class ComplexConverter extends SpeciesConverter<Complex> { + private SemanticZoomLevelMatcher zoomLevelMatcher = new SemanticZoomLevelMatcher(); + /** * How big is the triangle trimmed part of the complex. */ - private static final int TRIMMED_CORNER_SIZE = 5; + private static final int TRIMMED_CORNER_SIZE = 5; /** * Describes the distance between border of complex and internal border in * brief view (without children). */ - private static final double INTERNAL_BORDER_DIST = 5.0; + private static final double INTERNAL_BORDER_DIST = 5.0; /** * Default class logger. */ - private static Logger logger = Logger.getLogger(ComplexConverter.class.getName()); + private static Logger logger = Logger.getLogger(ComplexConverter.class.getName()); /** * Default constructor. @@ -56,7 +59,6 @@ public class ComplexConverter extends SpeciesConverter<Complex> { super(colorExtractor); } - @Override public void draw(final Complex alias, final Graphics2D graphics, final ConverterParams params) { if (alias.getState().equalsIgnoreCase("complexnoborder")) { @@ -145,7 +147,7 @@ public class ComplexConverter extends SpeciesConverter<Complex> { @Override public void drawText(final Complex alias, final Graphics2D graphics, final ConverterParams params) { if (((Complex) alias).getElements().size() > 0) { - if (alias.getTransparencyLevel() <= params.getLevel()) { + if (zoomLevelMatcher.isTransparent(params.getLevel(), alias.getTransparencyLevel())) { super.drawText(alias, graphics, params); return; } diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java index 73cb492d1e5dbf4873b41fb636622ca5add02b16..ce768f16013b2feffe696a480bc2b36a9e8278fc 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java @@ -21,6 +21,7 @@ import lcsb.mapviewer.common.exception.InvalidStateException; import lcsb.mapviewer.common.geometry.EllipseTransformation; import lcsb.mapviewer.common.geometry.LineTransformation; import lcsb.mapviewer.converter.graphics.ConverterParams; +import lcsb.mapviewer.converter.graphics.bioEntity.SemanticZoomLevelMatcher; import lcsb.mapviewer.converter.graphics.bioEntity.element.ElementConverter; import lcsb.mapviewer.model.graphics.LineType; import lcsb.mapviewer.model.map.layout.ColorSchema; @@ -39,6 +40,8 @@ import lcsb.mapviewer.model.map.species.Species; */ public abstract class SpeciesConverter<T extends Species> extends ElementConverter<T> { + private SemanticZoomLevelMatcher zoomLevelMatcher = new SemanticZoomLevelMatcher(); + /** * PI value. */ @@ -301,7 +304,7 @@ public abstract class SpeciesConverter<T extends Species> extends ElementConvert Point2D point = alias.getCenter(); if (alias instanceof Complex) { if (((Complex) alias).getElements().size() > 0) { - if (alias.getTransparencyLevel() <= params.getLevel()) { + if (zoomLevelMatcher.isTransparent(params.getLevel(), alias.getTransparencyLevel())) { point.setLocation(point.getX(), alias.getY() + alias.getHeight() - graphics.getFontMetrics().getAscent()); } } diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/placefinder/PlaceFinder.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/placefinder/PlaceFinder.java index 36d9e96928be9e69edc2c0fbf23ed1a5b1a556c8..98dc0c33be24e7eab7c870df6defb55c4edeb3d1 100644 --- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/placefinder/PlaceFinder.java +++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/placefinder/PlaceFinder.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeSet; +import lcsb.mapviewer.converter.graphics.bioEntity.SemanticZoomLevelMatcher; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.species.Element; @@ -23,6 +24,8 @@ import org.apache.log4j.Logger; */ public class PlaceFinder { + private SemanticZoomLevelMatcher zoomLevelMatcher = new SemanticZoomLevelMatcher(); + /** * Represents small part of the map (enclosed by cuting lines) where something * can be put. Contains borders (height, weight, location etc). Informatin if @@ -103,52 +106,52 @@ public class PlaceFinder { * Default class logger. */ @SuppressWarnings("unused") - private static Logger logger = Logger.getLogger(PlaceFinder.class.getName()); + private static Logger logger = Logger.getLogger(PlaceFinder.class.getName()); /** * Whole surface is split into rectangular regions. The lines that cut the * surface correspond to borders of aliases that overlap current alias. This * matrix defines which of these regions can be used for description. */ - private Field[][] matrix; + private Field[][] matrix; /** - * List of {@link Compartment compartment aliases} that split surface - * into regions. + * List of {@link Compartment compartment aliases} that split surface into + * regions. */ - private List<Compartment> aliases; + private List<Compartment> aliases; /** * Alias for which computation is done. */ - private Element mainAlias; + private Element mainAlias; /** * Left boundary of the rectangle in which we want to fit our description. */ - private double leftBound; + private double leftBound; /** * Right boundary of the rectangle in which we want to fit our description. */ - private double rightBound; + private double rightBound; /** * Top boundary of the rectangle in which we want to fit our description. */ - private double upBound; + private double upBound; /** * Bottom boundary of the rectangle in which we want to fit our description. */ - private double bottomBound; + private double bottomBound; /** * Model for which this {@link PlaceFinder} was created. */ - private Model model; + private Model model; /** * Map with aliases that should be considered when looking for a place to put * text. */ - private Map<Element, List<Compartment>> otherAliases = new HashMap<Element, List<Compartment>>(); + private Map<Element, Map<Integer, List<Compartment>>> otherAliases = new HashMap<>(); /** * Default constructor for place finder in a model. @@ -342,18 +345,23 @@ public class PlaceFinder { * alias for which we try to determine text position * @return bounds where text could be put */ - public Rectangle2D getRetangle(Compartment alias) { - List<Compartment> list = otherAliases.get(alias); + public Rectangle2D getRetangle(Compartment alias, int level) { + Map<Integer, List<Compartment>> lists = otherAliases.get(alias); + if (lists == null) { + lists = new HashMap<>(); + otherAliases.put(alias, lists); + } + List<Compartment> list = lists.get(level); if (list == null) { list = new ArrayList<Compartment>(); for (Compartment compAlias : model.getCompartments()) { - if (compAlias.getVisibilityLevel() <= alias.getVisibilityLevel() && compAlias.getTransparencyLevel() > alias.getVisibilityLevel()) { + if (zoomLevelMatcher.isVisible(level, compAlias.getVisibilityLevel()) && !zoomLevelMatcher.isTransparent(level, compAlias.getTransparencyLevel())) { if (compAlias.cross(alias) && compAlias.getSize() <= alias.getSize()) { list.add(compAlias); } } } - otherAliases.put(alias, list); + lists.put(level, list); } this.mainAlias = alias; diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/NormalImageGeneratorTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/NormalImageGeneratorTest.java index 36d84707d1901ea6c5e5a23e32f1f975708fcbef..864c939598c6397310c505a20948283409e75dc3 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/NormalImageGeneratorTest.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/NormalImageGeneratorTest.java @@ -139,9 +139,9 @@ public class NormalImageGeneratorTest { layer.addLayerText(new LayerText(new Rectangle2D.Double(100, 100, 199, 220), "Z dgf fsd aaewq ret")); new CreateHierarchyCommand(model, 1, 8).execute(); - model.getCompartments().get(1).setTransparencyLevel(2); - model.getCompartments().get(0).setTransparencyLevel(2); - model.getCompartments().get(3).setTransparencyLevel(2); + model.getCompartments().get(1).setTransparencyLevel("2"); + model.getCompartments().get(0).setTransparencyLevel("2"); + model.getCompartments().get(3).setTransparencyLevel("2"); new PngImageGenerator(new Params().level(2).scale(4).width(600).height(600).model(model).nested(true)); } catch (Exception e) { diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java index 3d191ad894e7a0dce5a02e59bb60ddef4ce733a7..6109ab544df255ee427c35ee6617615b2e3edb40 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java @@ -51,9 +51,9 @@ public class PdfImageGeneratorTest { layer.addLayerText(new LayerText(new Rectangle2D.Double(100, 100, 199, 220), "Z dgf fsd aaewq ret")); new CreateHierarchyCommand(model, 1, 8).execute(); - model.getCompartments().get(1).setTransparencyLevel(2); - model.getCompartments().get(0).setTransparencyLevel(2); - model.getCompartments().get(3).setTransparencyLevel(2); + model.getCompartments().get(1).setTransparencyLevel("2"); + model.getCompartments().get(0).setTransparencyLevel("2"); + model.getCompartments().get(3).setTransparencyLevel("2"); PdfImageGenerator pig = new PdfImageGenerator(new Params().level(2).scale(4).width(600).height(600).model(model).nested(true)); diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverterImplTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverterImplTest.java index 8ba25ceb5b694c44954955c85a691d880e1aa439..9141204ccffd6c4e905476048376117a4ac42a6c 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverterImplTest.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/BioEntityConverterImplTest.java @@ -46,7 +46,7 @@ public class BioEntityConverterImplTest { try { Graphics2D graphics = Mockito.mock(Graphics2D.class); Reaction reaction = createReaction(1.0); - reaction.getReactants().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getReactants().get(0).getElement().setVisibilityLevel("11"); BioEntityConverterImpl rc = new BioEntityConverterImpl(reaction, false, colorExtractor); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); @@ -64,7 +64,7 @@ public class BioEntityConverterImplTest { Graphics2D graphics = Mockito.mock(Graphics2D.class); Reaction reaction = createReaction(1.0); - reaction.getProducts().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getProducts().get(0).getElement().setVisibilityLevel("11"); BioEntityConverterImpl rc = new BioEntityConverterImpl(reaction, false, colorExtractor); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/reaction/ReactionConverterTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/reaction/ReactionConverterTest.java index 4623a640195498ae168413bdec83498a2e4ebc6b..8d17b603caea1686e012591a83ebb2663f549266 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/reaction/ReactionConverterTest.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/reaction/ReactionConverterTest.java @@ -280,7 +280,7 @@ public class ReactionConverterTest { ReactionConverter rc = new ReactionConverter(colorExtractor); Reaction reaction = createReaction(1.0); - reaction.getModifiers().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getModifiers().get(0).getElement().setVisibilityLevel("11"); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); verify(graphics, times(3)).draw(any(GeneralPath.class)); @@ -297,7 +297,7 @@ public class ReactionConverterTest { ReactionConverter rc = new ReactionConverter(colorExtractor); Reaction reaction = createReaction(1.0); - reaction.getReactants().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getReactants().get(0).getElement().setVisibilityLevel("11"); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); verify(graphics, times(3)).draw(any(GeneralPath.class)); @@ -314,7 +314,7 @@ public class ReactionConverterTest { ReactionConverter rc = new ReactionConverter(colorExtractor); Reaction reaction = createReaction(1.0); - reaction.getProducts().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getProducts().get(0).getElement().setVisibilityLevel("11"); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); verify(graphics, times(3)).draw(any(GeneralPath.class)); @@ -331,7 +331,7 @@ public class ReactionConverterTest { ReactionConverter rc = new ReactionConverter(colorExtractor); Reaction reaction = createComplexReaction(1.0); - reaction.getModifiers().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getModifiers().get(0).getElement().setVisibilityLevel("11"); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); verify(graphics, times(12)).draw(any(GeneralPath.class)); @@ -348,8 +348,8 @@ public class ReactionConverterTest { ReactionConverter rc = new ReactionConverter(colorExtractor); Reaction reaction = createComplexReaction(1.0); - reaction.getModifiers().get(0).getElement().setSemanticZoomLevelVisibility("11"); - reaction.getModifiers().get(1).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getModifiers().get(0).getElement().setVisibilityLevel("11"); + reaction.getModifiers().get(1).getElement().setVisibilityLevel("11"); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); verify(graphics, times(9)).draw(any(GeneralPath.class)); @@ -374,7 +374,7 @@ public class ReactionConverterTest { ReactionConverter rc = new ReactionConverter(colorExtractor); Reaction reaction = createComplexReaction(1.0); - reaction.getReactants().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getReactants().get(0).getElement().setVisibilityLevel("11"); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); verify(graphics, times(12)).draw(any(GeneralPath.class)); @@ -391,7 +391,7 @@ public class ReactionConverterTest { ReactionConverter rc = new ReactionConverter(colorExtractor); Reaction reaction = createComplexReaction(1.0); - reaction.getProducts().get(0).getElement().setSemanticZoomLevelVisibility("11"); + reaction.getProducts().get(0).getElement().setVisibilityLevel("11"); rc.draw(reaction, graphics, new ConverterParams().semanticZoomingOn(true).level(10)); verify(graphics, times(12)).draw(any(GeneralPath.class)); diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/placefinder/AllPlaceFinderTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/placefinder/AllPlaceFinderTest.java index 2ddcd62d38d4e161878bfb94e9a1adb9356f5e18..de5f85db2360c05e79b0353be6b4ff59d9642744 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/placefinder/AllPlaceFinderTest.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/placefinder/AllPlaceFinderTest.java @@ -31,7 +31,7 @@ public class AllPlaceFinderTest { for (Compartment alias : model.getCompartments()) { PlaceFinder pf = new PlaceFinder(model); - actual = pf.getRetangle(alias).toString(); + actual = pf.getRetangle(alias, Integer.valueOf(alias.getVisibilityLevel())).toString(); } String expected = ""; Rectangle2D result = model.getCompartments().get(0).getBorder(); @@ -49,7 +49,7 @@ public class AllPlaceFinderTest { String expected = ""; for (Compartment alias : model.getCompartments()) { PlaceFinder pf = new PlaceFinder(model); - actual = pf.getRetangle(alias).toString(); + actual = pf.getRetangle(alias, Integer.valueOf(alias.getVisibilityLevel())).toString(); Rectangle2D result = alias.getBorder(); expected = result.toString(); assertEquals(expected, actual); @@ -65,7 +65,7 @@ public class AllPlaceFinderTest { model.addElement(alias2); PlaceFinder pf = new PlaceFinder(model); - Rectangle2D rect = pf.getRetangle(alias2); + Rectangle2D rect = pf.getRetangle(alias2, Integer.valueOf(alias.getVisibilityLevel())); double actual = rect.getWidth() * rect.getHeight(); double expected = alias2.getWidth() * alias2.getHeight(); assertTrue(actual < expected); @@ -79,7 +79,7 @@ public class AllPlaceFinderTest { double actual = 0.0; for (Compartment alias : model.getCompartments()) { PlaceFinder pf = new PlaceFinder(model); - Rectangle2D rect = pf.getRetangle(alias); + Rectangle2D rect = pf.getRetangle(alias, Integer.valueOf(alias.getVisibilityLevel())); actual = rect.getWidth() * rect.getHeight(); assertTrue(actual > 0); } @@ -95,7 +95,7 @@ public class AllPlaceFinderTest { Rectangle2D result = null; for (Compartment alias : model.getCompartments()) { PlaceFinder pf = new PlaceFinder(model); - Rectangle2D rect = pf.getRetangle(alias); + Rectangle2D rect = pf.getRetangle(alias, Integer.valueOf(alias.getVisibilityLevel())); actual += rect.getWidth() * rect.getHeight(); } result = model.getCompartments().get(0).getBorder(); @@ -124,8 +124,8 @@ public class AllPlaceFinderTest { result.setY(y); result.setWidth(width); result.setHeight(height); - result.setTransparencyLevel(10); - result.setVisibilityLevel(9); + result.setTransparencyLevel("10"); + result.setVisibilityLevel("9"); return result; } @@ -138,7 +138,7 @@ public class AllPlaceFinderTest { double actual = 0.0; for (Compartment alias : model.getCompartments()) { PlaceFinder pf = new PlaceFinder(model); - Rectangle2D rect = pf.getRetangle(alias); + Rectangle2D rect = pf.getRetangle(alias, Integer.valueOf(alias.getVisibilityLevel())); actual = rect.getWidth() * rect.getHeight(); assertTrue(actual > 0); } diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java index 23a0107febab2705e9c1c62dfce16dc2cf1327b5..4ef03758409d66635419947aaa92775596d2e8a3 100644 --- a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java +++ b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java @@ -203,7 +203,7 @@ public class CreateHierarchyCommand extends ModelCommand { logValue = zoomLevels; } } - alias.setVisibilityLevel(logValue); + alias.setVisibilityLevel(logValue + ""); } } @@ -218,7 +218,7 @@ public class CreateHierarchyCommand extends ModelCommand { double rate = computeRate(compartment, Configuration.MAX_VISIBLE_OBJECT_SIZE); maxVisibilityLevel = (int) ((int) Math.ceil(Math.log(rate)) / LOG_4); for (Element child : compartment.getElements()) { - maxVisibilityLevel = Math.min(maxVisibilityLevel, child.getVisibilityLevel()); + maxVisibilityLevel = Math.min(maxVisibilityLevel, Integer.valueOf(child.getVisibilityLevel())); } if (maxVisibilityLevel >= zoomLevels) { maxVisibilityLevel = zoomLevels; @@ -226,7 +226,7 @@ public class CreateHierarchyCommand extends ModelCommand { if (maxVisibilityLevel <= 0) { maxVisibilityLevel = 1; } - compartment.setTransparencyLevel(maxVisibilityLevel); + compartment.setTransparencyLevel(maxVisibilityLevel + ""); for (Element child : compartment.getElements()) { child.setVisibilityLevel(compartment.getTransparencyLevel()); } @@ -243,7 +243,7 @@ public class CreateHierarchyCommand extends ModelCommand { double rate = computeRate(complex, Configuration.MAX_VISIBLE_OBJECT_SIZE); maxVisibilityLevel = (int) ((int) Math.ceil(Math.log(rate)) / LOG_4); for (Element child : complex.getElements()) { - maxVisibilityLevel = Math.min(maxVisibilityLevel, child.getVisibilityLevel()); + maxVisibilityLevel = Math.min(maxVisibilityLevel, Integer.valueOf(child.getVisibilityLevel())); } if (maxVisibilityLevel >= zoomLevels) { maxVisibilityLevel = zoomLevels; @@ -251,7 +251,7 @@ public class CreateHierarchyCommand extends ModelCommand { if (maxVisibilityLevel <= 0) { maxVisibilityLevel = 1; } - complex.setTransparencyLevel(maxVisibilityLevel); + complex.setTransparencyLevel(maxVisibilityLevel + ""); for (Element child : complex.getElements()) { child.setVisibilityLevel(complex.getTransparencyLevel()); } @@ -270,7 +270,7 @@ public class CreateHierarchyCommand extends ModelCommand { } else if (alias instanceof Complex) { settingTransparencyLevelForComplex((Complex) alias); } else { - alias.setTransparencyLevel(0); + alias.setTransparencyLevel("0"); } } } diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java index cc78f07b6e85b9845474a31b1d1373231e774cb7..6ff5608d3cc46fafcfa79118f2217a9c9badac07 100644 --- a/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java +++ b/model-command/src/test/java/lcsb/mapviewer/commands/CopyCommandTest.java @@ -328,8 +328,8 @@ public class CopyCommandTest extends CommandTestFunctions { Compartment c1 = new SquareCompartment("c1"); Compartment c2 = new SquareCompartment("c2"); - c1.setSemanticZoomLevelVisibility("2"); - c2.setSemanticZoomLevelVisibility("3"); + c1.setVisibilityLevel("2"); + c2.setVisibilityLevel("3"); model.addElement(c1); model.addElement(c2); @@ -349,7 +349,7 @@ public class CopyCommandTest extends CommandTestFunctions { Product product = new Product(s2); product.setLine(new PolylineData(new Point2D.Double(10, 0), new Point2D.Double(120, 10))); reaction.addProduct(product); - reaction.setSemanticZoomLevelVisibility("4"); + reaction.setVisibilityLevel("4"); model.addReaction(reaction); diff --git a/model-command/src/test/java/lcsb/mapviewer/commands/CreateHierarchyCommandTest.java b/model-command/src/test/java/lcsb/mapviewer/commands/CreateHierarchyCommandTest.java index 4d733b555e86dd03627f2cc685471b0855d642aa..97eb95a6f99283ae3bffc29295bf0cdd4f7837f6 100644 --- a/model-command/src/test/java/lcsb/mapviewer/commands/CreateHierarchyCommandTest.java +++ b/model-command/src/test/java/lcsb/mapviewer/commands/CreateHierarchyCommandTest.java @@ -53,7 +53,7 @@ public class CreateHierarchyCommandTest extends CommandTestFunctions { parents.add(alias); } - Set<Integer> levels = new HashSet<Integer>(); + Set<String> levels = new HashSet<>(); for (Element a : model.getElements()) { levels.add(a.getVisibilityLevel()); } @@ -150,16 +150,16 @@ public class CreateHierarchyCommandTest extends CommandTestFunctions { for (Compartment compartment : model.getCompartments()) { if (compartment.getCompartment() == null) { + int visibilityLevel = Integer.valueOf(compartment.getVisibilityLevel()); assertTrue( - "Alias " + compartment.getElementId() + " is not visible at levels highers than " + compartment.getVisibilityLevel(), - compartment.getVisibilityLevel() <= 1); + "Alias " + compartment.getElementId() + " is not visible at levels highers than " + compartment.getVisibilityLevel(), visibilityLevel <= 1); } } for (Species species : model.getSpeciesList()) { if (species.getCompartment() == null) { - assertTrue( - "Alias " + species.getElementId() + " is not visible at levels highers than " + species.getVisibilityLevel(), species.getVisibilityLevel() <= 1); + int visibilityLevel = Integer.valueOf(species.getVisibilityLevel()); + assertTrue("Alias " + species.getElementId() + " is not visible at levels highers than " + species.getVisibilityLevel(), visibilityLevel <= 1); } } @@ -179,10 +179,11 @@ public class CreateHierarchyCommandTest extends CommandTestFunctions { new CreateHierarchyCommand(model, levels, zoomFactor).execute(); - for (Element alias : model.getElements()) { + for (Element element : model.getElements()) { + int visibilityLevel = Integer.valueOf(element.getVisibilityLevel()); assertTrue( - "Alias " + alias.getElementId() + " is not visible even at the bottom level (visibility: " + alias.getVisibilityLevel() + ") ", - alias.getVisibilityLevel() <= levels); + "Alias " + element.getElementId() + " is not visible even at the bottom level (visibility: " + element.getVisibilityLevel() + ") ", + visibilityLevel <= levels); } } catch (Exception e) { @@ -262,12 +263,16 @@ public class CreateHierarchyCommandTest extends CommandTestFunctions { for (Element alias : model.getElements()) { Element parentAlias = alias.getCompartment(); if (parentAlias != null) { - assertTrue(alias.getVisibilityLevel() >= parentAlias.getVisibilityLevel()); + int parentVisibilityLevel = Integer.valueOf(parentAlias.getVisibilityLevel()); + int aliasVisibilityLevel = Integer.valueOf(alias.getVisibilityLevel()); + assertTrue(aliasVisibilityLevel >= parentVisibilityLevel); } if (alias instanceof Species) { parentAlias = ((Species) alias).getComplex(); if (parentAlias != null) { - assertTrue(alias.getVisibilityLevel() >= parentAlias.getVisibilityLevel()); + int parentVisibilityLevel = Integer.valueOf(parentAlias.getVisibilityLevel()); + int aliasVisibilityLevel = Integer.valueOf(alias.getVisibilityLevel()); + assertTrue(aliasVisibilityLevel >= parentVisibilityLevel); } } } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java b/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java index eb2f82d237feca3a737cbd430daa07b20f32b919..b5aa17cc9bceed8fafc97fb1cf4b85203dc308f2 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java @@ -145,12 +145,20 @@ public interface BioEntity extends Serializable { * @param zoomLevelVisibility * semantic zoom level visibility */ - void setSemanticZoomLevelVisibility(String zoomLevelVisibility); + void setVisibilityLevel(String zoomLevelVisibility); + + /** + * Sets semantic zoom level visibility. + * + * @param zoomLevelVisibility + * semantic zoom level visibility + */ + void setVisibilityLevel(Integer zoomLevelVisibility); /** * Returns semantic zoom level visibility. * * @return semantic zoom level visibility */ - String getSemanticZoomLevelVisibility(); + String getVisibilityLevel(); } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java b/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java index 6a2fafcf6bb5a2aca158bbbe0b628a33c065461a..13cd8e3dc2d6d0a98985e01f9b3463d61d0227b4 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java @@ -183,7 +183,7 @@ public class Reaction implements BioEntity { /** * Zoom level visibility for semantic zooming. */ - private String zoomLevelVisibility; + private String visibilityLevel = ""; /** * Lists of all synonyms used for describing this element. @@ -253,7 +253,7 @@ public class Reaction implements BioEntity { for (String synonym : original.getSynonyms()) { synonyms.add(synonym); } - setSemanticZoomLevelVisibility(original.getSemanticZoomLevelVisibility()); + setVisibilityLevel(original.getVisibilityLevel()); } @@ -411,20 +411,14 @@ public class Reaction implements BioEntity { return "Generic Reaction"; } - /** - * Returns visibility level of the reaction in hierarchical view. More - * information about hierarchical view can be found in - * {@link lcsb.mapviewer.converter.graphics.AbstractImageGenerator - * AbstractImageGenerator}. - * - * @return visibility level of the reaction - */ - public int getVisibilityLevel() { - int level = 0; - for (ReactionNode node : getReactionNodes()) { - level = Math.max(level, node.getElement().getVisibilityLevel()); - } - return level; + @Override + public String getVisibilityLevel() { + return visibilityLevel; + } + + @Override + public void setVisibilityLevel(String visibilityLevel) { + this.visibilityLevel = visibilityLevel; } /** @@ -874,13 +868,13 @@ public class Reaction implements BioEntity { } @Override - public String getSemanticZoomLevelVisibility() { - return zoomLevelVisibility; - } + public void setVisibilityLevel(Integer zoomLevelVisibility) { + if (zoomLevelVisibility == null) { + this.visibilityLevel = null; + } else { + this.visibilityLevel = zoomLevelVisibility + ""; + } - @Override - public void setSemanticZoomLevelVisibility(String zoomLevelVisibility) { - this.zoomLevelVisibility = zoomLevelVisibility; } } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java index 1feda50e2c6575eb81fc83ab3f6554a4b0ba5adb..a4061e784ece8bd4de2a74faca9af258e41dad3c 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/reaction/ReactionComparator.java @@ -130,10 +130,9 @@ public class ReactionComparator implements Comparator<Reaction> { logger.debug("GeneProteinReaction different: " + arg0.getGeneProteinReaction() + ", " + arg1.getGeneProteinReaction()); return stringComparator.compare(arg0.getGeneProteinReaction(), arg1.getGeneProteinReaction()); } - if (stringComparator.compare(arg0.getSemanticZoomLevelVisibility(), arg1.getSemanticZoomLevelVisibility()) != 0) { - logger.debug( - "SemanticZoomLevelVisibility different: \"" + arg0.getSemanticZoomLevelVisibility() + "\", \"" + arg1.getSemanticZoomLevelVisibility() + "\""); - return stringComparator.compare(arg0.getSemanticZoomLevelVisibility(), arg1.getSemanticZoomLevelVisibility()); + if (stringComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()) != 0) { + logger.debug("SemanticZoomLevelVisibility different: \"" + arg0.getVisibilityLevel() + "\", \"" + arg1.getVisibilityLevel() + "\""); + return stringComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()); } IntegerComparator integerComparator = new IntegerComparator(); diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java index 01688104f11e53210eee5b9d377ef7f33ae4e006..0d419f263fe5b3cb618b46707f5e4738bcdf3b13 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/species/Element.java @@ -174,7 +174,7 @@ public abstract class Element implements BioEntity, Serializable { * @see lcsb.mapviewer.converter.graphics.AbstractImageGenerator.Params#level * AbstractImageGenerator.Params#level */ - private int visibilityLevel; + private String visibilityLevel = ""; /** * From which level element should be transparent. @@ -182,7 +182,7 @@ public abstract class Element implements BioEntity, Serializable { * @see #visibilityLevel * @see AbstractImageGenerator.Params#level */ - private int transparencyLevel; + private String transparencyLevel = ""; /** * List of search indexes that describe this element. @@ -214,11 +214,6 @@ public abstract class Element implements BioEntity, Serializable { */ private String fullName; - /** - * Zoom level visibility for semantic zooming. - */ - private String zoomLevelVisibility; - /** * Abbreviation associated with the element. */ @@ -282,7 +277,6 @@ public abstract class Element implements BioEntity, Serializable { width = original.getWidth(); height = original.getHeight(); fontSize = original.getFontSize(); - visibilityLevel = original.getVisibilityLevel(); color = original.getColor(); for (SearchIndex searchIndex : original.getSearchIndexes()) { searchIndexes.add(searchIndex.copy()); @@ -301,7 +295,8 @@ public abstract class Element implements BioEntity, Serializable { addMiriamData(original.getMiriamData()); this.abbreviation = original.getAbbreviation(); this.formula = original.getFormula(); - setSemanticZoomLevelVisibility(original.getSemanticZoomLevelVisibility()); + setVisibilityLevel(original.getVisibilityLevel()); + setTransparencyLevel(original.getTransparencyLevel()); } /** @@ -325,7 +320,6 @@ public abstract class Element implements BioEntity, Serializable { width = 0.0; height = 0.0; fontSize = DEFAULT_FONT_SIZE; - visibilityLevel = 0; color = Color.white; } @@ -661,23 +655,25 @@ public abstract class Element implements BioEntity, Serializable { this.elementId = elementId; } - /** - * @return the visibilityLevel - * @see #visibilityLevel - */ - public int getVisibilityLevel() { + @Override + public String getVisibilityLevel() { return visibilityLevel; } - /** - * @param visibilityLevel - * the visibilityLevel to set - * @see #visibilityLevel - */ - public void setVisibilityLevel(int visibilityLevel) { + @Override + public void setVisibilityLevel(String visibilityLevel) { this.visibilityLevel = visibilityLevel; } + @Override + public void setVisibilityLevel(Integer visibilityLevel) { + if (visibilityLevel == null) { + this.visibilityLevel = null; + } else { + this.visibilityLevel = visibilityLevel + ""; + } + } + /** * @return the model * @see #model @@ -755,7 +751,7 @@ public abstract class Element implements BioEntity, Serializable { * @return the transparencyLevel * @see #transparencyLevel */ - public int getTransparencyLevel() { + public String getTransparencyLevel() { return transparencyLevel; } @@ -764,7 +760,7 @@ public abstract class Element implements BioEntity, Serializable { * the transparencyLevel to set * @see #transparencyLevel */ - public void setTransparencyLevel(int transparencyLevel) { + public void setTransparencyLevel(String transparencyLevel) { this.transparencyLevel = transparencyLevel; } @@ -1092,14 +1088,4 @@ public abstract class Element implements BioEntity, Serializable { dataMining.setElement(this); } - @Override - public void setSemanticZoomLevelVisibility(String zoomLevelVisibility) { - this.zoomLevelVisibility = zoomLevelVisibility; - } - - @Override - public String getSemanticZoomLevelVisibility() { - return this.zoomLevelVisibility; - } - } \ No newline at end of file diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java index 4d6d35a87a27c1d514e467737f9eafa1d3ecd7ae..a462b0538a649343670dab32c89c2862997da132 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java @@ -140,9 +140,9 @@ public class ElementComparator implements Comparator<Element> { return doubleComparator.compare(arg0.getFontSize(), arg1.getFontSize()); } - if (integerComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()) != 0) { + if (stringComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()) != 0) { logger.debug("Visibility level different: " + arg0.getVisibilityLevel() + ", " + arg1.getVisibilityLevel()); - return integerComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()); + return stringComparator.compare(arg0.getVisibilityLevel(), arg1.getVisibilityLevel()); } if (integerComparator.compare(arg0.getColor().getRGB(), arg1.getColor().getRGB()) != 0) { @@ -189,12 +189,6 @@ public class ElementComparator implements Comparator<Element> { return stringComparator.compare(arg0.getFormula(), arg1.getFormula()); } - if (stringComparator.compare(arg0.getSemanticZoomLevelVisibility(), arg1.getSemanticZoomLevelVisibility()) != 0) { - logger.debug( - "SemanticZoomLevelVisibility different: \"" + arg0.getSemanticZoomLevelVisibility() + "\", \"" + arg1.getSemanticZoomLevelVisibility() + "\""); - return stringComparator.compare(arg0.getSemanticZoomLevelVisibility(), arg1.getSemanticZoomLevelVisibility()); - } - StringSetComparator stringSetComparator = new StringSetComparator(); StringListComparator stringListComparator = new StringListComparator(); diff --git a/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java index 7f4a97b6ba7aa1d77b9c8449063b86c101c1ca20..3df3ef0c801f092b454fb9b6c0f2ccf5a1067403 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/compartment/CompartmentComparatorTest.java @@ -117,7 +117,7 @@ public class CompartmentComparatorTest { result.setHeight(5); result.setFontSize(9.0); result.setColor(Color.BLUE); - result.setVisibilityLevel(14); + result.setVisibilityLevel("14"); result.setThickness(998); result.setOuterWidth(45); result.setInnerWidth(65); diff --git a/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionTest.java b/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionTest.java index a7d39db9e7bcbecef1e5d9226d0d35b3c53118c1..36bbc7596e415ae3634f1080a0e734fb2ca7d990 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/reaction/ReactionTest.java @@ -229,15 +229,10 @@ public class ReactionTest extends ModelTestFunctions { public void testVisibilityLevel() { try { Reaction reaction1 = new Reaction(); - assertEquals(0, reaction1.getVisibilityLevel()); - - Reactant reactant = new Reactant(); - Element protein = new GenericProtein("id_xyz"); - protein.setVisibilityLevel(2); - reactant.setElement(protein); - reaction1.addReactant(reactant); - - assertEquals(2, reaction1.getVisibilityLevel()); + assertEquals(null, reaction1.getVisibilityLevel()); + + reaction1.setVisibilityLevel(1); + assertEquals("1", reaction1.getVisibilityLevel()); } catch (Exception e) { e.printStackTrace(); throw e; diff --git a/model/src/test/java/lcsb/mapviewer/model/map/species/ComplexComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/species/ComplexComparatorTest.java index 651379e21f9f04acf89d8eaaeec58922d52add9f..907dfeeef5ca93a46aa8d67aea5dd8934cdda857 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/species/ComplexComparatorTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/species/ComplexComparatorTest.java @@ -56,7 +56,7 @@ public class ComplexComparatorTest { result.setHeight(5); result.setFontSize(9.0); result.setColor(Color.BLUE); - result.setVisibilityLevel(14); + result.setVisibilityLevel("14"); Species protein = new GenericProtein("S"); protein.setName("a"); diff --git a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java index 78ee89782a7464f5f967829c38667379c3e628e7..540521afd217b44962885bf4db98f4d3226cd586 100644 --- a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java +++ b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementTest.java @@ -145,7 +145,7 @@ public class ElementTest extends ModelTestFunctions { Set<MiriamData> miriamData = new HashSet<>(); Compartment compartment = new Compartment("idd"); int id = 72; - int transparencyLevel = 2; + String transparencyLevel = "2"; Model model = new ModelFullIndexed(modelData); List<SearchIndex> indexes = new ArrayList<>(); indexes.add(new SearchIndex()); diff --git a/persist/src/db/11/fix_db_20170628.sql b/persist/src/db/11/fix_db_20170628.sql new file mode 100644 index 0000000000000000000000000000000000000000..6f033cadda30017e2c61c7140b918ae90da80c29 --- /dev/null +++ b/persist/src/db/11/fix_db_20170628.sql @@ -0,0 +1,8 @@ +-- semantic zooming +alter table element_table drop column zoomlevelvisibility ; +alter table reaction_table drop column zoomlevelvisibility ; + +ALTER TABLE element_table ALTER COLUMN visibilitylevel TYPE character varying; +ALTER TABLE element_table ALTER COLUMN transparencylevel TYPE character varying; + +alter table reaction_table add column visibilitylevel character varying default null; \ No newline at end of file diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java index ae8fcff5f13ee70d55bbf096d32dcb6fc20a01ae..c502dcc85378075d9e2bc4b94073a383e1d8b59c 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -662,10 +662,10 @@ public class ProjectService implements IProjectService { int level = Integer.valueOf(levelStr); Model output = new CopyCommand(model).execute(); for (BioEntity bioEntity : output.getAnnotatedObjects()) { - if (matcher.matchLevel(level, bioEntity.getSemanticZoomLevelVisibility())) { - bioEntity.setSemanticZoomLevelVisibility(null); + if (matcher.isVisible(level, bioEntity.getVisibilityLevel())) { + bioEntity.setVisibilityLevel("0"); } else { - bioEntity.setSemanticZoomLevelVisibility(Integer.MAX_VALUE + ""); + bioEntity.setVisibilityLevel(Integer.MAX_VALUE + ""); } } return output; diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java b/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java index 35f74ed3cc4ac6d82f9f43deed678eb75a5468d3..e4898431923acb28d1ecc1aaec65dd33de348946 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/SearchService.java @@ -18,6 +18,7 @@ import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.exception.InvalidArgumentException; import lcsb.mapviewer.common.exception.InvalidClassException; import lcsb.mapviewer.common.exception.InvalidStateException; +import lcsb.mapviewer.converter.graphics.bioEntity.SemanticZoomLevelMatcher; import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.MiriamData; import lcsb.mapviewer.model.map.MiriamType; @@ -64,6 +65,8 @@ import lcsb.mapviewer.services.utils.SearchIndexer; @Transactional(value = "txManager") public class SearchService implements ISearchService { + private SemanticZoomLevelMatcher zoomLevelMatcher = new SemanticZoomLevelMatcher(); + /** * Prefix used in search by name interface to limit results only to species. */ @@ -447,7 +450,7 @@ public class SearchService implements ISearchService { if (params.getLevel() == null || params.getLayoutIdentfier() == null) { return true; } - return (!params.isNested()) || alias.getVisibilityLevel() <= params.getLevel(); + return (!params.isNested()) || zoomLevelMatcher.isVisible(params.getLevel(), alias.getVisibilityLevel()); } @Override diff --git a/service/src/main/java/lcsb/mapviewer/services/search/data/FullAliasView.java b/service/src/main/java/lcsb/mapviewer/services/search/data/FullAliasView.java index 10edf3b3656fcfa9f6055bef5af272e0310727b4..3fdec74966cd3d723b2b40340ada9cd3328cb9d2 100644 --- a/service/src/main/java/lcsb/mapviewer/services/search/data/FullAliasView.java +++ b/service/src/main/java/lcsb/mapviewer/services/search/data/FullAliasView.java @@ -147,7 +147,7 @@ public class FullAliasView extends LightAliasView implements IHeavyView { */ private Integer initialAmount = null; - private Integer visibilityLevel = null; + private String visibilityLevel = null; /** * Initial concentration of species. @@ -617,15 +617,16 @@ public class FullAliasView extends LightAliasView implements IHeavyView { * @return the visibilityLevel * @see #visibilityLevel */ - public Integer getVisibilityLevel() { + public String getVisibilityLevel() { return visibilityLevel; } /** - * @param visibilityLevel the visibilityLevel to set + * @param visibilityLevel + * the visibilityLevel to set * @see #visibilityLevel */ - public void setVisibilityLevel(Integer visibilityLevel) { + public void setVisibilityLevel(String visibilityLevel) { this.visibilityLevel = visibilityLevel; } } diff --git a/service/src/main/java/lcsb/mapviewer/services/search/data/FullReactionView.java b/service/src/main/java/lcsb/mapviewer/services/search/data/FullReactionView.java index 31dbe84374e1c1d63d20da2f1329f567b461e519..94ed82542ee2bb43daf8b65f6903adcd8f39b7fa 100644 --- a/service/src/main/java/lcsb/mapviewer/services/search/data/FullReactionView.java +++ b/service/src/main/java/lcsb/mapviewer/services/search/data/FullReactionView.java @@ -126,7 +126,7 @@ public class FullReactionView extends LightReactionView implements IHeavyView { */ private Map<String, Object> other = new HashMap<>(); - private Integer visibilityLevel = null; + private String visibilityLevel = null; /** * Default constructor with localization passed in the argument. @@ -426,7 +426,7 @@ public class FullReactionView extends LightReactionView implements IHeavyView { * @return the visibilityLevel * @see #visibilityLevel */ - public Integer getVisibilityLevel() { + public String getVisibilityLevel() { return visibilityLevel; } @@ -434,7 +434,7 @@ public class FullReactionView extends LightReactionView implements IHeavyView { * @param visibilityLevel the visibilityLevel to set * @see #visibilityLevel */ - public void setVisibilityLevel(Integer visibilityLevel) { + public void setVisibilityLevel(String visibilityLevel) { this.visibilityLevel = visibilityLevel; }