/************************************************************************* * * * 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 act.installer.sequence; import act.installer.brenda.BrendaRxnEntry; import act.installer.brenda.BrendaSupportingEntries; import act.shared.Reaction; import act.shared.Seq; import act.shared.helpers.MongoDBToJSON; import com.mongodb.DBObject; import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; // TODO: make the SequenceEntry methods public so that this doesn't have to live in the installer.sequence package. public class BrendaEntry extends SequenceEntry { // Note: this has been mostly copied from MetacycEntry. JSONObject data; public static SequenceEntry initFromBrendaEntry( long rxnId, Reaction rxn, BrendaRxnEntry brendaRxnEntry, BrendaSupportingEntries.Sequence brendaSequence, Long orgId) { return new BrendaEntry( brendaSequence.getSequence(), orgId, brendaSequence.getEntryName(), Collections.emptySet(), rxnId, rxn, brendaSequence.getBrendaId(), brendaSequence.getFirstAccessionCode(), brendaSequence.getFromExactMatch() ); } public BrendaEntry(String sequence, Long orgId, String standardName, Set<String> comments, long rxnid, Reaction rxn, Integer brendaId, String firstAccessionCode, Boolean fromExactMatch) { this.sequence = sequence; this.org_id = orgId; this.refs = new ArrayList<>(); this.ec = rxn.getECNum(); this.catalyzed_rxns = new HashSet<>(Collections.singletonList(rxnid)); // new Seq(..) looks at the metadata in this.data for SwissProt fields: // this.data { "name" : gene_name_eg_Adh1 } // this.data { "proteinExistence": { "type" : "evidence at transcript level" }); // this.data { "comment": [ { "type": "catalytic activity", "text": uniprot_activity_annotation } ] } // this.data { "accession" : ["Q23412", "P87D78"] } // we manually add these fields so that we have consistent data this.data = new JSONObject(); this.data.put("name", standardName); this.data.put("proteinExistence", new JSONObject()); this.data.put("comment", new JSONArray(new JSONObject[] { new JSONObject().put("type", "brenda_id").put("text", brendaId) })); this.data.put("accession", new JSONObject().put(Seq.AccType.uniprot.toString(), new JSONArray(Collections.singletonList(firstAccessionCode)))); this.data.put("from_exact_match", fromExactMatch); // extract_metadata processes this.data, so do that only after updating // this.data with the proxy fields from above. this.metadata = extract_metadata(); } private DBObject extract_metadata() { // cannot directly return this.data coz in Seq.java // we expect certain specific JSON format fields return MongoDBToJSON.conv(this.data); } DBObject metadata; List<JSONObject> refs; String sequence; Long org_id; String ec; Set<Long> catalyzed_rxns; @Override Long getOrgId() { return this.org_id; } @Override String getEc() { return this.ec; } @Override String getSeq() { return this.sequence; } @Override List<JSONObject> getRefs() { return this.refs; } @Override Set<Long> getCatalyzedRxns() { return this.catalyzed_rxns; } @Override DBObject getMetadata() { return this.metadata; } }