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);
}
}
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);
}
}
Aggregations