From 9cde97803b7739d0789f03a57ebc40e08d7b6297 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 31 Oct 2018 15:25:34 +0100 Subject: [PATCH] custom semantic zooming is always processed --- .../src/main/js/gui/admin/AddProjectDialog.js | 15 - .../src/main/js/map/data/UserPreferences.js | 3 - .../js/gui/admin/AddProjectDialog-test.js | 2 - .../commands/CreateHierarchyCommand.java | 667 ++++----- .../commands/CreateHierarchyCommandTest.java | 70 + .../testFiles/custom_semantic_zooming.xml | 1195 +++++++++++++++++ .../api/projects/ProjectRestImpl.java | 1 - .../services/impl/ProjectService.java | 26 +- .../services/utils/CreateProjectParams.java | 14 - .../services/utils/data/BuildInLayout.java | 1 - .../services/impl/ProjectServiceTest.java | 1 - 11 files changed, 1614 insertions(+), 381 deletions(-) create mode 100644 model-command/testFiles/custom_semantic_zooming.xml diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js index 4655bf308c..b33a5ef53a 100644 --- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js @@ -286,11 +286,6 @@ AddProjectDialog.prototype.createGeneralTabContent = function () { help: 'If this checkbox is checked, the uploaded model will be displayed in SBGN format, instead of default ' + 'CellDesigner format.' })); - table.appendChild(self.createCheckboxRow({ - labelName: "Custom semantic zooming:", - defaultValue: false, - inputName: "project-semantic-zooming" - })); table.appendChild(self.createCheckboxRow({ labelName: "Custom semantic zooming contains multiple overlays:", defaultValue: false, @@ -709,7 +704,6 @@ AddProjectDialog.prototype.init = function () { self.bindProjectUploadPreferences(user, "autoResize", "project-auto-margin"); self.bindProjectUploadPreferences(user, "validateMiriam", "project-verify-annotations"); self.bindProjectUploadPreferences(user, "cacheData", "project-cache-data"); - self.bindProjectUploadPreferences(user, "semanticZooming", "project-semantic-zooming"); self.bindProjectUploadPreferences(user, "semanticZoomingContainsMultipleOverlays", "project-semantic-zooming-contains-multiple-overlays"); self.bindProjectUploadPreferences(user, "sbgn", "project-sbgn-visualization"); }); @@ -1072,14 +1066,6 @@ AddProjectDialog.prototype.isSbgn = function () { return $("[name='project-sbgn-visualization']", this.getElement()).is(':checked'); }; -/** - * - * @returns {boolean} - */ -AddProjectDialog.prototype.isSemanticZooming = function () { - return $("[name='project-semantic-zooming']", this.getElement()).is(':checked'); -}; - /** * * @returns {boolean} @@ -1158,7 +1144,6 @@ AddProjectDialog.prototype.onSaveClicked = function () { "organism": self.getOrganism(), "mapCanvasType": self.getMapCanvasTypeId(), "sbgn": self.isSbgn(), - "semantic-zoom": self.isSemanticZooming(), "semantic-zoom-contains-multiple-layouts": self.isSemanticZoomingContainsMultipleOverlays(), "annotate": self.isAnnotateAutomatically(), "verify-annotations": self.isVerifyAnnotations(), diff --git a/frontend-js/src/main/js/map/data/UserPreferences.js b/frontend-js/src/main/js/map/data/UserPreferences.js index fba86c1bec..427e7a06c8 100644 --- a/frontend-js/src/main/js/map/data/UserPreferences.js +++ b/frontend-js/src/main/js/map/data/UserPreferences.js @@ -56,7 +56,6 @@ UserPreferences.prototype.update = function (userPreferences) { * @param {boolean} projectUpload.validate-miriam * @param {boolean} projectUpload.validate-miriam * @param {boolean} projectUpload.cache-data - * @param {boolean} projectUpload.semantic-zooming * @param {boolean} projectUpload.sbgn */ UserPreferences.prototype.setProjectUpload = function (projectUpload) { @@ -65,7 +64,6 @@ UserPreferences.prototype.setProjectUpload = function (projectUpload) { validateMiriam: projectUpload["validate-miriam"], annotateModel: projectUpload["annotate-model"], cacheData: projectUpload["cache-data"], - semanticZooming: projectUpload["semantic-zooming"], semanticZoomingContainsMultipleOverlays: projectUpload["semantic-zooming-contains-multiple-overlays"], sbgn: projectUpload["sbgn"] }; @@ -183,7 +181,6 @@ UserPreferences.prototype.toExport = function () { "annotate-model": this._projectUpload.annotateModel, "cache-data": this._projectUpload.cacheData, "sbgn": this._projectUpload.sbgn, - "semantic-zooming": this._projectUpload.semanticZooming, "semantic-zooming-contains-multiple-overlays":this._projectUpload.semanticZoomingContainsMultipleOverlays }, "element-annotators": this._elementAnnotators, diff --git a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js index 65a5fcdffd..255f09191d 100644 --- a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js +++ b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js @@ -153,8 +153,6 @@ describe('AddProjectDialog', function () { assert.ok(options["sbgn"] !== undefined); assert.ok(options["version"] !== undefined); - assert.ok(options["semantic-zoom"] !== undefined); - assert.ok(projectAdded); }).finally(function () { return dialog.destroy(); 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 57800a7e4f..7c8d040e7d 100644 --- a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java +++ b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java @@ -6,12 +6,12 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.log4j.Logger; import lcsb.mapviewer.common.Configuration; import lcsb.mapviewer.common.exception.InvalidStateException; import lcsb.mapviewer.common.exception.NotImplementedException; -import lcsb.mapviewer.model.map.BioEntity; import lcsb.mapviewer.model.map.compartment.Compartment; import lcsb.mapviewer.model.map.compartment.PathwayCompartment; import lcsb.mapviewer.model.map.layout.graphics.Layer; @@ -31,355 +31,368 @@ import lcsb.mapviewer.model.map.species.Species; * */ public class CreateHierarchyCommand extends ModelCommand { - /** - * Default class logger. - */ - @SuppressWarnings("unused") - private static Logger logger = Logger.getLogger(CreateHierarchyCommand.class); - /** - * Natural logarithm of four. - */ - private static final double LOG_4 = Math.log(4); + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private static Logger logger = Logger.getLogger(CreateHierarchyCommand.class); + /** + * Natural logarithm of four. + */ + private static final double LOG_4 = Math.log(4); - /** - * Top left corner x coordinate of the text associated with compratment. - */ - private static final double DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT = 10; - /** - * Top left corner y coordinate of the text associated with compratment. - */ - private static final double DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT = 10; + /** + * Top left corner x coordinate of the text associated with compratment. + */ + private static final double DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT = 10; + /** + * Top left corner y coordinate of the text associated with compratment. + */ + private static final double DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT = 10; - /** - * How many levels are possible. - */ - private int zoomLevels; - /** - * What is the maximum zoom factor in the view. - */ - private double maxZoomFactor; + /** + * How many levels are possible. + */ + private int zoomLevels; + /** + * What is the maximum zoom factor in the view. + */ + private double maxZoomFactor; - /** - * Default constructor that intializes data. - * - * @param model - * model on which command will be executed - * @param maxZoomFactor - * what is the maximum zoom out factor - * @param zoomLevels - * how many levels are possible - */ - public CreateHierarchyCommand(Model model, int zoomLevels, double maxZoomFactor) { - super(model); - this.zoomLevels = zoomLevels; - this.maxZoomFactor = maxZoomFactor; - } + /** + * Default constructor that initializes data. + * + * @param model + * model on which command will be executed + * @param maxZoomFactor + * what is the maximum zoom out factor + * @param zoomLevels + * how many levels are possible + */ + public CreateHierarchyCommand(Model model, int zoomLevels, double maxZoomFactor) { + super(model); + this.zoomLevels = zoomLevels; + this.maxZoomFactor = maxZoomFactor; + } - @Override - protected void undoImplementation() { - throw new NotImplementedException(); - } + @Override + protected void undoImplementation() { + throw new NotImplementedException(); + } - @Override - protected void executeImplementation() { - if (!ModelCommandStatus.CREATED.equals(getStatus()) && !ModelCommandStatus.UNDONE.equals(getStatus())) { - throw new InvalidStateException("To execute command, the command must be in CREATED or UNDONE state. " + getStatus() + " found."); - } - Model model = getModel(); - List<Species> compacts = new ArrayList<>(); - for (Element alias : model.getElements()) { - if (alias instanceof Complex) { - if (((Complex) alias).getState().contains("brief")) { - compacts.add((Species) alias); - compacts.addAll(((Complex) alias).getElements()); - } - } - } - model.getElements().removeAll(compacts); - clean(); - createArtificials(); - assignAliases(); + @Override + protected void executeImplementation() { + if (!ModelCommandStatus.CREATED.equals(getStatus()) && !ModelCommandStatus.UNDONE.equals(getStatus())) { + throw new InvalidStateException( + "To execute command, the command must be in CREATED or UNDONE state. " + getStatus() + " found."); + } + Model model = getModel(); + List<Species> compacts = new ArrayList<>(); + for (Element alias : model.getElements()) { + if (alias instanceof Complex) { + if (((Complex) alias).getState().contains("brief")) { + compacts.add((Species) alias); + compacts.addAll(((Complex) alias).getElements()); + } + } + } + model.getElements().removeAll(compacts); + clean(); + createArtificials(); + assignAliases(); - List<Element> sortedAliases = model.getElementsSortedBySize(); - setParentingAndChildreningOfNonComplexChildrens(sortedAliases); - model.getElements().addAll(compacts); - sortedAliases = model.getElementsSortedBySize(); - preSettingOfVisibilityLevel(sortedAliases, maxZoomFactor); - settingOfTransparencyLevel(sortedAliases); + List<Element> sortedAliases = model.getElementsSortedBySize(); + setParentingAndChildreningOfNonComplexChildrens(sortedAliases); + model.getElements().addAll(compacts); + sortedAliases = model.getElementsSortedBySize(); + settingOfTransparencyLevel(sortedAliases); - setStatus(ModelCommandStatus.EXECUTED); - } + setDefaultVisibilityLevel(sortedAliases); - @Override - protected void redoImplementation() { - throw new NotImplementedException(); - } + setStatus(ModelCommandStatus.EXECUTED); + } - /** - * Cleans hierarchical information from the model. - */ - protected void clean() { - for (Element alias : getModel().getElements()) { - alias.setCompartment(null); - alias.setTransparencyLevel(""); - } - for (BioEntity bioEntity : getModel().getBioEntities()) { - bioEntity.setVisibilityLevel("0"); - } - Set<Compartment> toRemove = new HashSet<>(); - for (Compartment alias : getModel().getCompartments()) { - if (alias instanceof PathwayCompartment) { - toRemove.add(alias); - } - } - for (Compartment alias : toRemove) { - getModel().removeElement(alias); - } - } + private void setDefaultVisibilityLevel(List<Element> sortedAliases) { + for (Element element: sortedAliases) { + if (element.getVisibilityLevel()==null||element.getVisibilityLevel().isEmpty()) { + element.setVisibilityLevel(0); + } + } + } - /** - * Creates artifitial compartment alias for rectangles and texts object on - * additional graphic layers. - */ - private void createArtificials() { - Model model = getModel(); - int id = 0; - for (Layer layer : model.getLayers()) { - for (LayerRect rect : layer.getRectangles()) { - PathwayCompartment alias = new PathwayCompartment("art" + (id++)); - alias.setX(rect.getX()); - alias.setY(rect.getY()); - alias.setWidth(rect.getWidth()); - alias.setHeight(rect.getHeight()); - alias.setColor(rect.getColor()); - alias.setNamePoint( - new Point2D.Double(rect.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT, rect.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT)); + @Override + protected void redoImplementation() { + throw new NotImplementedException(); + } - model.addElement(alias); - } - for (LayerText text : layer.getTexts()) { - PathwayCompartment alias = new PathwayCompartment("art" + (id++)); - alias.setX(text.getX()); - alias.setY(text.getY()); - alias.setWidth(text.getWidth()); - alias.setHeight(text.getHeight()); - alias.setColor(text.getColor()); - alias.setName(text.getNotes().trim()); - alias.setNamePoint( - new Point2D.Double(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT, text.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT)); + /** + * Cleans hierarchical information from the model. + */ + protected void clean() { + for (Element alias : getModel().getElements()) { + alias.setCompartment(null); + if (alias.getTransparencyLevel() == null || alias.getTransparencyLevel().isEmpty()) { + alias.setTransparencyLevel(""); + } + } + Set<Compartment> toRemove = new HashSet<>(); + for (Compartment alias : getModel().getCompartments()) { + if (alias instanceof PathwayCompartment) { + toRemove.add(alias); + } + } + for (Compartment alias : toRemove) { + getModel().removeElement(alias); + } + } - model.addElement(alias); + /** + * Creates artifitial compartment alias for rectangles and texts object on + * additional graphic layers. + */ + private void createArtificials() { + Model model = getModel(); + int id = 0; + for (Layer layer : model.getLayers()) { + for (LayerRect rect : layer.getRectangles()) { + PathwayCompartment alias = new PathwayCompartment("art" + (id++)); + alias.setX(rect.getX()); + alias.setY(rect.getY()); + alias.setWidth(rect.getWidth()); + alias.setHeight(rect.getHeight()); + alias.setColor(rect.getColor()); + alias.setNamePoint(new Point2D.Double(rect.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT, + rect.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT)); - } - } - } + model.addElement(alias); + } + for (LayerText text : layer.getTexts()) { + PathwayCompartment alias = new PathwayCompartment("art" + (id++)); + alias.setX(text.getX()); + alias.setY(text.getY()); + alias.setWidth(text.getWidth()); + alias.setHeight(text.getHeight()); + alias.setColor(text.getColor()); + alias.setName(text.getNotes().trim()); + alias.setNamePoint(new Point2D.Double(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT, + text.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT)); - /** - * Assign aliases in hierarchical structure. - */ - private void assignAliases() { - assignToCompartments(); - } + model.addElement(alias); - /** - * Computes visibility levels for aliases based on the size. - * - * @param sortedAliases - * list of aliases - * @param maxZoomFactor - * max scale used on the map - */ - private void preSettingOfVisibilityLevel(List<Element> sortedAliases, double maxZoomFactor) { - for (Element alias : sortedAliases) { - double rate = computeRate(alias, Configuration.MIN_VISIBLE_OBJECT_SIZE); - int logValue = (int) ((int) Math.ceil(Math.log(rate)) / LOG_4); - boolean hasCompartment = alias.getCompartment() != null; - boolean hasComplex = false; - if (alias instanceof Species) { - hasComplex = ((Species) alias).getComplex() != null; - } - if (!hasCompartment && !hasComplex) { - logValue = 0; - } - if (logValue >= zoomLevels) { - if (hasComplex) { - logValue = zoomLevels - 1; - } else { - logValue = zoomLevels; - } - } - alias.setVisibilityLevel(logValue + ""); - } - } + } + } + } - /** - * Sets transparency level in hierarchical view for compartment alias. - * - * @param compartment - * comaprtment alias - */ - private void settingTransparencyLevelForCompartment(Compartment compartment) { - int maxVisibilityLevel = Integer.MAX_VALUE; - 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, Integer.valueOf(child.getVisibilityLevel())); - } - if (maxVisibilityLevel >= zoomLevels) { - maxVisibilityLevel = zoomLevels; - } - if (maxVisibilityLevel <= 0) { - maxVisibilityLevel = 1; - } - compartment.setTransparencyLevel(maxVisibilityLevel + ""); - for (Element child : compartment.getElements()) { - child.setVisibilityLevel(compartment.getTransparencyLevel()); - } - } + /** + * Assign aliases in hierarchical structure. + */ + private void assignAliases() { + assignToCompartments(); + } - /** - * Sets transparency level in hierarchical view for complex alias. - * - * @param complex - * complex alias - */ - private void settingTransparencyLevelForComplex(Complex complex) { - int maxVisibilityLevel = Integer.MAX_VALUE; - 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, Integer.valueOf(child.getVisibilityLevel())); - } - if (maxVisibilityLevel >= zoomLevels) { - maxVisibilityLevel = zoomLevels; - } - if (maxVisibilityLevel <= 0) { - maxVisibilityLevel = 1; - } - complex.setTransparencyLevel(maxVisibilityLevel + ""); - for (Element child : complex.getElements()) { - child.setVisibilityLevel(complex.getTransparencyLevel()); - } - } + private int computeVisibility(Element alias) { + if (!NumberUtils.isNumber(alias.getVisibilityLevel())) { + double rate = computeRate(alias, Configuration.MIN_VISIBLE_OBJECT_SIZE); + int logValue = (int) ((int) Math.ceil(Math.log(rate)) / LOG_4); + boolean hasCompartment = alias.getCompartment() != null; + boolean hasComplex = false; + if (alias instanceof Species) { + hasComplex = ((Species) alias).getComplex() != null; + } + if (!hasCompartment && !hasComplex) { + logValue = 0; + } + if (logValue >= zoomLevels) { + if (hasComplex) { + logValue = zoomLevels - 1; + } else { + logValue = zoomLevels; + } + } + return logValue; + } else { + return Integer.valueOf(alias.getVisibilityLevel()); + } + } - /** - * Sets transparency level in hierarchical view for all elements. - * - * @param sortedAliases - * list of aliases - */ - private void settingOfTransparencyLevel(List<Element> sortedAliases) { - for (Element alias : sortedAliases) { - if (alias instanceof Compartment) { - settingTransparencyLevelForCompartment((Compartment) alias); - } else if (alias instanceof Complex) { - settingTransparencyLevelForComplex((Complex) alias); - } else { - alias.setTransparencyLevel("0"); - } - } - } + /** + * Sets transparency level in hierarchical view for compartment alias. + * + * @param compartment + * compartment alias + */ + private void settingTransparencyLevelForCompartment(Compartment compartment) { + if (compartment.getTransparencyLevel() == null || compartment.getTransparencyLevel().isEmpty()) { + int maxVisibilityLevel = Integer.MAX_VALUE; + 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, Integer.valueOf(computeVisibility(child))); + } + if (maxVisibilityLevel >= zoomLevels) { + maxVisibilityLevel = zoomLevels; + } + if (maxVisibilityLevel <= 0) { + maxVisibilityLevel = 1; + } + compartment.setTransparencyLevel(maxVisibilityLevel + ""); + } + for (Element child : compartment.getElements()) { + if (child.getVisibilityLevel() == null || child.getVisibilityLevel().isEmpty()) { + child.setVisibilityLevel(compartment.getTransparencyLevel()); + } + } + } - /** - * Removes invalid compartment children. - * - * @param sortedAliases - * list of aliases - */ - private void setChildrening(List<Element> sortedAliases) { - for (Element compartment : sortedAliases) { - if (compartment instanceof Compartment) { - Set<Element> removable = new HashSet<>(); - for (Element alias : ((Compartment) compartment).getElements()) { - if (alias.getCompartment() != compartment) { - removable.add(alias); - } - } - ((Compartment) compartment).getElements().removeAll(removable); - } - } - } + /** + * Sets transparency level in hierarchical view for complex alias. + * + * @param complex + * complex alias + */ + private void settingTransparencyLevelForComplex(Complex complex) { + if (complex.getTransparencyLevel() == null || complex.getTransparencyLevel().isEmpty()) { + int maxVisibilityLevel = Integer.MAX_VALUE; + 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, Integer.valueOf(computeVisibility(child))); + } + if (maxVisibilityLevel >= zoomLevels) { + maxVisibilityLevel = zoomLevels; + } + if (maxVisibilityLevel <= 0) { + maxVisibilityLevel = 1; + } + complex.setTransparencyLevel(maxVisibilityLevel + ""); + } + for (Element child : complex.getElements()) { + if (child.getVisibilityLevel() == null || child.getVisibilityLevel().isEmpty()) { + child.setVisibilityLevel(complex.getTransparencyLevel()); + } + } + } - /** - * Sets parent for elements. - * - * @param sortedAliases - * list of aliases - */ - private void setParentingOfNonComplexChildrens(List<Element> sortedAliases) { - for (Element element : getModel().getElements()) { - if (element.getCompartment() == null) { - for (Element compartment : sortedAliases) { - if (compartment instanceof Compartment) { - if (((Compartment) compartment).getElements().contains(element)) { - element.setCompartment((Compartment) compartment); - } - } - } + /** + * Sets transparency level in hierarchical view for all elements. + * + * @param sortedAliases + * list of aliases + */ + private void settingOfTransparencyLevel(List<Element> sortedAliases) { + for (Element alias : sortedAliases) { + if (alias instanceof Compartment) { + settingTransparencyLevelForCompartment((Compartment) alias); + } else if (alias instanceof Complex) { + settingTransparencyLevelForComplex((Complex) alias); + } else { + if (alias.getTransparencyLevel() == null || alias.getTransparencyLevel().isEmpty()) { + alias.setTransparencyLevel("0"); + } + } + } + } - } - if (element instanceof Species) { - Species species = (Species) element; - if (species.getComplex() == null) { - for (Element complex : sortedAliases) { - if (complex instanceof Complex) { - if (((Complex) complex).getElements().contains(element)) { - species.setComplex((Complex) complex); - } - } - } - } - } - } - } + /** + * Removes invalid compartment children. + * + * @param sortedAliases + * list of aliases + */ + private void setChildrening(List<Element> sortedAliases) { + for (Element compartment : sortedAliases) { + if (compartment instanceof Compartment) { + Set<Element> removable = new HashSet<>(); + for (Element alias : ((Compartment) compartment).getElements()) { + if (alias.getCompartment() != compartment) { + removable.add(alias); + } + } + ((Compartment) compartment).getElements().removeAll(removable); + } + } + } - /** - * Set parents for the elements in hierarchical view. - * - * @param sortedAliases - * list of aliases - */ - private void setParentingAndChildreningOfNonComplexChildrens(List<Element> sortedAliases) { - setParentingOfNonComplexChildrens(sortedAliases); - setChildrening(sortedAliases); - } + /** + * Sets parent for elements. + * + * @param sortedAliases + * list of aliases + */ + private void setParentingOfNonComplexChildrens(List<Element> sortedAliases) { + for (Element element : getModel().getElements()) { + if (element.getCompartment() == null) { + for (Element compartment : sortedAliases) { + if (compartment instanceof Compartment) { + if (((Compartment) compartment).getElements().contains(element)) { + element.setCompartment((Compartment) compartment); + } + } + } - /** - * Assign aliases to compartments. - */ - private void assignToCompartments() { - Compartment nullCompartment = new Compartment("null"); - nullCompartment.setWidth(Double.MAX_VALUE); - nullCompartment.setHeight(Double.MAX_VALUE); - for (Element element : getModel().getElements()) { - Compartment supposedParent = nullCompartment; - for (Compartment alias : getModel().getCompartments()) { - if (alias.contains(element) && alias.getSize() < supposedParent.getSize()) { - supposedParent = alias; - } - } - if (supposedParent != nullCompartment) { - supposedParent.addElement(element); - } - } - } + } + if (element instanceof Species) { + Species species = (Species) element; + if (species.getComplex() == null) { + for (Element complex : sortedAliases) { + if (complex instanceof Complex) { + if (((Complex) complex).getElements().contains(element)) { + species.setComplex((Complex) complex); + } + } + } + } + } + } + } - /** - * Computes the ratio between the minimal object that should be visible, and - * alias visible on the top level. - * - * @param alias - * alias for which computation is done - * @param limit - * size of the minimal visibe object - * @return ratio between the minimal object that should be visible, and alias - * visible on the top level - */ - private double computeRate(Element alias, double limit) { - double length = alias.getWidth() / maxZoomFactor; - double height = alias.getHeight() / maxZoomFactor; - double size = length * height; - return (double) Math.ceil(limit / size); - } + /** + * Set parents for the elements in hierarchical view. + * + * @param sortedAliases + * list of aliases + */ + private void setParentingAndChildreningOfNonComplexChildrens(List<Element> sortedAliases) { + setParentingOfNonComplexChildrens(sortedAliases); + setChildrening(sortedAliases); + } + + /** + * Assign aliases to compartments. + */ + private void assignToCompartments() { + Compartment nullCompartment = new Compartment("null"); + nullCompartment.setWidth(Double.MAX_VALUE); + nullCompartment.setHeight(Double.MAX_VALUE); + for (Element element : getModel().getElements()) { + Compartment supposedParent = nullCompartment; + for (Compartment alias : getModel().getCompartments()) { + if (alias.contains(element) && alias.getSize() < supposedParent.getSize()) { + supposedParent = alias; + } + } + if (supposedParent != nullCompartment) { + supposedParent.addElement(element); + } + } + } + + /** + * Computes the ratio between the minimal object that should be visible, and + * alias visible on the top level. + * + * @param alias + * alias for which computation is done + * @param limit + * size of the minimal visible object + * @return ratio between the minimal object that should be visible, and alias + * visible on the top level + */ + private double computeRate(Element alias, double limit) { + double length = alias.getWidth() / maxZoomFactor; + double height = alias.getHeight() / maxZoomFactor; + double size = length * height; + return (double) Math.ceil(limit / size); + } } 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 7047e09410..87f960d795 100644 --- a/model-command/src/test/java/lcsb/mapviewer/commands/CreateHierarchyCommandTest.java +++ b/model-command/src/test/java/lcsb/mapviewer/commands/CreateHierarchyCommandTest.java @@ -9,7 +9,9 @@ import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; @@ -25,6 +27,7 @@ import lcsb.mapviewer.model.map.compartment.PathwayCompartment; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.model.map.species.Species; +import lcsb.mapviewer.modelutils.map.ElementUtils; public class CreateHierarchyCommandTest extends CommandTestFunctions { Logger logger = Logger.getLogger(CreateHierarchyCommandTest.class); @@ -304,4 +307,71 @@ public class CreateHierarchyCommandTest extends CommandTestFunctions { } } + @Test + public void testHierarchyWithCustomSemanticZooming() throws Exception { + try { + Model model = getModelForFile("testFiles/custom_semantic_zooming.xml", false); + + Map<Element, String> visibilityLevels = new HashMap<>(); + for (Element element : model.getElements()) { + if (element.getVisibilityLevel() != null && !element.getVisibilityLevel().isEmpty()) { + visibilityLevels.put(element, element.getVisibilityLevel()); + } + } + + new CreateHierarchyCommand(model, 4, 80).execute(); + + for (Element element : model.getElements()) { + if (visibilityLevels.get(element) != null) { + assertEquals("Visibility level changed, but shouldn't", visibilityLevels.get(element), + element.getVisibilityLevel()); + } + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Test + public void testHierarchyWithCustomSemanticZoomingPathwayLevels() throws Exception { + try { + ElementUtils eu = new ElementUtils(); + Model model = getModelForFile("testFiles/custom_semantic_zooming.xml", false); + + Map<Element, String> visibilityLevels = new HashMap<>(); + for (Element element : model.getElements()) { + if (element.getVisibilityLevel() != null && !element.getVisibilityLevel().isEmpty()) { + visibilityLevels.put(element, element.getVisibilityLevel()); + } + } + + new CreateHierarchyCommand(model, 4, 80).execute(); + + for (Element element : model.getElements()) { + if (visibilityLevels.get(element) == null) { + int visibilityLevel = Integer.parseInt(element.getVisibilityLevel()); + if (element.getCompartment() != null) { + int parentTransparency = Integer.parseInt(element.getCompartment().getTransparencyLevel()); + assertEquals( + eu.getElementTag(element) + eu.getElementTag(element.getCompartment()) + + "Element should be directly visible when parent is transparent", + parentTransparency, visibilityLevel); + } else if (element instanceof Species) { + int parentTransparency = Integer.parseInt(((Species) element).getComplex().getTransparencyLevel()); + assertEquals( + eu.getElementTag(element) + eu.getElementTag(((Species) element).getComplex()) + + "Element should be directly visible when parent is transparent", + parentTransparency, visibilityLevel); + } + } + } + + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + } diff --git a/model-command/testFiles/custom_semantic_zooming.xml b/model-command/testFiles/custom_semantic_zooming.xml new file mode 100644 index 0000000000..736899cb21 --- /dev/null +++ b/model-command/testFiles/custom_semantic_zooming.xml @@ -0,0 +1,1195 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level2/version4" xmlns:celldesigner="http://www.sbml.org/2001/ns/celldesigner" level="2" version="4"> +<model metaid="untitled" id="untitled"> +<annotation> +<celldesigner:extension> +<celldesigner:modelVersion>4.0</celldesigner:modelVersion> +<celldesigner:modelDisplay sizeX="2500" sizeY="2000"/> +<celldesigner:listOfCompartmentAliases> +<celldesigner:compartmentAlias id="ca1" compartment="c1"> +<celldesigner:class>SQUARE</celldesigner:class> +<celldesigner:bounds x="1495.0" y="85.0" w="550.0" h="440.0"/> +<celldesigner:namePoint x="1944.5" y="488.5"/> +<celldesigner:doubleLine thickness="12.0" outerWidth="2.0" innerWidth="1.0"/> +<celldesigner:paint color="ffcccc00" scheme="Color"/> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:compartmentAlias> +<celldesigner:compartmentAlias id="ca2" compartment="c2"> +<celldesigner:class>SQUARE</celldesigner:class> +<celldesigner:bounds x="1140.0" y="45.0" w="1270.0" h="1315.0"/> +<celldesigner:namePoint x="1767.0" y="1308.0"/> +<celldesigner:doubleLine thickness="12.0" outerWidth="2.0" innerWidth="1.0"/> +<celldesigner:paint color="ffcccc00" scheme="Color"/> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:compartmentAlias> +<celldesigner:compartmentAlias id="ca3" compartment="c3"> +<celldesigner:class>SQUARE</celldesigner:class> +<celldesigner:bounds x="90.0" y="30.0" w="1020.0" h="1940.0"/> +<celldesigner:namePoint x="585.0" y="1933.5"/> +<celldesigner:doubleLine thickness="12.0" outerWidth="2.0" innerWidth="1.0"/> +<celldesigner:paint color="ffcccc00" scheme="Color"/> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:compartmentAlias> +<celldesigner:compartmentAlias id="ca4" compartment="c4"> +<celldesigner:class>SQUARE</celldesigner:class> +<celldesigner:bounds x="1125.0" y="1405.0" w="1310.0" h="570.0"/> +<celldesigner:namePoint x="1762.0" y="1938.5"/> +<celldesigner:doubleLine thickness="12.0" outerWidth="2.0" innerWidth="1.0"/> +<celldesigner:paint color="ffcccc00" scheme="Color"/> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:compartmentAlias> +</celldesigner:listOfCompartmentAliases> +<celldesigner:listOfComplexSpeciesAliases/> +<celldesigner:listOfSpeciesAliases> +<celldesigner:speciesAlias id="sa1" species="s1" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1525.0" y="185.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="30.0" y="100.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa3" species="s3" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1725.0" y="305.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="230.0" y="220.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa5" species="s5" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1935.0" y="305.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="440.0" y="220.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa6" species="s6" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1927.5" y="178.75" w="95.0" h="32.5"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="432.5" y="93.75"/> +<celldesigner:boxSize width="95.0" height="32.5"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffffff66" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa7" species="s7" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1940.0" y="412.5" w="70.0" h="25.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="445.0" y="327.5"/> +<celldesigner:boxSize width="70.0" height="25.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccff66" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa8" species="s8" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1530.0" y="305.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="35.0" y="220.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa9" species="s9" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1230.0" y="960.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="90.0" y="915.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa10" species="s10" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1350.0" y="955.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="210.0" y="910.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa11" species="s11" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1460.0" y="955.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="320.0" y="910.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa12" species="s12" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1570.0" y="955.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="430.0" y="910.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa13" species="s13" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1630.0" y="790.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="490.0" y="745.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa17" species="s16" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1540.0" y="445.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="45.0" y="360.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa19" species="s18" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1360.0" y="1170.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="220.0" y="1125.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa20" species="s19" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1210.0" y="790.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="70.0" y="745.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa16" species="s17" compartmentAlias="ca1"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1700.0" y="445.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="205.0" y="360.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa21" species="s20" compartmentAlias="ca3"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="850.0" y="1140.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="760.0" y="1110.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa22" species="s21" compartmentAlias="ca4"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1200.0" y="1460.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="75.0" y="55.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa23" species="s22" compartmentAlias="ca4"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1340.0" y="1580.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="215.0" y="175.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa25" species="s23" compartmentAlias="ca2"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1610.0" y="1160.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="470.0" y="1115.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +<celldesigner:speciesAlias id="sa26" species="s24" compartmentAlias="ca4"> +<celldesigner:activity>inactive</celldesigner:activity> +<celldesigner:bounds x="1540.0" y="1510.0" w="80.0" h="40.0"/> +<celldesigner:font size="12"/> +<celldesigner:view state="usual"/> +<celldesigner:usualView> +<celldesigner:innerPosition x="415.0" y="105.0"/> +<celldesigner:boxSize width="80.0" height="40.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="ffccffcc" scheme="Color"/> +</celldesigner:usualView> +<celldesigner:briefView> +<celldesigner:innerPosition x="0.0" y="0.0"/> +<celldesigner:boxSize width="80.0" height="60.0"/> +<celldesigner:singleLine width="1.0"/> +<celldesigner:paint color="3fff0000" scheme="Color"/> +</celldesigner:briefView> +<celldesigner:info state="empty" angle="-1.5707963267948966"/> +</celldesigner:speciesAlias> +</celldesigner:listOfSpeciesAliases> +<celldesigner:listOfGroups/> +<celldesigner:listOfProteins> +<celldesigner:protein id="pr1" name="BID" type="GENERIC"/> +<celldesigner:protein id="pr3" name="BAD" type="GENERIC"/> +<celldesigner:protein id="pr5" name="DAD" type="GENERIC"/> +<celldesigner:protein id="pr6" name="B" type="GENERIC"/> +<celldesigner:protein id="pr7" name="AAA" type="GENERIC"/> +<celldesigner:protein id="pr8" name="AA0" type="GENERIC"/> +<celldesigner:protein id="pr9" name="AA1" type="GENERIC"/> +<celldesigner:protein id="pr10" name="AA3" type="GENERIC"/> +<celldesigner:protein id="pr11" name="empty" type="GENERIC"/> +<celldesigner:protein id="pr12" name="ST1" type="GENERIC"/> +<celldesigner:protein id="pr14" name="T1" type="GENERIC"/> +<celldesigner:protein id="pr15" name="S2T2" type="GENERIC"/> +<celldesigner:protein id="pr13" name="S0T1" type="GENERIC"/> +<celldesigner:protein id="pr16" name="S2" type="GENERIC"/> +<celldesigner:protein id="pr17" name="TL0" type="GENERIC"/> +<celldesigner:protein id="pr18" name="TL1" type="GENERIC"/> +<celldesigner:protein id="pr19" name="S0" type="GENERIC"/> +<celldesigner:protein id="pr20" name="T2" type="GENERIC"/> +</celldesigner:listOfProteins> +<celldesigner:listOfGenes> +<celldesigner:gene id="gn1" name="E" type="GENE"> +<celldesigner:listOfRegions> +<celldesigner:region id="tr1" name="Ee" size="0.2" pos="0.03" type="CodingRegion" active="false"/> +<celldesigner:region id="tr2" name="Ef" size="0.16" pos="0.26999999999999996" type="CodingRegion" active="false"/> +<celldesigner:region id="tr3" name="Eg" size="0.1" pos="0.46" type="transcriptionStartingSiteL" active="false"/> +<celldesigner:region id="tr4" name="Eh" size="0.1" pos="0.72" type="transcriptionStartingSiteR" active="false"/> +</celldesigner:listOfRegions> +</celldesigner:gene> +</celldesigner:listOfGenes> +<celldesigner:listOfRNAs/> +<celldesigner:listOfAntisenseRNAs/> +<celldesigner:listOfLayers> +<celldesigner:layer id="1" name="Layer0001" locked="false" visible="true"> +<celldesigner:listOfTexts> +<celldesigner:layerSpeciesAlias x="0.0" y="0.0"> +<celldesigner:layerNotes> +zoom1 +</celldesigner:layerNotes> +<celldesigner:bounds x="1345.0" y="72.5" w="890.0" h="515.0"/> +<celldesigner:paint color="ff000000"/> +<celldesigner:font size="11"/> +</celldesigner:layerSpeciesAlias> +<celldesigner:layerSpeciesAlias x="0.0" y="0.0"> +<celldesigner:layerNotes> +Sem +</celldesigner:layerNotes> +<celldesigner:bounds x="1210.0" y="935.0" w="480.0" h="90.0"/> +<celldesigner:paint color="ff000000"/> +<celldesigner:font size="11"/> +</celldesigner:layerSpeciesAlias> +<celldesigner:layerSpeciesAlias x="0.0" y="0.0"> +<celldesigner:layerNotes> +Tran +</celldesigner:layerNotes> +<celldesigner:bounds x="45.0" y="15.0" w="2415.0" h="1980.0"/> +<celldesigner:paint color="ff000000"/> +<celldesigner:font size="11"/> +</celldesigner:layerSpeciesAlias> +</celldesigner:listOfTexts> +</celldesigner:layer> +</celldesigner:listOfLayers> +<celldesigner:listOfBlockDiagrams/> +</celldesigner:extension> +</annotation> +<listOfUnitDefinitions> +<unitDefinition metaid="substance" id="substance" name="substance"> +<listOfUnits> +<unit metaid="CDMT00007" kind="mole"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="volume" id="volume" name="volume"> +<listOfUnits> +<unit metaid="CDMT00008" kind="litre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="area" id="area" name="area"> +<listOfUnits> +<unit metaid="CDMT00009" kind="metre" exponent="2"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="length" id="length" name="length"> +<listOfUnits> +<unit metaid="CDMT00014" kind="metre"/> +</listOfUnits> +</unitDefinition> +<unitDefinition metaid="time" id="time" name="time"> +<listOfUnits> +<unit metaid="CDMT00015" kind="second"/> +</listOfUnits> +</unitDefinition> +</listOfUnitDefinitions> +<listOfCompartments> +<compartment metaid="default" id="default" size="1" units="volume"/> +<compartment metaid="c2" id="c2" name="Cell" size="1" units="volume" outside="default"> +<annotation> +<celldesigner:extension> +<celldesigner:name>Cell</celldesigner:name> +</celldesigner:extension> +</annotation> +</compartment> +<compartment metaid="c1" id="c1" name="nucleus" size="1" units="volume" outside="c2"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 2 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:name>nucleus</celldesigner:name> +</celldesigner:extension> +</annotation> +</compartment> +<compartment metaid="c3" id="c3" name="pink" size="1" units="volume" outside="default"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 1 +TransparencyZoomLevelVisibility: 2 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:name>pink</celldesigner:name> +</celldesigner:extension> +</annotation> +</compartment> +<compartment metaid="c4" id="c4" name="black" size="1" units="volume" outside="default"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 3 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:name>black</celldesigner:name> +</celldesigner:extension> +</annotation> +</compartment> +</listOfCompartments> +<listOfSpecies> +<species metaid="s1" id="s1" name="BID" compartment="c1" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 2 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr1</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/" xmlns:bqmodel="http://biomodels.net/model-qualifiers/"> +<rdf:Description rdf:about="#s1"> +<bqmodel:isDescribedBy> +<rdf:Bag> +<rdf:li rdf:resource="urn:miriam:uniprot:Q9BXM7"/> +</rdf:Bag> +</bqmodel:isDescribedBy> +</rdf:Description> +</rdf:RDF> +</annotation> +</species> +<species metaid="s3" id="s3" name="BAD" compartment="c1" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 3 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr3</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/" xmlns:bqmodel="http://biomodels.net/model-qualifiers/"> +<rdf:Description rdf:about="#s3"> +<bqmodel:isDescribedBy> +<rdf:Bag> +<rdf:li rdf:resource="urn:miriam:hgnc:936"/> +</rdf:Bag> +</bqmodel:isDescribedBy> +<bqmodel:isDescribedBy> +<rdf:Bag> +<rdf:li rdf:resource="urn:miriam:rhea:12345"/> +</rdf:Bag> +</bqmodel:isDescribedBy> +</rdf:Description> +</rdf:RDF> +</annotation> +</species> +<species metaid="s5" id="s5" name="DAD" compartment="c1" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 0 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr5</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s6" id="s6" name="E" compartment="c1" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 3 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>GENE</celldesigner:class> +<celldesigner:geneReference>gn1</celldesigner:geneReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s7" id="s7" name="DAD" compartment="c1" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 3 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>SIMPLE_MOLECULE</celldesigner:class> +<celldesigner:name>DAD</celldesigner:name> +</celldesigner:speciesIdentity> +</celldesigner:extension> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/" xmlns:bqmodel="http://biomodels.net/model-qualifiers/"> +<rdf:Description rdf:about="#s7"> +<bqmodel:isDescribedBy> +<rdf:Bag> +<rdf:li rdf:resource="urn:miriam:rhea:21220"/> +</rdf:Bag> +</bqmodel:isDescribedBy> +</rdf:Description> +</rdf:RDF> +</annotation> +</species> +<species metaid="s8" id="s8" name="B" compartment="c1" initialAmount="0"> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr6</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s9" id="s9" name="AAA" compartment="c2" initialAmount="0"> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr7</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s10" id="s10" name="AA0" compartment="c2" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 0 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr8</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s11" id="s11" name="AA1" compartment="c2" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 1 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr9</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s12" id="s12" name="AA3" compartment="c2" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 3 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr10</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s13" id="s13" name="empty" compartment="c2" initialAmount="0"> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr11</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s16" id="s16" name="ST1" compartment="c1" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 1 +TransparencyZoomLevelVisibility: 1 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr12</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s18" id="s18" name="T1" compartment="c2" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>TransparencyZoomLevelVisibility: 1 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr14</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s19" id="s19" name="S2T2" compartment="c2" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 2 +TransparencyZoomLevelVisibility: 1 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr15</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s17" id="s17" name="S0T1" compartment="c1" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>TransparencyZoomLevelVisibility: 1 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr13</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s20" id="s20" name="S2" compartment="c3" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 2 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr16</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s21" id="s21" name="TL0" compartment="c4" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>TransparencyZoomLevelVisibility: 0 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr17</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s22" id="s22" name="TL1" compartment="c4" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>TransparencyZoomLevelVisibility: 1 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr18</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s23" id="s23" name="S0" compartment="c2" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>SemanticZoomLevelVisibility: 0 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr19</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +<species metaid="s24" id="s24" name="T2" compartment="c4" initialAmount="0"> +<notes> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title/> +</head> +<body>TransparencyZoomLevelVisibility: 2 +</body> +</html> +</notes> +<annotation> +<celldesigner:extension> +<celldesigner:positionToCompartment>inside</celldesigner:positionToCompartment> +<celldesigner:speciesIdentity> +<celldesigner:class>PROTEIN</celldesigner:class> +<celldesigner:proteinReference>pr20</celldesigner:proteinReference> +</celldesigner:speciesIdentity> +</celldesigner:extension> +</annotation> +</species> +</listOfSpecies> +<listOfReactions> +<reaction metaid="re1" id="re1" reversible="false"> +<annotation> +<celldesigner:extension> +<celldesigner:reactionType>STATE_TRANSITION</celldesigner:reactionType> +<celldesigner:baseReactants> +<celldesigner:baseReactant species="s1" alias="sa1"/> +</celldesigner:baseReactants> +<celldesigner:baseProducts> +<celldesigner:baseProduct species="s3" alias="sa3"/> +</celldesigner:baseProducts> +<celldesigner:connectScheme connectPolicy="direct" rectangleIndex="0"> +<celldesigner:listOfLineDirection> +<celldesigner:lineDirection index="0" value="unknown"/> +</celldesigner:listOfLineDirection> +</celldesigner:connectScheme> +<celldesigner:line width="1.0" color="ff000000"/> +</celldesigner:extension> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" xmlns:bqbiol="http://biomodels.net/biology-qualifiers/" xmlns:bqmodel="http://biomodels.net/model-qualifiers/"> +<rdf:Description rdf:about="#re1"> +<bqmodel:isDescribedBy> +<rdf:Bag> +<rdf:li rdf:resource="urn:miriam:rhea:16508"/> +</rdf:Bag> +</bqmodel:isDescribedBy> +</rdf:Description> +</rdf:RDF> +</annotation> +<listOfReactants> +<speciesReference metaid="CDMT00001" species="s1"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa1</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfReactants> +<listOfProducts> +<speciesReference metaid="CDMT00002" species="s3"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa3</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfProducts> +</reaction> +<reaction metaid="re4" id="re4" reversible="false"> +<annotation> +<celldesigner:extension> +<celldesigner:reactionType>REDUCED_MODULATION</celldesigner:reactionType> +<celldesigner:baseReactants> +<celldesigner:baseReactant species="s3" alias="sa3"> +<celldesigner:linkAnchor position="E"/> +</celldesigner:baseReactant> +</celldesigner:baseReactants> +<celldesigner:baseProducts> +<celldesigner:baseProduct species="s5" alias="sa5"> +<celldesigner:linkAnchor position="W"/> +</celldesigner:baseProduct> +</celldesigner:baseProducts> +<celldesigner:connectScheme connectPolicy="direct"> +<celldesigner:listOfLineDirection> +<celldesigner:lineDirection index="0" value="unknown"/> +</celldesigner:listOfLineDirection> +</celldesigner:connectScheme> +<celldesigner:line width="1.0" color="ff000000"/> +</celldesigner:extension> +</annotation> +<listOfReactants> +<speciesReference metaid="CDMT00010" species="s3"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa3</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfReactants> +<listOfProducts> +<speciesReference metaid="CDMT00011" species="s5"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa5</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfProducts> +</reaction> +<reaction metaid="re5" id="re5" reversible="false"> +<annotation> +<celldesigner:extension> +<celldesigner:reactionType>STATE_TRANSITION</celldesigner:reactionType> +<celldesigner:baseReactants> +<celldesigner:baseReactant species="s6" alias="sa6"> +<celldesigner:linkAnchor position="S"/> +</celldesigner:baseReactant> +</celldesigner:baseReactants> +<celldesigner:baseProducts> +<celldesigner:baseProduct species="s5" alias="sa5"> +<celldesigner:linkAnchor position="N"/> +</celldesigner:baseProduct> +</celldesigner:baseProducts> +<celldesigner:connectScheme connectPolicy="direct" rectangleIndex="0"> +<celldesigner:listOfLineDirection> +<celldesigner:lineDirection index="0" value="unknown"/> +</celldesigner:listOfLineDirection> +</celldesigner:connectScheme> +<celldesigner:line width="1.0" color="ff000000"/> +</celldesigner:extension> +</annotation> +<listOfReactants> +<speciesReference metaid="CDMT00012" species="s6"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa6</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfReactants> +<listOfProducts> +<speciesReference metaid="CDMT00013" species="s5"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa5</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfProducts> +</reaction> +<reaction metaid="re6" id="re6" reversible="false"> +<annotation> +<celldesigner:extension> +<celldesigner:reactionType>POSITIVE_INFLUENCE</celldesigner:reactionType> +<celldesigner:baseReactants> +<celldesigner:baseReactant species="s5" alias="sa5"> +<celldesigner:linkAnchor position="S"/> +</celldesigner:baseReactant> +</celldesigner:baseReactants> +<celldesigner:baseProducts> +<celldesigner:baseProduct species="s7" alias="sa7"> +<celldesigner:linkAnchor position="N"/> +</celldesigner:baseProduct> +</celldesigner:baseProducts> +<celldesigner:connectScheme connectPolicy="direct"> +<celldesigner:listOfLineDirection> +<celldesigner:lineDirection index="0" value="unknown"/> +</celldesigner:listOfLineDirection> +</celldesigner:connectScheme> +<celldesigner:line width="1.0" color="ff000000"/> +</celldesigner:extension> +</annotation> +<listOfReactants> +<speciesReference metaid="CDMT00005" species="s5"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa5</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfReactants> +<listOfProducts> +<speciesReference metaid="CDMT00006" species="s7"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa7</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfProducts> +</reaction> +<reaction metaid="re7" id="re7" reversible="false"> +<annotation> +<celldesigner:extension> +<celldesigner:reactionType>STATE_TRANSITION</celldesigner:reactionType> +<celldesigner:baseReactants> +<celldesigner:baseReactant species="s8" alias="sa8"/> +</celldesigner:baseReactants> +<celldesigner:baseProducts> +<celldesigner:baseProduct species="s3" alias="sa3"/> +</celldesigner:baseProducts> +<celldesigner:connectScheme connectPolicy="direct" rectangleIndex="0"> +<celldesigner:listOfLineDirection> +<celldesigner:lineDirection index="0" value="unknown"/> +</celldesigner:listOfLineDirection> +</celldesigner:connectScheme> +<celldesigner:line width="1.0" color="ff000000"/> +</celldesigner:extension> +</annotation> +<listOfReactants> +<speciesReference metaid="CDMT00003" species="s8"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa8</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfReactants> +<listOfProducts> +<speciesReference metaid="CDMT00004" species="s3"> +<annotation> +<celldesigner:extension> +<celldesigner:alias>sa3</celldesigner:alias> +</celldesigner:extension> +</annotation> +</speciesReference> +</listOfProducts> +</reaction> +</listOfReactions> +</model> +</sbml> diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java index b0d4cee6b5..0acdd3af10 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java @@ -635,7 +635,6 @@ public class ProjectRestImpl extends BaseRestImpl { params.projectName(getFirstValue(data.get("name"))); params.projectOrganism(getFirstValue(data.get("organism"))); params.sbgnFormat(getFirstValue(data.get("sbgn"))); - params.semanticZoom(getFirstValue(data.get("semantic-zoom"))); params.semanticZoomContainsMultipleLayouts(getFirstValue(data.get("semantic-zoom-contains-multiple-layouts"))); params.version(getFirstValue(data.get("version"))); params.annotations(getFirstValue(data.get("annotate"))); 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 78f9c1a5ec..10adc7f4a5 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java @@ -616,17 +616,11 @@ public class ProjectService implements IProjectService { projectDao.flush(); List<BuildInLayout> buildInLayouts = new ArrayList<>(); - BuildInLayout nested = null; - if (params.isSemanticZoom()) { - nested = BuildInLayout.SEMANTIC; - } else { - nested = BuildInLayout.NESTED; - } if (params.isNetworkLayoutAsDefault()) { buildInLayouts.add(BuildInLayout.NORMAL); - buildInLayouts.add(nested); + buildInLayouts.add(BuildInLayout.NESTED); } else { - buildInLayouts.add(nested); + buildInLayouts.add(BuildInLayout.NESTED); buildInLayouts.add(BuildInLayout.NORMAL); } buildInLayouts.add(BuildInLayout.CLEAN); @@ -645,7 +639,7 @@ public class ProjectService implements IProjectService { topLayout.setHierarchicalView(buildInLayout.isNested()); topModel.addLayout(0, topLayout); List<Layout> semanticLevelOverlays = new ArrayList<>(); - if (buildInLayout.equals(BuildInLayout.SEMANTIC) && params.isSemanticZoomContainsMultipleLayouts()) { + if (params.isSemanticZoomContainsMultipleLayouts()) { for (int i = 0; i <= topModel.getZoomLevels(); i++) { String directory = params.getProjectDir() + "/" + buildInLayout.getDirectorySuffix() + "-" + i + "-" + topModel.getId() + "/"; @@ -669,7 +663,7 @@ public class ProjectService implements IProjectService { connection.getSubmodel().setZoomLevels(generator.computeZoomLevels(connection.getSubmodel().getModel())); connection.getSubmodel().setTileSize(MapGenerator.TILE_SIZE); - if (buildInLayout.equals(BuildInLayout.SEMANTIC) && params.isSemanticZoomContainsMultipleLayouts()) { + if (params.isSemanticZoomContainsMultipleLayouts()) { for (int i = 0; i <= topModel.getZoomLevels(); i++) { String directory = params.getProjectDir() + "/" + buildInLayout.getDirectorySuffix() + "-" + i + "-" + submodelId + "/"; @@ -812,13 +806,11 @@ public class ProjectService implements IProjectService { createModel(params, project); Model originalModel = project.getModels().iterator().next().getModel(); - if (!params.isSemanticZoom()) { - new CreateHierarchyCommand(originalModel, generator.computeZoomLevels(originalModel), - generator.computeZoomFactor(originalModel)).execute(); - for (Model model : originalModel.getSubmodels()) { - new CreateHierarchyCommand(model, generator.computeZoomLevels(model), generator.computeZoomFactor(model)) - .execute(); - } + new CreateHierarchyCommand(originalModel, generator.computeZoomLevels(originalModel), + generator.computeZoomFactor(originalModel)).execute(); + for (Model model : originalModel.getSubmodels()) { + new CreateHierarchyCommand(model, generator.computeZoomLevels(model), generator.computeZoomFactor(model)) + .execute(); } addUsers(project, params); diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java index a7b7d87c1e..ca990427c6 100644 --- a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java +++ b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java @@ -63,7 +63,6 @@ public class CreateProjectParams { * Is the project a complex multi-file project. */ private boolean complex; - private boolean semanticZoom; private boolean semanticZoomContainsMultipleLayouts = false; /** @@ -782,19 +781,6 @@ public class CreateProjectParams { return this; } - public CreateProjectParams semanticZoom(boolean semanticZoom) { - this.semanticZoom = semanticZoom; - return this; - } - - public CreateProjectParams semanticZoom(String value) { - return this.semanticZoom("true".equals(value)); - } - - public boolean isSemanticZoom() { - return this.semanticZoom; - } - public CreateProjectParams semanticZoomContainsMultipleLayouts(boolean semanticZoomContainsMultipleLayouts) { this.semanticZoomContainsMultipleLayouts = semanticZoomContainsMultipleLayouts; return this; diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/data/BuildInLayout.java b/service/src/main/java/lcsb/mapviewer/services/utils/data/BuildInLayout.java index 3a54c156fb..8f30ecde59 100644 --- a/service/src/main/java/lcsb/mapviewer/services/utils/data/BuildInLayout.java +++ b/service/src/main/java/lcsb/mapviewer/services/utils/data/BuildInLayout.java @@ -32,7 +32,6 @@ public enum BuildInLayout { // * Standard visualization with hierarchical view. */ NESTED("Pathways and compartments", "_nested", null, true), // - SEMANTIC("Semantic zoom", "_semantic", null, true), /** * Clean visualization (with colors reset to black and white). */ diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java index 3c3b575db1..d743432d06 100644 --- a/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java +++ b/service/src/test/java/lcsb/mapviewer/services/impl/ProjectServiceTest.java @@ -169,7 +169,6 @@ public class ProjectServiceTest extends ServiceTestFunctions { addZipEntry(entry4).// addZipEntry(entry5).// annotations(true).// - semanticZoom(true).// images(true).// async(false).// projectDir(tmpResultDir).// -- GitLab