/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.testdata.model.table.exec.descs;
import org.rf.ide.core.testdata.model.FilePosition;
import org.rf.ide.core.testdata.model.table.exec.descs.ast.Container;
import org.rf.ide.core.testdata.model.table.exec.descs.ast.VariableStructureExtractor;
import org.rf.ide.core.testdata.model.table.exec.descs.ast.mapping.DeclarationMapper;
import org.rf.ide.core.testdata.model.table.exec.descs.ast.mapping.IElementDeclaration;
import org.rf.ide.core.testdata.model.table.exec.descs.ast.mapping.MappingResult;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
public class VariableExtractor {
private final VariableStructureExtractor structureExtractor;
private final DeclarationMapper mapper;
public VariableExtractor() {
this.structureExtractor = new VariableStructureExtractor();
this.mapper = new DeclarationMapper();
}
public MappingResult extract(final FilePosition fp, final String text, final String fileName) {
try {
final Container mainContainer = structureExtractor.buildStructureTree(text);
String extractionInsideFile = fileName;
if (fileName == null) {
extractionInsideFile = "<NOT_SET>";
}
final MappingResult result = mapper.map(fp, mainContainer, extractionInsideFile);
for (final IElementDeclaration dec : result.getMappedElements()) {
dec.setRobotTokenPosition(fp);
}
return result;
} catch (final Exception e) {
throw new VariableExtractionException("An exception occurs during variable extraction in file " + fileName
+ " at position " + fp + " for text " + text, e);
}
}
public MappingResult extract(final RobotToken token, final String fileName) {
return extract(token.getFilePosition(), token.getText().toString(), fileName);
}
private static class VariableExtractionException extends RuntimeException {
public VariableExtractionException(final String message, final Throwable cause) {
super(message, cause);
}
}
}