package eu.dnetlib.espas.gui.shared;

import com.google.gwt.user.client.rpc.IsSerializable;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by stefania on 10/1/14.
 */
public class QueryOptions implements IsSerializable, Serializable {

    private List<Vocabulary> instruments = new ArrayList<Vocabulary>();
    private List<Vocabulary> computations = new ArrayList<Vocabulary>();
    private List<Vocabulary> procedures = new ArrayList<Vocabulary>();

    private List<Vocabulary> observedProperties = new ArrayList<Vocabulary>();

    private List<Vocabulary> observationCollections = new ArrayList<Vocabulary>();

    private List<TimePeriodQueryOption> timePeriods = new ArrayList<TimePeriodQueryOption>();

    private List<Vocabulary> platforms = new ArrayList<Vocabulary>();
    private List<Vocabulary> regionsOfSpace = new ArrayList<Vocabulary>();
    private List<Vocabulary> dimensionalityTimelines = new ArrayList<Vocabulary>();
    private List<Vocabulary> dimensionalityInstances = new ArrayList<Vocabulary>();
    private List<Vocabulary> projects = new ArrayList<Vocabulary>();
    private List<Vocabulary> years = new ArrayList<Vocabulary>();

    private TimePeriodElementValues locationTimePeriod;
    private LocationFormValues locationFormValues;

    public QueryOptions() {}

    public QueryOptions(QueryOptions queryOptions) {

        super();
        instruments.addAll(queryOptions.getInstruments());
        computations.addAll(queryOptions.getComputations());
        procedures.addAll(queryOptions.getProcedures());
        observedProperties.addAll(queryOptions.getObservedProperties());
        observationCollections.addAll(queryOptions.getObservationCollections());
        timePeriods.addAll(queryOptions.getTimePeriods());
        platforms.addAll(queryOptions.getPlatforms());
        regionsOfSpace.addAll(queryOptions.getRegionsOfSpace());
        dimensionalityTimelines.addAll(queryOptions.getDimensionalityTimelines());
        dimensionalityInstances.addAll(queryOptions.getDimensionalityInstances());
        projects.addAll(queryOptions.getProjects());
        years.addAll(queryOptions.getYears());
    }

    public List<Vocabulary> getInstruments() {
        return instruments;
    }

    public void setInstruments(List<Vocabulary> instruments) {
        this.instruments = instruments;
    }

    public List<Vocabulary> getComputations() {
        return computations;
    }

    public void setComputations(List<Vocabulary> computations) {
        this.computations = computations;
    }

    public List<Vocabulary> getProcedures() {
        return procedures;
    }

    public void setProcedures(List<Vocabulary> procedures) {
        this.procedures = procedures;
    }

    public List<Vocabulary> getObservedProperties() {
        return observedProperties;
    }

    public void setObservedProperties(List<Vocabulary> observedProperties) {
        this.observedProperties = observedProperties;
    }

    public List<Vocabulary> getObservationCollections() {
        return observationCollections;
    }

    public void setObservationCollections(List<Vocabulary> observationCollections) {
        this.observationCollections = observationCollections;
    }

    public List<TimePeriodQueryOption> getTimePeriods() {
        return timePeriods;
    }

    public void setTimePeriods(List<TimePeriodQueryOption> timePeriods) {
        this.timePeriods = timePeriods;
    }

    public List<Vocabulary> getPlatforms() {
        return platforms;
    }

    public void setPlatforms(List<Vocabulary> platforms) {
        this.platforms = platforms;
    }

    public List<Vocabulary> getRegionsOfSpace() {
        return regionsOfSpace;
    }

    public void setRegionsOfSpace(List<Vocabulary> regionsOfSpace) {
        this.regionsOfSpace = regionsOfSpace;
    }

    public List<Vocabulary> getDimensionalityTimelines() {
        return dimensionalityTimelines;
    }

    public void setDimensionalityTimelines(List<Vocabulary> dimensionalityTimelines) {
        this.dimensionalityTimelines = dimensionalityTimelines;
    }

    public List<Vocabulary> getDimensionalityInstances() {
        return dimensionalityInstances;
    }

    public void setDimensionalityInstances(List<Vocabulary> dimensionalityInstances) {
        this.dimensionalityInstances = dimensionalityInstances;
    }

    public List<Vocabulary> getProjects() {
        return projects;
    }

    public void setProjects(List<Vocabulary> projects) {
        this.projects = projects;
    }

    public List<Vocabulary> getYears() {
        return years;
    }

    public void setYears(List<Vocabulary> years) {
        this.years = years;
    }

    public TimePeriodElementValues getLocationTimePeriod() {
        return locationTimePeriod;
    }

    public void setLocationTimePeriod(TimePeriodElementValues locationTimePeriod) {
        this.locationTimePeriod = locationTimePeriod;
    }

    public LocationFormValues getLocationFormValues() {
        return locationFormValues;
    }

    public void setLocationFormValues(LocationFormValues locationFormValues) {
        this.locationFormValues = locationFormValues;
    }
}
