From: <nik...@us...> - 2015-05-01 10:16:50
|
Revision: 2272 http://sourceforge.net/p/jsbml/code/2272 Author: niko-rodrigue Date: 2015-05-01 10:16:48 +0000 (Fri, 01 May 2015) Log Message: ----------- merged from trunk until rev 2254 Revision Links: -------------- http://sourceforge.net/p/jsbml/code/2254 Modified Paths: -------------- branches/astnode2-merging-alternate/build.xml branches/astnode2-merging-alternate/core/build.xml branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/ParserManager.java branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/SBMLCoreParser.java branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLReader.java branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLWriter.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/AbstractSpatialNamedSBase.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/BoundaryCondition.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CompartmentMapping.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CoordinateReference.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/ParametricObject.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SampledField.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialConstants.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialPoints.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialSymbolReference.java branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/xml/parsers/SpatialParser.java Added Paths: ----------- branches/astnode2-merging-alternate/extensions/spatial/test/org/sbml/jsbml/xml/test/data/spatial/sampled_field.xml Removed Paths: ------------- branches/astnode2-merging-alternate/core/resources/META-INF/ Property Changed: ---------------- branches/astnode2-merging-alternate/ Index: branches/astnode2-merging-alternate =================================================================== --- branches/astnode2-merging-alternate 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate 2015-05-01 10:16:48 UTC (rev 2272) Property changes on: branches/astnode2-merging-alternate ___________________________________________________________________ Modified: svn:mergeinfo ## -1 +1 ## -/trunk:2191,2194-2195,2197-2200,2202-2206,2209-2213,2216-2220,2222,2224-2232 +/trunk:2191,2194-2195,2197-2200,2202-2206,2209-2213,2216-2220,2222,2224-2244,2246-2248,2251-2254 \ No newline at end of property Modified: branches/astnode2-merging-alternate/build.xml =================================================================== --- branches/astnode2-merging-alternate/build.xml 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/build.xml 2015-05-01 10:16:48 UTC (rev 2272) @@ -247,6 +247,7 @@ <provider classname="org.sbml.jsbml.xml.parsers.RenderParser" /> <provider classname="org.sbml.jsbml.xml.parsers.ReqParser" /> <provider classname="org.sbml.jsbml.xml.parsers.SpatialParser" /> + <provider classname="org.sbml.jsbml.xml.parsers.UncertMLXMLNodeReader" /> </service> </jar> @@ -316,6 +317,7 @@ <provider classname="org.sbml.jsbml.xml.parsers.RenderParser" /> <provider classname="org.sbml.jsbml.xml.parsers.ReqParser" /> <provider classname="org.sbml.jsbml.xml.parsers.SpatialParser" /> + <provider classname="org.sbml.jsbml.xml.parsers.UncertMLXMLNodeReader" /> </service> </jar> </target> Modified: branches/astnode2-merging-alternate/core/build.xml =================================================================== --- branches/astnode2-merging-alternate/core/build.xml 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/core/build.xml 2015-05-01 10:16:48 UTC (rev 2272) @@ -368,6 +368,7 @@ <provider classname="org.sbml.jsbml.xml.parsers.RenderParser" /> <provider classname="org.sbml.jsbml.xml.parsers.ReqParser" /> <provider classname="org.sbml.jsbml.xml.parsers.SpatialParser" /> + <provider classname="org.sbml.jsbml.xml.parsers.UncertMLXMLNodeReader" /> </service> </jar> </target> Modified: branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/ParserManager.java =================================================================== --- branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/ParserManager.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/ParserManager.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -21,8 +21,10 @@ */ package org.sbml.jsbml.xml.parsers; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.ServiceConfigurationError; import java.util.ServiceLoader; @@ -66,6 +68,15 @@ */ private Logger logger = Logger.getLogger(ParserManager.class); + private String[] parserDefaults = + {"org.sbml.jsbml.xml.parsers.UncertMLXMLNodeReader", "org.sbml.jsbml.xml.parsers.SBMLCoreParser", + "org.sbml.jsbml.xml.parsers.MathMLStaxParser", "org.sbml.jsbml.xml.parsers.ArraysParser", "org.sbml.jsbml.xml.parsers.CompParser", + "org.sbml.jsbml.xml.parsers.DistribParser", "org.sbml.jsbml.xml.parsers.DynParser", "org.sbml.jsbml.xml.parsers.FBCParser", + "org.sbml.jsbml.xml.parsers.GroupsParser", "org.sbml.jsbml.xml.parsers.L3LayoutParser", "org.sbml.jsbml.xml.parsers.LayoutParser", + "org.sbml.jsbml.xml.parsers.MultiParser", "org.sbml.jsbml.xml.parsers.QualParser", "org.sbml.jsbml.xml.parsers.RenderParser", + "org.sbml.jsbml.xml.parsers.ReqParser", "org.sbml.jsbml.xml.parsers.SpatialParser", "org.sbml.jsbml.xml.parsers.XMLNodeReader"}; + + /** * Private constructor to make sure that we have only one {@link ParserManager} per JVM. */ @@ -91,7 +102,8 @@ private void init() { // loading the ReadingParsers Iterator<ReadingParser> readingParserList = ServiceLoader.load(ReadingParser.class).iterator(); - + List<String> classNames = new ArrayList<String>(); + // TODO - each time we add one HashMap entry, check that it was not defined already // so that we notice problems as early as possible if two packages declared to take care of the same namespace @@ -102,7 +114,8 @@ if (readingParser != null) { String packageName = "core"; - + classNames.add(readingParser.getClass().getName()); + if (readingParser instanceof PackageParser) { packageName = ((PackageParser) readingParser).getPackageName(); packageParsers.put(packageName, (PackageParser) readingParser); @@ -133,6 +146,7 @@ if (writingParser != null) { String packageName = "core"; + classNames.add(writingParser.getClass().getName()); if (writingParser instanceof PackageParser) { packageName = ((PackageParser) writingParser).getPackageName(); @@ -149,7 +163,78 @@ } } + + // TODO - check the maps and add the parsers by hand if they are not present. + // prevent problems when developers are not setting properly eclipse, when jar + // files are not generated with + + for (String parserClassName : parserDefaults) { + if (! classNames.contains(parserClassName)) { + + try { + Object newInstance = Class.forName(parserClassName).newInstance(); + + if (newInstance instanceof ReadingParser) { + ReadingParser readingParser = (ReadingParser) newInstance; + + String packageName = "core"; + + if (readingParser instanceof PackageParser) { + packageName = ((PackageParser) readingParser).getPackageName(); + packageParsers.put(packageName, (PackageParser) readingParser); + } + for (String namespaceURI : readingParser.getNamespaces()) { + readingParsers.put(namespaceURI, readingParser); + namespaceToNameMap.put(namespaceURI, packageName); + } + if (readingParser instanceof WritingParser) { + for (String namespaceURI : readingParser.getNamespaces()) { + writingParsers.put(namespaceURI, (WritingParser) readingParser); + } + } + } + + if (newInstance instanceof WritingParser) + { + WritingParser writingParser = (WritingParser) newInstance; + + String packageName = "core"; + + if (writingParser instanceof PackageParser) { + packageName = ((PackageParser) writingParser).getPackageName(); + packageParsers.put(packageName, (PackageParser) writingParser); + } + + for (String namespaceURI : writingParser.getNamespaces()) { + writingParsers.put(namespaceURI, writingParser); + namespaceToNameMap.put(namespaceURI, packageName); + } + } + } catch (ClassNotFoundException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + } + } + catch (InstantiationException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + e.printStackTrace(); + } + } + catch (IllegalAccessException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + e.printStackTrace(); + } + } + } + } + + } // <br /><dependency><br /> @@ -225,6 +310,7 @@ public Map<String, ReadingParser> getReadingParsers() { Map<String, ReadingParser> clonedMap = new HashMap<String, ReadingParser>(); + List<String> classNames = new ArrayList<String>(); Iterator<ReadingParser> readingParserList = ServiceLoader.load(ReadingParser.class).iterator(); @@ -234,6 +320,8 @@ if (readingParser != null) { + classNames.add(readingParser.getClass().getName()); + for (String namespaceURI : readingParser.getNamespaces()) { clonedMap.put(namespaceURI, readingParser); } @@ -243,7 +331,44 @@ // No need to print the message again, it is printed once in the init() method } } + + for (String parserClassName : parserDefaults) { + if (! classNames.contains(parserClassName)) { + + try { + Object newInstance = Class.forName(parserClassName).newInstance(); + + if (newInstance instanceof ReadingParser) { + ReadingParser readingParser = (ReadingParser) newInstance; + + for (String namespaceURI : readingParser.getNamespaces()) { + clonedMap.put(namespaceURI, readingParser); + } + } + } catch (ClassNotFoundException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + } + } + catch (InstantiationException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + e.printStackTrace(); + } + } + catch (IllegalAccessException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + e.printStackTrace(); + } + } + } + } + return clonedMap; } @@ -255,6 +380,7 @@ public Map<String, WritingParser> getWritingParsers() { Map<String, WritingParser> clonedMap = new HashMap<String, WritingParser>(); + List<String> classNames = new ArrayList<String>(); Iterator<ReadingParser> readingParserList = ServiceLoader.load(ReadingParser.class).iterator(); @@ -264,6 +390,8 @@ if (readingParser != null && readingParser instanceof WritingParser) { + classNames.add(readingParser.getClass().getName()); + for (String namespaceURI : readingParser.getNamespaces()) { clonedMap.put(namespaceURI, (WritingParser) readingParser); } @@ -282,6 +410,8 @@ if (writingParser != null) { + classNames.add(writingParser.getClass().getName()); + for (String namespaceURI : writingParser.getNamespaces()) { clonedMap.put(namespaceURI, writingParser); } @@ -292,6 +422,41 @@ } } + for (String parserClassName : parserDefaults) { + if (! classNames.contains(parserClassName)) { + + try { + Object newInstance = Class.forName(parserClassName).newInstance(); + + if (newInstance instanceof WritingParser) { + WritingParser readingParser = (WritingParser) newInstance; + + for (String namespaceURI : readingParser.getNamespaces()) { + clonedMap.put(namespaceURI, readingParser); + } + } + } catch (ClassNotFoundException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + } + } + catch (InstantiationException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + e.printStackTrace(); + } + } + catch (IllegalAccessException e) + { + if (logger.isDebugEnabled()) { + logger.debug("problem loading class '" + parserClassName + "': " + e.getMessage()); + e.printStackTrace(); + } + } + } + } return clonedMap; } Modified: branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/SBMLCoreParser.java =================================================================== --- branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/SBMLCoreParser.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/parsers/SBMLCoreParser.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -1249,8 +1249,7 @@ @Override public void writeCharacters(SBMLObjectForXML xmlObject, Object sbmlElementToWrite) { - // The method should never be called ! - log4jLogger.warn("The SBML core XML element should not have any content, everything should be stored as attribute."); + // The SBML core XML element should not have any content, everything should be stored as attribute. } /* (non-Javadoc) Modified: branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLReader.java =================================================================== --- branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLReader.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLReader.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -695,7 +695,7 @@ if (!characters.isWhiteSpace()) { isText = true; // the characters are not only 'white spaces' } - if ((sbmlElements.peek() instanceof XMLNode) || isInsideNotes || isInsideAnnotation) { + if ((!sbmlElements.isEmpty() && (sbmlElements.peek() instanceof XMLNode)) || isInsideNotes || isInsideAnnotation) { isText = true; // We want to keep the whitespace/formatting when reading html block } Modified: branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLWriter.java =================================================================== --- branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLWriter.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/core/src/org/sbml/jsbml/xml/stax/SBMLWriter.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -1025,6 +1025,7 @@ childParser.writeElement(childXmlObject, nextObjectToWrite); childParser.writeNamespaces(childXmlObject, nextObjectToWrite); childParser.writeAttributes(childXmlObject, nextObjectToWrite); + childParser.writeCharacters(childXmlObject, nextObjectToWrite); if (!childXmlObject.isSetName()) { logger.error("XML name not set, element ignored!"); @@ -1062,6 +1063,11 @@ indent + indentCount, false); elementIsNested = isClosedAnnotation = true; } + + if (childXmlObject.getCharacters() != null && childXmlObject.getCharacters().trim().length() != 0) { + newOutPutElement.addCharacters(childXmlObject.getCharacters()); + } + if (s.getChildCount() > 0) { // make sure that we'll have line breaks if an element has any sub elements. elementIsNested = true; Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/AbstractSpatialNamedSBase.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/AbstractSpatialNamedSBase.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/AbstractSpatialNamedSBase.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -231,7 +231,7 @@ @Override public boolean readAttribute(String attributeName, String prefix, String value) { - boolean isAttributeRead = (super.readAttribute(attributeName, prefix, value)) && (SpatialConstants.shortLabel == prefix); + boolean isAttributeRead = super.readAttribute(attributeName, prefix, value); if (!isAttributeRead) { isAttributeRead = true; if (attributeName.equals(SpatialConstants.spatialId)) { Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/BoundaryCondition.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/BoundaryCondition.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/BoundaryCondition.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -329,6 +329,7 @@ if (!isAttributeRead) { isAttributeRead = true; if (attributeName.equals(SpatialConstants.type)) { + // TODO: In the specs v0.90, the type name begins with capital letter. if (!Pattern.matches("[a-z]*", value)) { throw new SBMLException("The value is not all lower-case."); } Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CompartmentMapping.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CompartmentMapping.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CompartmentMapping.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -269,8 +269,7 @@ @Override public boolean readAttribute(String attributeName, String prefix, String value) { - boolean isAttributeRead = (super.readAttribute(attributeName, prefix, value)) - && (SpatialConstants.shortLabel == prefix); + boolean isAttributeRead = super.readAttribute(attributeName, prefix, value); if (!isAttributeRead) { isAttributeRead = true; if (attributeName.equals(SpatialConstants.domainType)) { Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CoordinateReference.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CoordinateReference.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/CoordinateReference.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -23,8 +23,10 @@ import java.text.MessageFormat; import java.util.Map; +import java.util.regex.Pattern; import org.sbml.jsbml.AbstractSBase; +import org.sbml.jsbml.SBMLException; @@ -111,6 +113,15 @@ return coordinate != null; } + /** + * @param coordinate + */ + public void setCoordinate(String coordinate) { + if (!Pattern.matches("[a-z]*", coordinate)) { + throw new SBMLException("The value is not all lower-case."); + } + setCoordinate(CoordinateKind.valueOf(coordinate.toUpperCase())); + } /** * @param coordinate the coordinate to set @@ -151,7 +162,7 @@ isAttributeRead = true; if (attributeName.equals(SpatialConstants.coordinate)) { try { - setCoordinate(CoordinateKind.valueOf(value)); + setCoordinate(value); } catch (Exception e) { MessageFormat.format( SpatialConstants.bundle.getString("COULD_NOT_READ"), value, Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/ParametricObject.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/ParametricObject.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/ParametricObject.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -52,6 +52,10 @@ /** * */ + private String pointIndex; + /** + * + */ private Integer pointIndexLength; /** * @@ -85,6 +89,9 @@ if (po.isSetCompression()) { setCompression(po.getCompression()); } + if (po.isSetPointIndex()) { + setPointIndex(po.getPointIndex()); + } if (po.isSetPointIndexLength()) { setPointIndexLength(po.getPointIndexLength()); } @@ -138,6 +145,10 @@ if (equal && isSetCompression()) { equal &= po.getCompression().equals(getCompression()); } + equal &= po.isSetPointIndex() == isSetPointIndex(); + if (equal && isSetPointIndex()) { + equal &= po.getPointIndex() == getPointIndex(); + } equal &= po.isSetPointIndexLength() == isSetPointIndexLength(); if (equal && isSetPointIndexLength()) { equal &= po.getPointIndexLength() == getPointIndexLength(); @@ -323,13 +334,81 @@ /** + * Returns the value of {@link #pointIndex}. + * + * @return the value of {@link #pointIndex}. + */ + public String getPointIndex() { + if (isSetPointIndex()) { + return pointIndex; + } + // This is necessary if we cannot return null here. For variables of type String return an empty String if no value is defined. + throw new PropertyUndefinedError(SpatialConstants.pointIndex, this); + } + + + /** + * Returns whether {@link #pointIndex} is set. + * + * @return whether {@link #pointIndex} is set. + */ + public boolean isSetPointIndex() { + return this.pointIndex != null; + } + + + /** + * Sets the value of pointIndex + * + * @param pointIndex the value of pointIndex to be set. + */ + public void setPointIndex(String pointIndex) { + String oldPointIndex = this.pointIndex; + this.pointIndex = pointIndex; + firePropertyChange(SpatialConstants.pointIndex, oldPointIndex, this.pointIndex); + } + + + /** + * Unsets the variable pointIndex. + * + * @return {@code true} if pointIndex was set before, otherwise {@code false}. + */ + public boolean unsetPointIndex() { + if (isSetPointIndex()) { + String oldPointIndex = this.pointIndex; + this.pointIndex = null; + this.pointIndexLength = null; + firePropertyChange(SpatialConstants.pointIndex, oldPointIndex, this.pointIndex); + return true; + } + return false; + } + + /** + * Appends the variable data to pointIndex. + * @return {@code true} if data was appended to pointIndex, otherwise {@code false}. + */ + public boolean append(String data) { + if (data == null) { return false; } + if (isSetPointIndex()) { + String oldPointIndex = this.pointIndex; + this.pointIndex = this.pointIndex + data; + firePropertyChange(SpatialConstants.pointIndex, oldPointIndex, this.pointIndex); + } else { + setPointIndex(data); + } + return true; + } + + /** * Returns the value of pointIndexLength. * * @return the value of pointIndexLength. */ public int getPointIndexLength() { if (isSetPointIndexLength()) { - return pointIndexLength.intValue(); + return pointIndexLength; } // This is necessary if we cannot return null here. For variables of type String return an empty String if no value is defined. throw new PropertyUndefinedError(SpatialConstants.pointIndexLength, this); @@ -447,6 +526,9 @@ if (isSetCompression()) { hashCode += prime * getCompression().hashCode(); } + if (isSetPointIndex()) { + hashCode += prime * getPointIndex().hashCode(); + } if (isSetPointIndexLength()) { hashCode += prime * getPointIndexLength(); } @@ -514,21 +596,21 @@ try { setCompression(value); } catch (Exception e) { - MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.polygonType); + MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.compression); } } else if (attributeName.equals(SpatialConstants.pointIndexLength)) { try { setPointIndexLength(StringTools.parseSBMLInt(value)); } catch (Exception e) { - MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.polygonType); + MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.pointIndexLength); } } else if (attributeName.equals(SpatialConstants.dataType)) { try { setDataType(value); } catch (Exception e) { - MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.polygonType); + MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.dataType); } } else { @@ -551,6 +633,8 @@ builder.append(domainType); builder.append(", compression="); builder.append(compression); + builder.append(", pointIndex="); + builder.append(pointIndex); builder.append(", pointIndexLength="); builder.append(pointIndexLength); builder.append(", dataType="); Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SampledField.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SampledField.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SampledField.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -69,6 +69,10 @@ /** * */ + private String samples; + /** + * + */ private Integer samplesLength; /** * @@ -106,14 +110,15 @@ if (sf.isSetCompression()) { setCompression(sf.getCompression()); } + if (sf.isSetSamples()) { + setSamples(sf.getSamples()); + } if (sf.isSetSamplesLength()) { setSamplesLength(sf.getSamplesLength()); } if (sf.isSetInterpolation()) { setInterpolation(sf.getInterpolation()); } - - // TODO - data ? } /** @@ -172,6 +177,10 @@ if (equal && isSetSamplesLength()) { equal &= sf.getSamplesLength() == getSamplesLength(); } + equal &= sf.isSetSamples() == isSetSamples(); + if (equal && isSetSamples()) { + equal &= sf.getSamples() == getSamples(); + } equal &= sf.isSetDataType() == isSetDataType(); if (equal && isSetDataType()) { equal &= sf.getDataType().equals(getDataType()); @@ -491,7 +500,75 @@ return false; } + + /** + * Returns the value of {@link #samples}. + * + * @return the value of {@link #samples}. + */ + public String getSamples() { + if (isSetSamples()) { + return samples; + } + // This is necessary if we cannot return null here. For variables of type String return an empty String if no value is defined. + throw new PropertyUndefinedError(SpatialConstants.samples, this); + } + + /** + * Returns whether {@link #samples} is set. + * + * @return whether {@link #samples} is set. + */ + public boolean isSetSamples() { + return this.samples != null; + } + + + /** + * Sets the value of samples + * + * @param samples the value of samples to be set. + */ + public void setSamples(String samples) { + String oldSamples = this.samples; + this.samples = samples; + firePropertyChange(SpatialConstants.samples, oldSamples, this.samples); + } + + + /** + * Unsets the variable samples. + * + * @return {@code true} if samples was set before, otherwise {@code false}. + */ + public boolean unsetSamples() { + if (isSetSamples()) { + String oldSamples = this.samples; + this.samples = null; + this.samplesLength = null; + firePropertyChange(SpatialConstants.samples, oldSamples, this.samples); + return true; + } + return false; + } + + /** + * Appends the variable data to samples. + * @return {@code true} if data was appended to samples, otherwise {@code false}. + */ + public boolean append(String data) { + if (data == null) { return false; } + if (isSetSamples()) { + String oldSamples = this.samples; + this.samples = this.samples + data; + firePropertyChange(SpatialConstants.samples, oldSamples, this.samples); + } else { + setSamples(data); + } + return true; + } + /** * Returns the value of {@link #samplesLength}. * @@ -689,6 +766,10 @@ hashCode += prime * getCompression().hashCode(); } + if (isSetSamples()) { + hashCode += prime * getSamples().hashCode(); + } + if (isSetSamplesLength()) { hashCode += prime * getSamplesLength(); } @@ -733,6 +814,11 @@ attributes.put(SpatialConstants.shortLabel + ":interpolation", getInterpolation().toString()); } + if (isSetSamplesLength()) { + attributes.remove("samplesLength"); + attributes.put(SpatialConstants.shortLabel + ":samplesLength", + String.valueOf(getSamplesLength())); + } return attributes; } @@ -823,6 +909,8 @@ builder.append(compression); builder.append(", samplesLength="); builder.append(samplesLength); + builder.append(", samples="); + builder.append(samples); builder.append(", data="); builder.append(data); builder.append("]"); Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialConstants.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialConstants.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialConstants.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -151,7 +151,7 @@ /** * */ - public static final String spatialId = "spatialId"; + public static final String spatialId = "id"; /** * */ @@ -515,9 +515,19 @@ /** * */ + public static final String arrayData = "arrayData"; + + /** + * + */ public static final String arrayDataLength = "arrayDataLength"; /** + * + */ + public static final String spatialRef = "spatialRef"; + + /** * @param level * @param version * @return Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialPoints.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialPoints.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialPoints.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -54,7 +54,10 @@ * */ private DataKind dataType; - + /** + * + */ + private String arrayData; @@ -91,6 +94,9 @@ if (sp.isSetDataType()) { setDataType(sp.getDataType()); } + if (sp.isSetArrayData()) { + setArrayData(sp.getArrayData()); + } } @@ -111,6 +117,10 @@ if (equal && isSetCompression()) { equal &= sp.getCompression().equals(getCompression()); } + equal &= sp.isSetArrayData() == isSetArrayData(); + if (equal && isSetArrayData()) { + equal &= sp.getArrayData() == getArrayData(); + } equal &= sp.isSetArrayDataLength() == isSetArrayDataLength(); if (equal && isSetArrayDataLength()) { equal &= sp.getArrayDataLength() == getArrayDataLength(); @@ -192,13 +202,81 @@ /** + * Returns the value of {@link #arrayData}. + * + * @return the value of {@link #arrayData}. + */ + public String getArrayData() { + if (isSetArrayData()) { + return arrayData; + } + // This is necessary if we cannot return null here. For variables of type String return an empty String if no value is defined. + throw new PropertyUndefinedError(SpatialConstants.arrayData, this); + } + + + /** + * Returns whether {@link #arrayData} is set. + * + * @return whether {@link #arrayData} is set. + */ + public boolean isSetArrayData() { + return this.arrayData != null; + } + + + /** + * Sets the value of arrayData + * + * @param arrayData the value of arrayData to be set. + */ + public void setArrayData(String arrayData) { + String oldArrayData = this.arrayData; + this.arrayData = arrayData; + firePropertyChange(SpatialConstants.arrayData, oldArrayData, this.arrayData); + } + + + /** + * Unsets the variable arrayData. + * + * @return {@code true} if arrayData was set before, otherwise {@code false}. + */ + public boolean unsetArrayData() { + if (isSetArrayData()) { + String oldArrayData = this.arrayData; + this.arrayData = null; + this.arrayDataLength = null; + firePropertyChange(SpatialConstants.arrayData, oldArrayData, this.arrayData); + return true; + } + return false; + } + + /** + * Appends the variable data to arrayData. + * @return {@code true} if data was appended to arrayData, otherwise {@code false}. + */ + public boolean append(String data) { + if (data == null) { return false; } + if (isSetArrayData()) { + String oldArrayData = this.arrayData; + this.arrayData = this.arrayData + data; + firePropertyChange(SpatialConstants.arrayData, oldArrayData, this.arrayData); + } else { + setArrayData(data); + } + return true; + } + + /** * Returns the value of arrayDataLength. * * @return the value of arrayDataLength. */ public int getArrayDataLength() { if (isSetArrayDataLength()) { - return arrayDataLength.intValue(); + return arrayDataLength; } // This is necessary if we cannot return null here. For variables of type String return an empty String if no value is defined. throw new PropertyUndefinedError(SpatialConstants.arrayDataLength, this); @@ -313,6 +391,9 @@ if (isSetArrayDataLength()) { hashCode += prime * getArrayDataLength(); } + if (isSetArrayData()) { + hashCode += prime * getArrayData().hashCode(); + } if (isSetDataType()) { hashCode += prime * getDataType().hashCode(); } @@ -350,21 +431,21 @@ try { setCompression(value); } catch (Exception e) { - MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.polygonType); + MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.compression); } } else if (attributeName.equals(SpatialConstants.arrayDataLength)) { try { setArrayDataLength(StringTools.parseSBMLInt(value)); } catch (Exception e) { - MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.polygonType); + MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.arrayDataLength); } } else if (attributeName.equals(SpatialConstants.dataType)) { try { setDataType(value); } catch (Exception e) { - MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.polygonType); + MessageFormat.format(SpatialConstants.bundle.getString("COULD_NOT_READ"), value, SpatialConstants.dataType); } } else { @@ -382,6 +463,8 @@ StringBuilder builder = new StringBuilder(); builder.append("ParametricObject [compression="); builder.append(compression); + builder.append(", arrayData="); + builder.append(arrayData); builder.append(", arrayDataLength="); builder.append(arrayDataLength); builder.append(", dataType="); Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialSymbolReference.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialSymbolReference.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/ext/spatial/SpatialSymbolReference.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -21,6 +21,10 @@ */ package org.sbml.jsbml.ext.spatial; +import java.util.Map; + +import org.sbml.jsbml.PropertyUndefinedError; + /** * @author Alex Thomas * @author Andreas Dräger @@ -37,15 +41,23 @@ /** * */ + private String spatialRef; + + /** + * + */ public SpatialSymbolReference() { super(); } /** - * @param classvar + * @param ssr */ - public SpatialSymbolReference(SpatialSymbolReference classvar) { - super(classvar); + public SpatialSymbolReference(SpatialSymbolReference ssr) { + super(ssr); + if (ssr.isSetSpatialRef()) { + setSpatialRef(ssr.getSpatialRef()); + } } /** @@ -71,5 +83,84 @@ public boolean equals(Object object) { return super.equals(object); } - + + + /** + * Returns the value of {@link #spatialRef}. + * + * @return the value of {@link #spatialRef}. + */ + public String getSpatialRef() { + //TODO: if variable is boolean, create an additional "isVar" + //TODO: return primitive data type if possible (e.g., int instead of Integer) + if (isSetSpatialRef()) { + return spatialRef; + } + // This is necessary if we cannot return null here. For variables of type String return an empty String if no value is defined. + throw new PropertyUndefinedError(SpatialConstants.spatialRef, this); + } + + + /** + * Returns whether {@link #spatialRef} is set. + * + * @return whether {@link #spatialRef} is set. + */ + public boolean isSetSpatialRef() { + return this.spatialRef != null; + } + + + /** + * Sets the value of spatialRef + * + * @param spatialRef the value of spatialRef to be set. + */ + public void setSpatialRef(String spatialRef) { + String oldSpatialRef = this.spatialRef; + this.spatialRef = spatialRef; + firePropertyChange(SpatialConstants.spatialRef, oldSpatialRef, this.spatialRef); + } + + + /** + * Unsets the variable spatialRef. + * + * @return {@code true} if spatialRef was set before, otherwise {@code false}. + */ + public boolean unsetSpatialRef() { + if (isSetSpatialRef()) { + String oldSpatialRef = this.spatialRef; + this.spatialRef = null; + firePropertyChange(SpatialConstants.spatialRef, oldSpatialRef, this.spatialRef); + return true; + } + return false; + } + + + public Map<String, String> writeXMLAttributes() { + Map<String, String> attributes = super.writeXMLAttributes(); + if (isSetSpatialRef()) { + attributes.remove(SpatialConstants.spatialRef); + attributes.put(SpatialConstants.shortLabel + ":" + SpatialConstants.spatialRef, getSpatialRef()); + } + return attributes; + } + + + public boolean readAttribute(String attributeName, String prefix, String value) { + boolean isAttributeRead = super.readAttribute(attributeName, prefix, value); + if (!isAttributeRead) { + isAttributeRead = true; + System.out.println("SpatialSymbolReference: debug attribute name: " + attributeName); + if (attributeName.equals(SpatialConstants.spatialRef)) { + setSpatialRef(value); + } + else { + isAttributeRead = false; + } + } + return isAttributeRead; + } } Modified: branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/xml/parsers/SpatialParser.java =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/xml/parsers/SpatialParser.java 2015-05-01 10:01:31 UTC (rev 2271) +++ branches/astnode2-merging-alternate/extensions/spatial/src/org/sbml/jsbml/xml/parsers/SpatialParser.java 2015-05-01 10:16:48 UTC (rev 2272) @@ -84,7 +84,7 @@ @ProviderFor(ReadingParser.class) public class SpatialParser extends AbstractReaderWriter implements PackageParser { - // TODO - check that it is properly updated to the 0.88 draft specs + // TODO - check that it is properly updated to the 0.90 draft specs /** * A {@link Logger} for this class. @@ -96,6 +96,28 @@ */ public static final String namespaceURIrequired = "http://www.sbml.org/sbml/level3/version1/req/version1"; + + + @Override + public void processCharactersOf(String elementName, String characters, + Object contextObject) { + if (contextObject instanceof SpatialPoints) { + SpatialPoints spatialPoints = (SpatialPoints) contextObject; + spatialPoints.append(characters); + } + if (contextObject instanceof ParametricObject) { + ParametricObject parametricObject = (ParametricObject) contextObject; + parametricObject.append(characters); + } + } + + @Override + public void writeCharacters(SBMLObjectForXML xmlObject, + Object sbmlElementToWrite) { + // TODO Auto-generated method stub + super.writeCharacters(xmlObject, sbmlElementToWrite); + } + /* (non-Javadoc) * @see org.sbml.jsbml.xml.parsers.AbstractReaderWriter#getShortLabel() */ @@ -245,6 +267,7 @@ param.addExtension(SpatialConstants.namespaceURI, spatialParam); } + // TODO: CHECK create method. this might be the source of the problem. if (elementName.equals(SpatialConstants.spatialSymbolReference)) { SpatialSymbolReference ssr = new SpatialSymbolReference(); spatialParam.setParamType(ssr); @@ -314,14 +337,15 @@ // sfg.setSampledField(sf); // return sf; } - } else if (contextObject instanceof SampledField) { + // NOTE: This has been moved in the listOf section below. +// } else if (contextObject instanceof SampledField) { // SampledField sf = (SampledField) contextObject; // No more child in 0.88 // if (elementName.equals(SpatialConstants.imageData)){ // ImageData im = new ImageData(); // sf.setImageData(im); // // sf.set // return im; - // } + // } } else if (contextObject instanceof CSGeometry) { CSGeometry csg = (CSGeometry) contextObject; if (elementName.equals(SpatialConstants.listOfCSGObjects)){ @@ -379,24 +403,14 @@ } else if (contextObject instanceof ParametricGeometry) { ParametricGeometry pg = (ParametricGeometry) contextObject; if (elementName.equals(SpatialConstants.spatialPoints)){ - SpatialPoints spatialPoints = pg.getSpatialPoints(); - return spatialPoints; + SpatialPoints sp = new SpatialPoints(); + pg.setSpatialPoints(sp); + return sp; } else if (elementName.equals(SpatialConstants.listOfParametricObjects)){ ListOf<ParametricObject> listOfParametricObjects = pg.getListOfParametricObjects(); return listOfParametricObjects; } - } else if (contextObject instanceof ParametricObject) { - ParametricObject po = (ParametricObject) contextObject; - if (elementName.equals(SpatialConstants.imageData)){ - // TODO: THIS NEEDS to be updated with the details provided in the spatial package v0.90, - // See ArrayData text child and PointIndex text child - //PolygonObject polygonObject = new PolygonObject(); - //po.setPolygonObject(polygonObject); - //return polygonObject; - } - } - - else if (contextObject instanceof ListOf<?>) { + } else if (contextObject instanceof ListOf<?>) { ListOf<SBase> listOf = (ListOf<SBase>) contextObject; if (elementName.equals(SpatialConstants.coordinateComponent)) { @@ -459,6 +473,11 @@ SampledVolume elem = new SampledVolume(); sfg.addSampledVolume(elem); return elem; + } else if (elementName.equals(SpatialConstants.sampledField)) { + Geometry g = (Geometry) listOf.getParentSBMLObject(); + SampledField elem = new SampledField(); + g.addSampledField(elem); + return elem; } else if (elementName.equals(SpatialConstants.csgPrimitive)) { CSGSetOperator csgso = (CSGSetOperator) listOf.getParentSBMLObject(); CSGPrimitive elem = new CSGPrimitive(); Copied: branches/astnode2-merging-alternate/extensions/spatial/test/org/sbml/jsbml/xml/test/data/spatial/sampled_field.xml (from rev 2240, trunk/extensions/spatial/test/org/sbml/jsbml/xml/test/data/spatial/sampled_field.xml) =================================================================== --- branches/astnode2-merging-alternate/extensions/spatial/test/org/sbml/jsbml/xml/test/data/spatial/sampled_field.xml (rev 0) +++ branches/astnode2-merging-alternate/extensions/spatial/test/org/sbml/jsbml/xml/test/data/spatial/sampled_field.xml 2015-05-01 10:16:48 UTC (rev 2272) @@ -0,0 +1,311 @@ +<?xml version="1.0" encoding="UTF-8"?> +<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" xmlns:req="http://www.sbml.org/sbml/level3/version1/req/version1" xmlns:spatial="http://www.sbml.org/sbml/level3/version1/spatial/version1" level="3" version="1" req:required="true" spatial:required="true"> + <model> + <listOfUnitDefinitions> + <unitDefinition id="substance"> + <listOfUnits> + <unit kind="item" exponent="1" scale="0" multiplier="1"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="volume"> + <listOfUnits> + <unit kind="metre" exponent="3" scale="0" multiplier="1e-06"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="area"> + <listOfUnits> + <unit kind="metre" exponent="2" scale="0" multiplier="1e-06"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="molecules"> + <listOfUnits> + <unit kind="item" exponent="1" scale="0" multiplier="1"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="umol_um3_litre_1"> + <listOfUnits> + <unit kind="mole" exponent="1" scale="0" multiplier="1e-21"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="um3"> + <listOfUnits> + <unit kind="metre" exponent="3" scale="0" multiplier="1e-06"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="um2"> + <listOfUnits> + <unit kind="metre" exponent="2" scale="0" multiplier="1e-06"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="uM_um3_molecules_1"> + <listOfUnits> + <unit kind="dimensionless" exponent="1" scale="0" multiplier="1e-21"/> + <unit kind="item" exponent="-1" scale="0" multiplier="1"/> + <unit kind="mole" exponent="1" scale="0" multiplier="1"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="molecules_um_2_s_1"> + <listOfUnits> + <unit kind="dimensionless" exponent="1" scale="0" multiplier="1000000000000"/> + <unit kind="item" exponent="1" scale="0" multiplier="1"/> + <unit kind="metre" exponent="-2" scale="0" multiplier="1"/> + <unit kind="second" exponent="-1" scale="0" multiplier="1"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="pA_um_2"> + <listOfUnits> + <unit kind="dimensionless" exponent="1" scale="0" multiplier="1"/> + <unit kind="ampere" exponent="1" scale="0" multiplier="1"/> + <unit kind="metre" exponent="-2" scale="0" multiplier="1"/> + </listOfUnits> + </unitDefinition> + <unitDefinition id="uM_um_s_1"> + <listOfUnits> + <unit kind="dimensionless" exponent="1" scale="0" multiplier="1e-09"/> + <unit kind="metre" exponent="-2" scale="0" multiplier="1"/> + <unit kind="mole" exponent="1" scale="0" multiplier="1"/> + <unit kind="second" exponent="-1" scale="0" multiplier="1"/> + </listOfUnits> + </unitDefinition> + </listOfUnitDefinitions> + <listOfCompartments> + <compartment id="Extracellular" name="Extracellular" spatialDimensions="3" constant="true"> + <spatial:compartmentMapping spatial:id="ExtracellularExtracellular" spatial:domainType="Extracellular" spatial:unitSize="1"/> + </compartment> + <compartment id="Cytosol_Extracellular_membrane" name="Cytosol_Extracellular_membrane" spatialDimensions="2" constant="true"> + <spatial:compartmentMapping spatial:id="Cytosol_Extracellular_membraneCytosol_Extracellular_membrane" spatial:domainType="Cytosol_Extracellular_membrane" spatial:unitSize="1"/> + </compartment> + <compartment id="Cytosol" name="Cytosol" spatialDimensions="3" constant="true"> + <spatial:compartmentMapping spatial:id="CytosolCytosol" spatial:domainType="Cytosol" spatial:unitSize="1"/> + </compartment> + <compartment id="Nucleus_Cytosol_membrane" name="Nucleus_Cytosol_membrane" spatialDimensions="2" constant="true"> + <spatial:compartmentMapping spatial:id="Nucleus_Cytosol_membraneNucleus_Cytosol_membrane" spatial:domainType="Nucleus_Cytosol_membrane" spatial:unitSize="1"/> + </compartment> + <compartment id="Nucleus" name="Nucleus" spatialDimensions="3" constant="true"> + <spatial:compartmentMapping spatial:id="NucleusNucleus" spatial:domainType="Nucleus" spatial:unitSize="1"/> + </compartment> + </listOfCompartments> + <listOfSpecies> + <species id="s1_nuc" compartment="Nucleus" initialConcentration="0" substanceUnits="molecules" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false" spatial:isSpatial="true"> + <annotation> + <vcell:VCellInfo xmlns:vcell="http://sourceforge.net/projects/vcell"> + <vcell:VCMLSpecific> + <vcell:Compound Name="s1_2"/> + </vcell:VCMLSpecific> + </vcell:VCellInfo> + </annotation> + <req:listOfChangedMaths> + <req:changedMath req:changedBy="spatial" req:viableWithoutChange="true"/> + </req:listOfChangedMaths> + <spatial:spatialSymbolReference spatial:spatialRef="spatial"/> + </species> + <species id="s1_cyt" compartment="Cytosol" initialConcentration="10" substanceUnits="molecules" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false" spatial:isSpatial="true"> + <annotation> + <vcell:VCellInfo xmlns:vcell="http://sourceforge.net/projects/vcell"> + <vcell:VCMLSpecific> + <vcell:Compound Name="s1_2"/> + </vcell:VCMLSpecific> + </vcell:VCellInfo> + </annotation> + <req:listOfChangedMaths> + <req:changedMath req:changedBy="spatial" req:viableWithoutChange="true"/> + </req:listOfChangedMaths> + <spatial:spatialSymbolReference spatial:spatialRef="spatial"/> + </species> + <species id="s2_nuc" compartment="Nucleus" initialConcentration="5" substanceUnits="molecules" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false" spatial:isSpatial="true"> + <annotation> + <vcell:VCellInfo xmlns:vcell="http://sourceforge.net/projects/vcell"> + <vcell:VCMLSpecific> + <vcell:Compound Name="s2_2"/> + </vcell:VCMLSpecific> + </vcell:VCellInfo> + </annotation> + <req:listOfChangedMaths> + <req:changedMath req:changedBy="spatial" req:viableWithoutChange="true"/> + </req:listOfChangedMaths> + <spatial:spatialSymbolReference spatial:spatialRef="spatial"/> + </species> + <species id="s1_EC" compartment="Extracellular" initialConcentration="0" substanceUnits="molecules" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false" spatial:isSpatial="true"> + <annotation> + <vcell:VCellInfo xmlns:vcell="http://sourceforge.net/projects/vcell"> + <vcell:VCMLSpecific> + <vcell:Compound Name="s1_2"/> + </vcell:VCMLSpecific> + </vcell:VCellInfo> + </annotation> + <req:listOfChangedMaths> + <req:changedMath req:changedBy="spatial" req:viableWithoutChange="true"/> + </req:listOfChangedMaths> + <spatial:spatialSymbolReference spatial:spatialRef="spatial"/> + </species> + </listOfSpecies> + <listOfParameters> + <parameter id="x" value="0"> + <spatial:spatialSymbolReference spatial:id="x"/> + </parameter> + <parameter id="y" value="0"> + <spatial:spatialSymbolReference spatial:id="y"/> + </parameter> + <parameter id="s1_nuc_diff" value="10" constant="true"> + <spatial:diffusionCoefficient spatial:variable="s1_nuc" spatial:type="isotropic"/> + <spatial:listOfCoordinateReferences> + <spatial:coordinateReference spatial:coordinate="cartesianX"/> + <spatial:coordinateReference spatial:coordinate="cartesianY"/> + </spatial:listOfCoordinateReferences> + </parameter> + <parameter id="s1_nuc_BC_Xm" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_nuc" spatial:coordinateBoundary="Xmin" spatial:type="Dirichlet" spatial:boundaryDomainType="Nucleus"/> + </parameter> + <parameter id="s1_nuc_BC_Xp" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_nuc" spatial:coordinateBoundary="Xmax" spatial:type="Dirichlet" spatial:boundaryDomainType="Nucleus"/> + </parameter> + <parameter id="s1_nuc_BC_Ym" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_nuc" spatial:coordinateBoundary="Ymin" spatial:type="Dirichlet" spatial:boundaryDomainType="Nucleus"/> + </parameter> + <parameter id="s1_nuc_BC_Yp" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_nuc" spatial:coordinateBoundary="Ymax" spatial:type="Dirichlet" spatial:boundaryDomainType="Nucleus"/> + </parameter> + <parameter id="s1_cyt_diff" value="10" constant="true"> + <spatial:diffusionCoefficient spatial:variable="s1_cyt" spatial:type="isotropic"/> + <spatial:listOfCoordinateReferences> + <spatial:coordinateReference spatial:coordinate="cartesianX"/> + <spatial:coordinateReference spatial:coordinate="cartesianY"/> + </spatial:listOfCoordinateReferences> + </parameter> + <parameter id="s1_cyt_BC_Xm" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_cyt" spatial:coordinateBoundary="Xmin" spatial:type="Dirichlet" spatial:boundaryDomainType="Cytosol"/> + </parameter> + <parameter id="s1_cyt_BC_Xp" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_cyt" spatial:coordinateBoundary="Xmax" spatial:type="Dirichlet" spatial:boundaryDomainType="Cytosol"/> + </parameter> + <parameter id="s1_cyt_BC_Ym" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_cyt" spatial:coordinateBoundary="Ymin" spatial:type="Dirichlet" spatial:boundaryDomainType="Cytosol"/> + </parameter> + <parameter id="s1_cyt_BC_Yp" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_cyt" spatial:coordinateBoundary="Ymax" spatial:type="Dirichlet"/> + </parameter> + <parameter id="s1_EC_diff" value="10" constant="true"> + <spatial:diffusionCoefficient spatial:variable="s1_EC" spatial:type="isotropic"/> + <spatial:listOfCoordinateReferences> + <spatial:coordinateReference spatial:coordinate="cartesianX"/> + <spatial:coordinateReference spatial:coordinate="cartesianY"/> + </spatial:listOfCoordinateReferences> + </parameter> + <parameter id="s1_EC_BC_Xm" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_EC" spatial:coordinateBoundary="Xmin" spatial:type="Dirichlet" spatial:boundaryDomainType="Extracellular"/> + </parameter> + <parameter id="s1_EC_BC_Xp" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_EC" spatial:coordinateBoundary="Xmax" spatial:type="Dirichlet" spatial:boundaryDomainType="Extracellular"/> + </parameter> + <parameter id="s1_EC_BC_Ym" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_EC" spatial:coordinateBoundary="Ymin" spatial:type="Dirichlet" spatial:boundaryDomainType="Extracellular"/> + </parameter> + <parameter id="s1_EC_BC_Yp" value="0" constant="true"> + <spatial:boundaryCondition spatial:variable="s1_EC" spatial:coordinateBoundary="Ymax" spatial:type="Dirichlet" spatial:boundaryDomainType="Extracellular"/> + </parameter> + <parameter id="KMOLE" value="0.00166112956810631" units="uM_um3_molecules_1" constant="true"/> + </listOfParameters> + <listOfReactions> + <reaction id="flux1" name="flux1" reversible="true" fast="false" spatial:isLocal="true"> + <listOfReactants> + <speciesReference species="s1_cyt" stoichiometry="1"/> + </listOfReactants> + <listOfProducts> + <speciesReference species="s1_nuc" stoichiometry="1"/> + ... [truncated message content] |