/*
* 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.importer;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.rf.ide.core.testdata.model.table.setting.VariablesImport;
public class VariablesFileImportReference {
public static final long FILE_NOT_EXIST_EPOCH = 0;
private final VariablesImport importDeclaration;
private long lastModificationEpoch = FILE_NOT_EXIST_EPOCH;
private File variablesFile;
private List<AVariableImported<?>> variables = new ArrayList<>();
public VariablesFileImportReference(final VariablesImport importDeclaration) {
this.importDeclaration = importDeclaration;
}
public VariablesImport getImportDeclaration() {
return importDeclaration;
}
public void setVariablesFile(final File variablesFile) {
this.variablesFile = variablesFile;
this.lastModificationEpoch = variablesFile.lastModified();
}
public File getVariablesFile() {
return variablesFile;
}
public List<AVariableImported<?>> getVariables() {
return Collections.unmodifiableList(variables);
}
public void setLastModificationEpochTime(final long lastModificationEpoch) {
this.lastModificationEpoch = lastModificationEpoch;
}
public long getLastModificationEpochTime() {
return lastModificationEpoch;
}
public void map(final Map<?, ?> varsRead) {
final Set<?> variablesNames = varsRead.keySet();
for (final Object varName : variablesNames) {
final Object varValue = varsRead.get(varName);
AVariableImported<?> var;
if (varValue instanceof List) {
final ListVariableImported listVar = new ListVariableImported("" + varName);
listVar.setValue((List<?>) varValue);
var = listVar;
} else if (varValue instanceof Map) {
final DictionaryVariableImported dictVar = new DictionaryVariableImported("" + varName);
dictVar.setValue(convert((Map<?, ?>) varValue));
var = dictVar;
} else if (varValue != null && varValue.getClass().isArray()) {
final ListVariableImported arrayAsList = new ListVariableImported("" + varName);
arrayAsList.setValue(Arrays.asList((Object[]) varValue));
var = arrayAsList;
} else {
final ScalarVariableImported scalarVar = new ScalarVariableImported("" + varName);
if (scalarVar != null) {
scalarVar.setValue("" + varValue);
}
var = scalarVar;
}
variables.add(var);
}
}
private Map<String, Object> convert(final Map<?, ?> m) {
final Map<String, Object> map = new LinkedHashMap<>();
for (final Object key : m.keySet()) {
map.put((String) key, m.get(key));
}
return map;
}
public VariablesFileImportReference copy(final VariablesImport importDeclaration) {
final VariablesFileImportReference newVarImportRef = new VariablesFileImportReference(importDeclaration);
newVarImportRef.setVariablesFile(variablesFile.getAbsoluteFile());
newVarImportRef.variables = variables;
return newVarImportRef;
}
}