package org.genedb.web.mvc.model.load; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.genedb.web.mvc.model.types.DBXRefType; import org.genedb.web.mvc.model.types.DtoObjectArrayField; import org.genedb.web.mvc.model.types.DtoStringArrayField; import org.genedb.web.mvc.model.types.FeatureCVTPropType; import org.genedb.web.mvc.model.types.FeatureCvtermType; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; /** * * @author lo2@sangerinstitute * */ public class TranscriptFeatureCVTermLoader { static Logger logger = Logger.getLogger(TranscriptFeatureCVTermLoader.class); /** * Load transcript_featurecvterm records * @param pep * @param template * @throws Exception */ public static void load(int transcriptId, FeatureMapper pep, SimpleJdbcTemplate template) throws Exception{ //append Date fcvtGetTime = new Date(); List<FeatureCvtermType> featureCvtermTypes= template.query(FeatureCvtermMapper.SQL, new FeatureCvtermMapper(), pep.getFeatureId()); TimerHelper.printTimeLapse(logger, fcvtGetTime, "fcvtGetTime"); //Get the Feature CVTerm Properties for(FeatureCvtermType featureCvtermType : featureCvtermTypes){ Map<String, Object> args = new HashMap<String, Object>(); try{ Date processFcvtTime = new Date(); args.put("transcript_id", transcriptId); args.put("feature_cvterm_id", featureCvtermType.getFeatureCvtId()); args.put("polypeptide_id", pep.getFeatureId()); //Get the CV Name logger.debug("Getting ...cvName"); args.put("cv_name", featureCvtermType.getCvname()); //Get the Type Name logger.debug("Getting ...cvTermName"); args.put("cvterm_name", featureCvtermType.getCvtname()); //Get the Accession logger.debug("Getting ...typeAccession"); String typeAccession = (String)template.queryForObject( " select accession " + " from cvterm cvt, dbxref dbx " + " where cvt.dbxref_id = dbx.dbxref_id " + " and cvt.cvterm_id = ?", String.class, new Object[]{new Integer(featureCvtermType.getTypeId())}); args.put("type_accession", typeAccession); //Get the withFrom logger.debug("Getting ...withFromPb"); args.put("with_from_pub", featureCvtermType.getPubUniqueName()); //Get the feature cvterm count logger.debug("Getting ...feature_cvterm_count"); int featureCvtermCount = template.queryForInt( " select count(f.feature_id)" + " from feature f, feature_cvterm fcvt" + " where fcvt.cvterm_id = ?" + " and f.organism_id = ?" + " and f.feature_id = fcvt.feature_id", featureCvtermType.getTypeId(), pep.getOrganismId()); args.put("feature_cvterm_count", featureCvtermCount); //Get publications logger.debug("Getting ...pubNames"); List<String> pubNames = template.query( PubNameMapper.FEATURE_CVTERM_SQL, new PubNameMapper(), featureCvtermType.getFeatureCvtId()); args.put("pubs", new DtoStringArrayField(pubNames)); //Get the dbxref logger.debug("Getting ...dbxRefs"); List<DBXRefType> dbxRefs = template.query( DbxRefMapper.FEATURE_CVTERM_SQL, new DbxRefMapper(), featureCvtermType.getFeatureCvtId()); DtoObjectArrayField objectField = new DtoObjectArrayField("dbxreftype", dbxRefs); args.put("dbxrefs", objectField); //Get the pros logger.debug("Getting ...properties"); List<FeatureCVTPropType> props = template.query( FeatureCVTermPropMapper.SQL, new FeatureCVTermPropMapper(), featureCvtermType.getFeatureCvtId()); objectField = new DtoObjectArrayField("featurecvtproptype", props); args.put("properties", objectField); //insert logger.debug("Inserting ..."); insert(args, template); TimerHelper.printTimeLapse(logger, processFcvtTime, "processFcvtTime"); }catch(Exception e){ String message = null; for(String key : args.keySet()){ message = message + String.format("%s: %s\n", key, args.get(key)); } logger.error(message, e); throw e; } } } private static String escapeInnerBrackets(String in) { int first = in.indexOf("("); int last = in.indexOf(")"); if (first > -1 && last > -1) { return in.substring(0, first) + in.substring(first, last).replaceAll("\\(", "_").replaceAll("\\)", "_") + in.substring(last); } return in; } private static int insert(Map<String, Object> args, SimpleJdbcTemplate template){ if (logger.isInfoEnabled()){ for(String key : args.keySet()){ logger.info(String.format("%s: %s", key, args.get(key))); if ("properties".equals(key)) { DtoObjectArrayField doaf = (DtoObjectArrayField) args.get(key); logger.error("doaf is '"+doaf+"'"); //args.put(key, escapeInnerBrackets((String)args.get(key))); } } } int update = template.update("insert into transcript_featurecvterm(" + "transcript_feature_cvterm_id," + //"polypeptide_id," + "cv_name_prefix," + "cvterm_name," + "type_accession," + "with_from_pub," + "feature_cvterm_count," + "pubs," + "dbxrefs," + //"properties," + "transcript_id" + ") " + "values(" + ":feature_cvterm_id," + //":polypeptide_id," + ":cv_name," + ":cvterm_name," + ":type_accession," + ":with_from_pub," + ":feature_cvterm_count," + ":pubs," + ":dbxrefs," + //":properties," + ":transcript_id" + ") ", args); logger.debug("trans fcvt loaded......"); logger.debug("\n"); return update; } }