From 5486e682827d3c6c272f4bf6e03057a737202feb Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Tue, 3 Jul 2012 00:23:10 +0000 Subject: [PATCH] Check for duplicate ids/names in reactions-to-PRISM translation. git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@5423 bbc10eb1-c90d-0410-af57-cb519fbb1720 --- prism/src/prism/Reactions2Prism.java | 45 +++++++++++++++++----------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/prism/src/prism/Reactions2Prism.java b/prism/src/prism/Reactions2Prism.java index cbf0e509..bb27a7b5 100644 --- a/prism/src/prism/Reactions2Prism.java +++ b/prism/src/prism/Reactions2Prism.java @@ -144,21 +144,38 @@ public class Reactions2Prism /** * Do some processing of the reaction set model in preparation for conversion to PRISM code. */ - private void processModel() + private void processModel() throws PrismException { - int i, j, k, n, m; + int j, k, m; String s, s2; - Species species; - Reaction reaction; - Parameter parameter; HashSet modulesNames; HashSet prismIdents; + // Check species ids are unique + ArrayList speciesIDs = new ArrayList(); + for (Species species : speciesList) { + if (speciesIDs.contains(species.id)) + throw new PrismException("Duplicate species id \"" + species.id + "\""); + speciesIDs.add(species.id); + } + // Check parameter names are unique + ArrayList paramNames = new ArrayList(); + for (Parameter parameter : parameterList) { + if (paramNames.contains(parameter.name)) + throw new PrismException("Duplicate parameter name \"" + parameter.name + "\""); + paramNames.add(parameter.name); + } + // Check reaction ids are unique + ArrayList reactionIDs = new ArrayList(); + for (Reaction reaction : reactionList) { + if (reactionIDs.contains(reaction.id)) + throw new PrismException("Duplicate reaction id \"" + reaction.id + "\""); + reactionIDs.add(reaction.id); + } + // Look at initial amounts for all species // If any exceed MAX_AMOUNT, increase it accordingly - n = speciesList.size(); - for (i = 0; i < n; i++) { - species = speciesList.get(i); + for (Species species : speciesList) { if (species.init > maxAmount) maxAmount = (int) species.init; } @@ -166,9 +183,7 @@ public class Reactions2Prism // Generate unique and valid PRISM identifier (module and variable name) for each species modulesNames = new HashSet(); prismIdents = new HashSet(); - n = speciesList.size(); - for (i = 0; i < n; i++) { - species = speciesList.get(i); + for (Species species : speciesList) { s = species.id; s2 = convertToValidPrismIdent(s); if (!s.equals(s2)) @@ -185,9 +200,7 @@ public class Reactions2Prism } // Generate unique and valid PRISM constant name for model parameter - n = parameterList.size(); - for (i = 0; i < n; i++) { - parameter = parameterList.get(i); + for (Parameter parameter : parameterList) { s = parameter.name; s2 = convertToValidPrismIdent(s); if (!s.equals(s2)) @@ -204,9 +217,7 @@ public class Reactions2Prism } // Generate unique and valid PRISM constant name for each reaction parameter - n = reactionList.size(); - for (i = 0; i < n; i++) { - reaction = reactionList.get(i); + for (Reaction reaction : reactionList) { m = reaction.parameters.size(); for (j = 0; j < m; j++) { s = reaction.parameters.get(j).name;