package com.thoughtworks.webanalyticsautomation.inputdata;
/**
* Created by: Anand Bagmar
* Email: abagmar@gmail.com
* Date: Dec 29, 2010
* Time: 9:34:02 AM
*
* Copyright 2010 Anand Bagmar (abagmar@gmail.com). Distributed under the Apache 2.0 License
*/
import com.thoughtworks.webanalyticsautomation.common.CONFIG;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import org.apache.log4j.Logger;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import static com.thoughtworks.webanalyticsautomation.common.FileUtils.deserializeSectionsFromFile;
public class TestData extends CONFIG implements Serializable {
static {
logger = Logger.getLogger(TestData.class.getName());
}
private static final HashMap<String, ArrayList<Section>> loadedSections = new HashMap <String, ArrayList<Section>>();
private final ArrayList <Section> sectionsLoadedFromFile = new ArrayList<Section>();
public static ArrayList<Section> getSectionsFor(String absoluteFilePath, String actionName) {
logger.info ("Loading input data file: " + absoluteFilePath);
loadFile(absoluteFilePath);
ArrayList<Section> subsetList = getExpectedSectionsForActionNameFromLoadedSections(absoluteFilePath, actionName);
if (!CONFIG.isKEEP_LOADED_INPUT_FILE_IN_MEMORY()) {
logger.info("Removing input data file " + absoluteFilePath + " from memory");
loadedSections.remove(absoluteFilePath);
}
return subsetList;
}
private static ArrayList<Section> getExpectedSectionsForActionNameFromLoadedSections(String absoluteFilePath, String actionName) {
ArrayList<Section> subsetList = new ArrayList<Section>();
for (Section section: loadedSections.get(absoluteFilePath)) {
if (section.hasAction(actionName)) {
subsetList.add(section);
}
}
return subsetList;
}
public ArrayList<Section> getSectionsLoadedFromFile() {
return sectionsLoadedFromFile;
}
private static void loadFile(String absoluteFilePath) {
if (isFileLoaded(absoluteFilePath)) {
logger.info ("Input file is already loaded in memory");
}
else {
logger.info ("Loading Input data file ...");
loadedSections.put(absoluteFilePath, deserializeSectionsFromFile(absoluteFilePath, configureXStream()));
}
}
static boolean isFileLoaded(String absoluteFilePath) {
boolean isTestDataFileLoaded = loadedSections.containsKey(absoluteFilePath);
logger.debug (absoluteFilePath + " file loaded: " + isTestDataFileLoaded);
return isTestDataFileLoaded;
}
private static XStream configureXStream() {
XStream xStream = new XStream(new DomDriver());
xStream.alias("Sections", TestData.class);
xStream.omitField(TestData.class, "loadedSections");
xStream.addImplicitCollection(TestData.class, "sectionsLoadedFromFile", "Section", Section.class);
xStream = Section.configurePageLayoutXStream(xStream);
return xStream;
}
}