Search in sources :

Example 1 with SBOLParser

use of org.jbei.ice.lib.parsers.sbol.SBOLParser in project ice by JBEI.

the class PartSequence method parseSequenceFile.

/**
 * Parses a sequence in a file and associates it with the current entry
 *
 * @param inputStream      input stream of bytes representing the file
 * @param fileName         name of file being parsed
 * @param extractHierarchy for SBOL2 sequences only. If set to <code>true</code>, creates a hierarchy of ICE entries
 *                         as needed
 * @return wrapper around the internal model used to represent sequence information
 * @throws IOException on Exception parsing the contents of the file
 */
public SequenceInfo parseSequenceFile(InputStream inputStream, String fileName, boolean extractHierarchy) throws IOException {
    AbstractParser parser;
    // write sequence file to disk (tmp)
    String tmpDir = new ConfigurationSettings().getPropertyValue(ConfigurationKey.TEMPORARY_DIRECTORY);
    if (StringUtils.isEmpty(tmpDir))
        throw new IllegalArgumentException("Cannot parse sequence without valid tmp directory");
    Path tmpPath = Paths.get(tmpDir);
    if (!Files.isDirectory(tmpPath) || !Files.isWritable(tmpPath))
        throw new IllegalArgumentException("Cannot write to tmp directory: " + tmpPath.toString());
    Path sequencePath = Paths.get(tmpPath.toString(), UUID.randomUUID().toString() + "-" + fileName);
    Files.copy(inputStream, sequencePath, StandardCopyOption.REPLACE_EXISTING);
    // detect sequence
    SequenceFormat format;
    try (InputStream fileInputStream = Files.newInputStream(sequencePath);
        LineIterator iterator = IOUtils.lineIterator(fileInputStream, StandardCharsets.UTF_8)) {
        if (!iterator.hasNext())
            throw new IOException("Cannot read stream for " + fileName);
        String firstLine = iterator.next();
        format = SequenceUtil.detectFormat(firstLine);
    }
    // special handling for sbol format
    try {
        if (format == SBOL2) {
            SBOLParser sbolParser = new SBOLParser(this.userId, Long.toString(this.entry.getId()), extractHierarchy);
            return sbolParser.parseToEntry(Files.newInputStream(sequencePath), fileName);
        }
        switch(format) {
            case GENBANK:
                parser = new GenBankParser();
                break;
            case FASTA:
                parser = new FastaParser();
                break;
            default:
            case PLAIN:
                parser = new PlainParser();
                break;
        }
        LineIterator iterator = IOUtils.lineIterator(Files.newInputStream(sequencePath), StandardCharsets.UTF_8);
        SequenceFile sequenceFile = new SequenceFile();
        String entryType = this.entry.getRecordType();
        // special handling for SBOL (todo: clean this up in future release)
        FeaturedDNASequence dnaSequence = parser.parse(iterator, entryType);
        Sequence sequence = SequenceUtil.dnaSequenceToSequence(dnaSequence);
        if (sequence == null)
            throw new IOException("Could not create sequence object");
        // copy original sequence file to file system
        try {
            Files.copy(sequencePath, sequenceFile.getFilePath(), StandardCopyOption.REPLACE_EXISTING);
            sequence.setSequenceUser(sequenceFile.getFileName());
        } catch (Exception e) {
            // ok to ignore. Can get back sequence as long as sequence object is saved. cannot download original
            Logger.warn("Exception writing sequence to file: " + e.getMessage());
        }
        sequence.setFileName(fileName);
        sequence.setFormat(format);
        sequence = saveSequenceObject(sequence);
        SequenceInfo info = sequence.toDataTransferObject();
        info.setSequence(dnaSequence);
        return info;
    } catch (InvalidFormatParserException ifpe) {
        Logger.error(ifpe);
        return null;
    } finally {
        Files.deleteIfExists(sequencePath);
    }
}
Also used : Path(java.nio.file.Path) AbstractParser(org.jbei.ice.lib.parsers.AbstractParser) SequenceInfo(org.jbei.ice.lib.dto.entry.SequenceInfo) InputStream(java.io.InputStream) IOException(java.io.IOException) FastaParser(org.jbei.ice.lib.parsers.fasta.FastaParser) FeaturedDNASequence(org.jbei.ice.lib.dto.FeaturedDNASequence) InvalidFormatParserException(org.jbei.ice.lib.parsers.InvalidFormatParserException) LineIterator(org.apache.commons.io.LineIterator) FeaturedDNASequence(org.jbei.ice.lib.dto.FeaturedDNASequence) IOException(java.io.IOException) InvalidFormatParserException(org.jbei.ice.lib.parsers.InvalidFormatParserException) GenBankParser(org.jbei.ice.lib.parsers.genbank.GenBankParser) SBOLParser(org.jbei.ice.lib.parsers.sbol.SBOLParser) PlainParser(org.jbei.ice.lib.parsers.PlainParser) ConfigurationSettings(org.jbei.ice.lib.config.ConfigurationSettings)

Example 2 with SBOLParser

use of org.jbei.ice.lib.parsers.sbol.SBOLParser in project ice by JBEI.

the class PartSequence method parseSequenceFile.

/**
     * Parses a sequence in a file and associates it with the current entry
     *
     * @param inputStream input stream of bytes representing the file
     * @param fileName    name of file being parsed
     * @return wrapper around the internal model used to represent sequence information
     * @throws IOException on Exception parsing the contents of the file
     */
public SequenceInfo parseSequenceFile(InputStream inputStream, String fileName) throws IOException {
    try {
        AbstractParser parser;
        String sequenceString = Utils.getString(inputStream);
        switch(detectFormat(sequenceString)) {
            case GENBANK:
                parser = new GenBankParser();
                break;
            case SBOL2:
                SBOLParser sbolParser = new SBOLParser(this.userId, Long.toString(this.entry.getId()));
                return sbolParser.parseToEntry(sequenceString, fileName);
            case FASTA:
                parser = new FastaParser();
                break;
            default:
            case PLAIN:
                parser = new PlainParser();
                break;
        }
        // parse actual sequence
        DNASequence sequence = parser.parse(sequenceString);
        return save(sequence, sequenceString, fileName);
    } catch (InvalidFormatParserException e) {
        Logger.error(e);
        throw new IOException(e);
    }
}
Also used : GenBankParser(org.jbei.ice.lib.parsers.genbank.GenBankParser) AbstractParser(org.jbei.ice.lib.parsers.AbstractParser) SBOLParser(org.jbei.ice.lib.parsers.sbol.SBOLParser) PlainParser(org.jbei.ice.lib.parsers.PlainParser) FastaParser(org.jbei.ice.lib.parsers.fasta.FastaParser) InvalidFormatParserException(org.jbei.ice.lib.parsers.InvalidFormatParserException) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)2 AbstractParser (org.jbei.ice.lib.parsers.AbstractParser)2 InvalidFormatParserException (org.jbei.ice.lib.parsers.InvalidFormatParserException)2 PlainParser (org.jbei.ice.lib.parsers.PlainParser)2 FastaParser (org.jbei.ice.lib.parsers.fasta.FastaParser)2 GenBankParser (org.jbei.ice.lib.parsers.genbank.GenBankParser)2 SBOLParser (org.jbei.ice.lib.parsers.sbol.SBOLParser)2 InputStream (java.io.InputStream)1 Path (java.nio.file.Path)1 LineIterator (org.apache.commons.io.LineIterator)1 ConfigurationSettings (org.jbei.ice.lib.config.ConfigurationSettings)1 FeaturedDNASequence (org.jbei.ice.lib.dto.FeaturedDNASequence)1 SequenceInfo (org.jbei.ice.lib.dto.entry.SequenceInfo)1