/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.testdata.mapping.collect;
import java.util.Arrays;
import java.util.List;
import org.rf.ide.core.testdata.model.RobotFileOutput;
import org.rf.ide.core.testdata.text.read.IRobotTokenType;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
/**
* @author wypych
*/
public class RobotTokensCollector {
private final List<ITableTokensCollector> tokenCollectors;
@VisibleForTesting
protected RobotTokensCollector(final List<ITableTokensCollector> tokenCollectors) {
this.tokenCollectors = tokenCollectors;
}
public RobotTokensCollector() {
this(Arrays.asList(new SettingsTokenCollector(), new VariablesTokenCollector(), new KeywordsTokenCollector(),
new TestCasesTokenCollector()));
}
public ListMultimap<RobotTokenType, RobotToken> extractRobotTokens(final RobotFileOutput tokensHolder) {
final ListMultimap<RobotTokenType, RobotToken> tokensPerType = ArrayListMultimap.create();
for (final ITableTokensCollector collector : tokenCollectors) {
final List<RobotToken> tokens = collector.collect(tokensHolder);
update(tokens, tokensPerType);
tokens.clear();
}
return tokensPerType;
}
@VisibleForTesting
protected void update(final List<RobotToken> tokens, final ListMultimap<RobotTokenType, RobotToken> tokensPerType) {
for (final RobotToken t : tokens) {
final List<IRobotTokenType> types = t.getTypes();
final RobotTokenType type;
if (!types.isEmpty()) {
type = (RobotTokenType) types.get(0);
} else {
type = RobotTokenType.UNKNOWN;
}
tokensPerType.put(type, t);
}
}
}