//package org.genedb.web.mvc.model; // // //import org.genedb.db.domain.luceneImpls.BasicGeneServiceImpl; //import org.genedb.db.domain.services.BasicGeneService; //import org.genedb.querying.core.LuceneIndex; //import org.genedb.querying.core.LuceneIndexFactory; //import org.genedb.web.gui.DiagramCache; //import org.genedb.web.gui.RenderedDiagramFactory; //import org.genedb.web.mvc.controller.ModelBuilder; // //import org.gmod.schema.feature.AbstractGene; //import org.gmod.schema.feature.NcRNA; //import org.gmod.schema.feature.Transcript; //import org.gmod.schema.mapped.Feature; // //import org.apache.log4j.BasicConfigurator; //import org.apache.log4j.Logger; //import org.apache.log4j.PropertyConfigurator; //import org.hibernate.Query; //import org.hibernate.Session; //import org.hibernate.SessionFactory; //import org.springframework.context.ConfigurableApplicationContext; //import org.springframework.context.support.ClassPathXmlApplicationContext; //import org.springframework.orm.hibernate3.SessionFactoryUtils; //import org.springframework.stereotype.Repository; //import org.springframework.transaction.annotation.Transactional; // //import uk.co.flamingpenguin.jewel.cli.ArgumentValidationException; //import uk.co.flamingpenguin.jewel.cli.Cli; //import uk.co.flamingpenguin.jewel.cli.CliFactory; //import uk.co.flamingpenguin.jewel.cli.Option; // //import java.io.File; //import java.util.Iterator; //import java.util.List; // //import com.sleepycat.collections.StoredMap; //import com.sleepycat.je.DatabaseException; //import com.sleepycat.je.EnvironmentLockedException; // // //@Repository //@Transactional //public class PopulateCaches { // private static final Logger logger = Logger.getLogger(PopulateCaches.class); // // private BerkeleyMapFactory bmf; // // private StoredMap<Integer, TranscriptDTO> dtoMap; // private StoredMap<Integer, String> contextMapMap; // // private SessionFactory sessionFactory; // private ModelBuilder modelBuilder; // private DiagramCache diagramCache; // private LuceneIndexFactory luceneIndexFactory; // private BasicGeneService basicGeneService; // private RenderedDiagramFactory renderedDiagramFactory; // // private PopulateCachesArgs config; // // public void setSessionFactory(SessionFactory sessionFactory) { // this.sessionFactory = sessionFactory; // } // // /** // * @param args // * @throws DatabaseException // * @throws EnvironmentLockedException // */ // public static void main(String[] args) { // // PropertyConfigurator.configure("resources/classpath/log4j.index.properties"); // // Cli<PopulateCachesArgs> cli = CliFactory.createCli(PopulateCachesArgs.class); // PopulateCachesArgs pca = null; // try { // pca = cli.parseArguments(args); // } // catch(ArgumentValidationException exp) { // System.err.println("Unable to run:"); // System.err.println(cli.getHelpMessage()); // System.exit(64); // } // // ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext( // new String[] {"classpath:applicationContext.xml", "classpath:populateCaches.xml"}); // PopulateCaches pc = ctx.getBean("populateCaches", PopulateCaches.class); // pc.setConfig(pca); // // logger.info("fully populating"); // pc.fullCachePopulate(); // logger.info("fully populated"); // } // // @Transactional // public void fullCachePopulate() { // dtoMap = bmf.getDtoMap(); // TODO More nicely // contextMapMap = bmf.getContextMapMap(); // // LuceneIndex luceneIndex = luceneIndexFactory.getIndex("org.gmod.schema.mapped.Feature"); // basicGeneService = new BasicGeneServiceImpl(luceneIndex); // // logger.info(config.isGeneUniqueName()); // //logger.info(config.getGeneUniqueName()); // // if (config.isGeneUniqueName()) { // String geneUniqueName = config.getGeneUniqueName(); // if (geneUniqueName != null) { // populateCacheForGene(geneUniqueName); // return; // } // throw new RuntimeException("Found a --gene argument, but didn't understand it"); // } // logger.info("topLevel?"); // populateCacheForTopLevelFeatures(); // } // // /** // * @param session // */ // @Transactional // private void populateCacheForTopLevelFeatures() { // Session session = SessionFactoryUtils.getSession(sessionFactory, true); // long start = System.currentTimeMillis(); // // Iterator<Feature> topLevelFeatures = getTopLevelFeatures(); // // int count = 0; // while (topLevelFeatures.hasNext()) { // Feature feature = topLevelFeatures.next(); // // logger.info(feature.getUniqueName()); // // if (config.isDebugCount() && count >= config.getDebugCount()) { // break; // } // // logger.info(feature.getSeqLen()); // // if (!config.isNoContextMap()) { // int len = feature.getSeqLen(); // logger.trace("About to create context map"); // if (len > CacheDBHelper.MIN_CONTEXT_LENGTH_BASES) { // CacheDBHelper.populateContextMapCache( // feature, basicGeneService, renderedDiagramFactory, diagramCache, contextMapMap); // } else { // logger.warn(String.format("Attempting tile width of %d for top level feature %s.", len, feature.getUniqueName())); // CacheDBHelper.populateContextMapCache( // feature, basicGeneService, renderedDiagramFactory, diagramCache, contextMapMap, len); // } // logger.trace("Created context map "); // } // // @SuppressWarnings("unchecked") // List<Feature> features = session.createQuery( // "select fl.feature from FeatureLoc fl" + // " where fl.sourceFeature = :feature") // .setParameter("feature", feature).list(); // // for (Feature f : features) { // if (f instanceof AbstractGene) { // populateDtoCache((AbstractGene) f); // } // } // // session.clear(); // count++; // logger.info(String.format("Count %d of %s : Total run time %.02fs", // count, "unknown", (double)(System.currentTimeMillis() - start)/1000)); // } // } // // private void populateCacheForGene(String geneUniqueName) { // //Get the Gene // AbstractGene gene = CacheDBHelper.findGene(geneUniqueName, sessionFactory); // // if (gene == null) { // logger.error("Could not find gene with uniqueName '" // + geneUniqueName + "'"); // } else { // populateDtoCache(gene); // } // } // // @Transactional // private Iterator<Feature> getTopLevelFeatures() { // Session session = SessionFactoryUtils.getSession(sessionFactory, true); // Query q; // // if (config.isOrganisms()) { // q = session.createQuery( // "select fp.feature" + // " from FeatureProp fp" + // " where fp.cvTerm.name = 'top_level_seq'" + // " and fp.cvTerm.cv.name = 'genedb_misc'" + // " and fp.feature.organism.commonName in (:orgNames)") // .setString("orgNames", config.getOrganisms().replaceAll(":", ", ")); // } else { // q = session.createQuery( // "select fp.feature" + // " from FeatureProp fp" + // " where fp.cvTerm.name='top_level_seq'" + // " and fp.cvTerm.cv.name = 'genedb_misc'"); // } // // logger.info(config.getOrganisms()); // logger.info(q.getQueryString()); // // // @SuppressWarnings("unchecked") // Iterator<Feature> iterator = q.iterate(); // return iterator; // } // // //DtoDb dtoDb; // // private void populateDtoCache(AbstractGene gene) { // for (Transcript transcript : gene.getTranscripts()) { // // if (transcript.isObsolete()) { // continue; // } // // TranscriptDTO dto = modelBuilder.prepareTranscript(transcript); // dtoMap.put(transcript.getFeatureId(), dto); // //dtoDb.persistDTO(dto, transcript.getFeatureId()); // } // } // // public void setModelBuilder(ModelBuilder modelBuilder) { // this.modelBuilder = modelBuilder; // } // // public void setDiagramCache(DiagramCache diagramCache) { // this.diagramCache = diagramCache; // } // // public void setLuceneIndexFactory(LuceneIndexFactory luceneIndexFactory) { // this.luceneIndexFactory = luceneIndexFactory; // } // // public void setConfig(PopulateCachesArgs pca) { // this.config = pca; // if (pca.isGlobalFileRoot()) { // logger.error("Setting global file root to '"+pca.getGlobalFileRoot()+"'"); // bmf.setRootDirectory(pca.getGlobalFileRoot()); // } else { // logger.error("Not setting global file root"); // } // } // // public void setDtoMap(StoredMap<Integer, TranscriptDTO> dtoMap) { // this.dtoMap = dtoMap; // } // // public void setContextMapMap(StoredMap<Integer, String> contextMapMap) { // this.contextMapMap = contextMapMap; // } // // // interface PopulateCachesArgs { // @Option(shortName="o", description="Only populate cache for this organism") // String getOrganisms(); // // boolean isOrganisms(); // // @Option // String getGlobalFileRoot(); // // boolean isGlobalFileRoot(); // // @Option // int getDebugCount(); // // boolean isDebugCount(); // // @Option(longName="ncm", description="Don't generate context maps") // boolean isNoContextMap(); // // @Option(longName="gene") // String getGeneUniqueName(); // // boolean isGeneUniqueName(); // } // // // public void setBerkeleyMapFactory(BerkeleyMapFactory bmf) { // this.bmf = bmf; // } // // public void setRenderedDiagramFactory(RenderedDiagramFactory renderedDiagramFactory) { // this.renderedDiagramFactory = renderedDiagramFactory; // } //}