/************************************************************************* * * * This file is part of the 20n/act project. * * 20n/act enables DNA prediction for synthetic biology/bioengineering. * * Copyright (C) 2017 20n Labs, Inc. * * * * Please direct all queries to act@20n.com. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see <http://www.gnu.org/licenses/>. * * * *************************************************************************/ package com.act.biointerpretation.test.util; import act.shared.Reaction; import act.shared.Seq; import com.mongodb.BasicDBObject; import org.biopax.paxtools.model.level3.ConversionDirectionType; import org.biopax.paxtools.model.level3.StepDirection; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class TestUtils { private long nextTestReactionId = 0; public static final Long DEFAULT_ORGANISM_ID = 1L; public static final Map<Long, String> ORGANISM_NAMES = new HashMap<Long, String>() {{ put(DEFAULT_ORGANISM_ID, "Homo sapiens"); }}; // Use distinct id spaces for input proteins to ensure ids are re-mapped during the merging/writing. public static final List<Seq> SEQUENCES = assembleSequences(); private static List<Seq> assembleSequences() { List<Seq> sequences = new ArrayList<Seq>() {{ add(new Seq(10L, "1.2.3.4", DEFAULT_ORGANISM_ID, "Homo sapiens", "SEQA", Collections.emptyList(), new BasicDBObject(), Seq.AccDB.brenda)); add(new Seq(20L, "1.2.3.4", DEFAULT_ORGANISM_ID, "Homo sapiens", "SEQB", Collections.emptyList(), new BasicDBObject(), Seq.AccDB.brenda)); add(new Seq(30L, "1.2.3.4", DEFAULT_ORGANISM_ID, "Homo sapiens", "SEQC", Collections.emptyList(), new BasicDBObject(), Seq.AccDB.brenda)); add(new Seq(40L, "1.2.3.4", DEFAULT_ORGANISM_ID, "Homo sapiens", "SEQD", Collections.emptyList(), new BasicDBObject(), Seq.AccDB.brenda)); add(new Seq(50L, "1.2.3.4", DEFAULT_ORGANISM_ID, "Homo sapiens", "SEQE", Collections.emptyList(), new BasicDBObject(), Seq.AccDB.brenda)); add(new Seq(60L, "1.2.3.4", DEFAULT_ORGANISM_ID, "Homo sapiens", "SEQF", Collections.emptyList(), new BasicDBObject(), Seq.AccDB.brenda)); }}; for (Seq sequence : sequences) { int id = sequence.getUUID(); int rxnID = id/10; sequence.addReactionsCatalyzed((long) rxnID); } return sequences; } // need to add seq Id/10 as rxn ref id for all of these. public static final Map<Long, Seq> SEQ_MAP = new HashMap<Long, Seq>() {{ for (Seq seq : SEQUENCES) { put(Long.valueOf(seq.getUUID()), seq); } }}; public Reaction makeTestReaction(Long[] substrates, Long[] products, Integer[] substrateCoefficients, Integer[] productCoefficients, boolean useMetacycStyleOrganisms, String ecnum, String reactionDescription) { nextTestReactionId++; JSONObject protein = new JSONObject().put("id", nextTestReactionId).put("sequences", new JSONArray()); if (useMetacycStyleOrganisms) { protein = protein.put("organisms", new JSONArray(Arrays.asList(DEFAULT_ORGANISM_ID))); } else { protein = protein.put("organism", DEFAULT_ORGANISM_ID); } Long sequenceId = nextTestReactionId * 10; if (SEQ_MAP.containsKey(sequenceId)) { protein.put("sequences", protein.getJSONArray("sequences").put(sequenceId)); } Reaction r = new Reaction(nextTestReactionId, substrates, products, new Long[]{}, new Long[]{}, new Long[]{}, ecnum, ConversionDirectionType.LEFT_TO_RIGHT, StepDirection.LEFT_TO_RIGHT, reactionDescription, Reaction.RxnDetailType.CONCRETE); r.addProteinData(protein); if (substrateCoefficients != null) { for (int i = 0; i < substrateCoefficients.length; i++) { r.setSubstrateCoefficient(substrates[i], substrateCoefficients[i]); } } if (productCoefficients != null) { for (int i = 0; i < productCoefficients.length; i++) { r.setProductCoefficient(products[i], productCoefficients[i]); } } return r; } public Reaction makeTestReaction(Long[] substrates, Long[] products, Integer[] substrateCoefficients, Integer[] productCoefficients, boolean useMetacycStyleOrganisms) { return makeTestReaction(substrates, products, substrateCoefficients, productCoefficients, useMetacycStyleOrganisms, "1.1.1.1", String.format("test reaction %d", nextTestReactionId)); } public Reaction makeTestReaction(Long[] substrates, Long[] products, boolean useMetacycStyleOrganisms) { return makeTestReaction(substrates, products, null, null, useMetacycStyleOrganisms); } public Reaction makeTestReaction(Long[] substrates, Long[] products) { return makeTestReaction(substrates, products, false); } }