package org.genedb.crawl.bam; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; //import org.codehaus.jackson.type.TypeReference; import org.genedb.crawl.json.JsonIzer; import org.genedb.crawl.model.Alignment; import org.genedb.crawl.model.AlignmentSequenceAlias; import org.genedb.crawl.model.Alignments; import org.genedb.crawl.model.Variant; public class BioDataFileStoreInitializer { private static Logger logger = Logger.getLogger(BioDataFileStoreInitializer.class); private JsonIzer jsonIzer = new JsonIzer(); private BioDataFileStore<Alignment> alignmentStore = new BioDataFileStore<Alignment>(); private BioDataFileStore<Variant> variantStore = new BioDataFileStore<Variant>(); private Map<String, String> sequences = new HashMap<String, String>(); private Alignments mergedAlignments; public BioDataFileStore<Alignment> getAlignments() { return alignmentStore; } public BioDataFileStore<Variant> getVariants() { return variantStore; } public void setAlignmentFiles(String alignmentFiles) throws JsonParseException, JsonMappingException, IOException { if (alignmentFiles == null) { return; } mergedAlignments = new Alignments(); mergedAlignments.alignments = new ArrayList<Alignment>(); mergedAlignments.variants = new ArrayList<Variant>(); for (String alignmentFile : alignmentFiles.split(",")) { processFile(new File(alignmentFile.trim())); } if (mergedAlignments.alignments.size() > 0) alignmentStore = new BioDataFileStore<Alignment>(mergedAlignments.alignments, sequences); if (mergedAlignments.variants.size() > 0) variantStore = new BioDataFileStore<Variant>(mergedAlignments.variants, sequences); } private void processFile(File alignmentFile) throws JsonParseException, JsonMappingException, IOException { logger.info(String.format("Alignment file : %s", alignmentFile)); if (! alignmentFile.isFile()) { logger.warn(alignmentFile + " is not a file!"); return; } logger.info("Making jsons for " + alignmentFile); Alignments currentAlignments = (Alignments) jsonIzer.fromJson(alignmentFile, Alignments.class); if (currentAlignments.sequences != null) { for (AlignmentSequenceAlias alias : currentAlignments.sequences) { sequences.put(alias.reference, alias.alignment); } } if (currentAlignments.alignments != null) { mergedAlignments.alignments.addAll(currentAlignments.alignments); } if (currentAlignments.variants != null) { mergedAlignments.variants.addAll(currentAlignments.variants); } } }