package eu.dnetlib.shared;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlRootElement;

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

@XmlRootElement
public class ValuesOfFields implements IsSerializable{

	private String URL = new String();
	private static ValuesOfFields instance = new ValuesOfFields();
	private String chartType = new String();
	private String dataSeries = new String();
	private String title = new String();
	private String subtitle = new String();
	private String yaxis = new String();
	private String xaxis = new String();
	private String field = new String();
	private String steps = new String();
	private int numberOfResults=30;
	private int rotation = 0;
	private int optionSelected=0;
	private int useSteps = 0;
	private boolean cumulative = false;
	private int spacingTop = 5;
	private int spacingBottom = 0;
	private int spacingRight = 0;
	private int spacingLeft = 0;
	private String colorTitle = new String();
	private String colorSubtitle = new String();
	private String colorXaxis = new String();
	private String colorYaxis = new String();
	private String sizeTitle = new String();
	private String sizeSubtitle = new String();
	private String sizeXaxis = new String();
	private String sizeYaxis = new String();
	
	
	private Data rowData = new Data();
	private ArrayList<Data> columnsDataList = new ArrayList<Data>();

	public ValuesOfFields(){
		
	}
	
	public String getColorTitle() {
		return colorTitle;
	}

	public void setColorTitle(String colorTitle) {
		this.colorTitle = colorTitle;
	}

	public String getColorSubtitle() {
		return colorSubtitle;
	}

	public void setColorSubtitle(String colorSubtitle) {
		this.colorSubtitle = colorSubtitle;
	}

	public String getColorXaxis() {
		return colorXaxis;
	}

	public void setColorXaxis(String colorXaxis) {
		this.colorXaxis = colorXaxis;
	}

	public String getColorYaxis() {
		return colorYaxis;
	}

	public void setColorYaxis(String colorYaxis) {
		this.colorYaxis = colorYaxis;
	}

	public String getSizeTitle() {
		return sizeTitle;
	}

	public void setSizeTitle(String sizeTitle) {
		this.sizeTitle = sizeTitle;
	}

	public String getSizeSubtitle() {
		return sizeSubtitle;
	}

	public void setSizeSubtitle(String sizeSubtitle) {
		this.sizeSubtitle = sizeSubtitle;
	}

	public String getSizeXaxis() {
		return sizeXaxis;
	}

	public void setSizeXaxis(String sizeXaxis) {
		this.sizeXaxis = sizeXaxis;
	}

	public String getSizeYaxis() {
		return sizeYaxis;
	}

	public void setSizeYaxis(String sizeYaxis) {
		this.sizeYaxis = sizeYaxis;
	}

	public int getSpacingTop() {
		return spacingTop;
	}



	public void setSpacingTop(int spacingTop) {
		this.spacingTop = spacingTop;
	}



	public int getSpacingBottom() {
		return spacingBottom;
	}



	public void setSpacingBottom(int spacingBottom) {
		this.spacingBottom = spacingBottom;
	}



	public int getSpacingRight() {
		return spacingRight;
	}



	public void setSpacingRight(int spacingRight) {
		this.spacingRight = spacingRight;
	}



	public int getSpacingLeft() {
		return spacingLeft;
	}



	public void setSpacingLeft(int spacingLeft) {
		this.spacingLeft = spacingLeft;
	}



	public boolean isCumulative() {
		return cumulative;
	}

	public void setCumulative(boolean cumulative) {
		this.cumulative = cumulative;
	}


	public int getUseSteps() {
		return useSteps;
	}

	public void setUseSteps(int useSteps) {
		this.useSteps = useSteps;
	}

	public String getSteps() {
		return steps;
	}

	public void setSteps(String steps) {
		this.steps = steps;
	}

	public int getNumberOfResults() {
		return numberOfResults;
	}

	public void setNumberOfResults(int numberOfResults) {
		this.numberOfResults = numberOfResults;
	}

	public int getOptionSelected() {
		return optionSelected;
	}


	public void setOptionSelected(int optionSelected) {
		this.optionSelected = optionSelected;
	}
	
	public int getRotation() {
		return rotation;
	}

	public void setRotation(int rotation) {
		this.rotation = rotation;
	}

	public String getXaxis() {
		return xaxis;
	}

	public void setXaxis(String xaxis) {
		this.xaxis = xaxis;
	}

	public static ValuesOfFields getInstance() {
		return instance;
	}

	public static void setInstance(ValuesOfFields valuesOfFields){
		instance = valuesOfFields;
	}
	
	public String getURL() {
		return URL;
	}


	public void setURL(String uRL) {
		URL = uRL;
	}


	public String getTitle() {
		return title;
	}


	public void setTitle(String title) {
		this.title = title;
	}


	public String getSubtitle() {
		return subtitle;
	}


	public void setSubtitle(String subtitle) {
		this.subtitle = subtitle;
	}

	public String getYaxis() {
		return yaxis;
	}


	public void setYaxis(String yaxis) {
		this.yaxis = yaxis;
	}


	public String getField() {
		return field;
	}


	public void setField(String field) {
		this.field = field;
	}


	public String getChartType() {
		return chartType;
	}

	public void setChartType(String chartType) {
		this.chartType = chartType;
	}

	public String getDataSeries() {
		return dataSeries;
	}

	public void setDataSeries(String dataSeries) {
		this.dataSeries = dataSeries;
	}

	public Data getRowData() {
		return rowData;
	}

	public void setRowData(Data rowData) {
		this.rowData = rowData;
	}

	public ArrayList<Data> getColumnsDataList() {
		return columnsDataList;
	}

	public void setColumnsDataList(ArrayList<Data> columnsDataList) {
		this.columnsDataList = columnsDataList;
	}

	
	public static class Data implements IsSerializable{
		
		private String DataSource = new String();
		private String typeOf = new String();
		private String extra_type = new String();
		private String x_values = new String();
		private String y_values = new String();
		private String splitBy = new String();
		private String designAs;
		private ArrayList<FilterClass> filters = new ArrayList<FilterClass>();
		private int indexOfColumnInSchema;
		private int indexOfTypeOf;
		private int indexOfDataSource;
		private int indexOfX_values;
		private int indexOfY_values;
		private int indexOfDesignAs;
		private String xaxisTitle = new String();
		private String main_extra_type = new String();
		private String typeOfChart = new String();
		private String stacking = new String();
		private boolean enabled = true;
		
		public Data(){
			
		}

		public boolean isEnabled() {
			return enabled;
		}

		public void setEnabled(boolean enabled) {
			this.enabled = enabled;
		}



		public String getTypeOfChart() {
			return typeOfChart;
		}



		public void setTypeOfChart(String typeOfChart) {
			this.typeOfChart = typeOfChart;
		}



		public String getStacking() {
			return stacking;
		}



		public void setStacking(String stacking) {
			this.stacking = stacking;
		}



		public String getSplitBy() {
			return splitBy;
		}

		public void setSplitBy(String splitBy) {
			this.splitBy = splitBy;
		}



		public String getXaxisTitle() {
			return xaxisTitle;
		}



		public void setXaxisTitle(String xaxisTitle) {
			this.xaxisTitle = xaxisTitle;
		}



		public String getDesignAs() {
			return designAs;
		}


		public void setDesignAs(String designAs) {
			this.designAs = designAs;
		}


		public int getIndexOfDesignAs() {
			return indexOfDesignAs;
		}


		public void setIndexOfDesignAs(int indexOfDesignAs) {
			this.indexOfDesignAs = indexOfDesignAs;
		}


		public String getY_values() {
			return y_values;
		}

		public void setY_values(String y_values) {
			this.y_values = y_values;
		}

		public int getIndexOfY_values() {
			return indexOfY_values;
		}

		public void setIndexOfY_values(int indexOfY_values) {
			this.indexOfY_values = indexOfY_values;
		}

		public int getIndexOfX_values() {
			return indexOfX_values;
		}


		public void setIndexOfX_values(int indexOfX_values) {
			this.indexOfX_values = indexOfX_values;
		}


		public String getMain_extra_type() {
			return main_extra_type;
		}


		public void setMain_extra_type(String main_extra_type) {
			this.main_extra_type = main_extra_type;
		}


		public String getX_values() {
			return x_values;
		}


		public void setX_values(String x_values) {
			this.x_values = x_values;
		}


		public int getIndexOfTypeOf() {
			return indexOfTypeOf;
		}
		
		public String getExtra_type() {
			return extra_type;
		}

		public void setExtra_type(String extra_type) {
			this.extra_type = extra_type;
		}

		public void setIndexOfTypeOf(int indexOfTypeOf) {
			this.indexOfTypeOf = indexOfTypeOf;
		}

		public int getIndexOfDataSource() {
			return indexOfDataSource;
		}

		public void setIndexOfDataSource(int indexOfDataSource) {
			this.indexOfDataSource = indexOfDataSource;
		}

		public int getIndexOfColumnInSchema() {
			return indexOfColumnInSchema;
		}
		
		public void setIndexOfColumnInSchema(int indexOfRowInSchema) {
			this.indexOfColumnInSchema = indexOfRowInSchema;
		}
		
		public String getDataSource() {
			return DataSource;
		}
		public void setDataSource(String dataSource) {
			this.DataSource = dataSource;
		}
		public String getTypeOf() {
			return typeOf;
		}
		public void setTypeOf(String typeOf) {
			this.typeOf = typeOf;
		}
		public ArrayList<FilterClass> getFilters() {
			return filters;
		}
		public void setFilters(ArrayList<FilterClass> filters) {
			this.filters = filters;
		}
		
		public static class FilterClass implements IsSerializable{
			
			private String GroupBy;
			private String Type;
			private ArrayList<String> discreteValues = new ArrayList<String>();
			private String ValueFrom,ValueTo;
			private int row;
			private String fieldValue;
		
			public FilterClass(){
				
			}
			
			public String getFieldValue() {
				return fieldValue;
			}

			public void setFieldValue(String fieldValue) {
				this.fieldValue = fieldValue;
			}
			
			public ArrayList<String> getDiscreteValues() {
				return discreteValues;
			}

			public void setDiscreteValues(ArrayList<String> discreteValues) {
				this.discreteValues = discreteValues;
			}

			public int getRow() {
				return row;
			}

			public void setRow(int row) {
				this.row = row;
			}

			public  FilterClass(String GroupBy , String Type,ArrayList<String> discreteValues){
				this.GroupBy = GroupBy;
				this.Type = Type;
				this.discreteValues = discreteValues;
				this.row=-1;
			}
			
			public  FilterClass(String GroupBy , String Type,String ValueFrom , String ValueTo){
				this.GroupBy = GroupBy;
				this.Type = Type;
				this.ValueFrom = ValueFrom;
				this.ValueTo = ValueTo;
				this.row=-1;
			}
			
			public String getGroupBy() {
				return GroupBy;
			}

			public void setGroupBy(String groupBy) {
				GroupBy = groupBy;
			}

			public String getType() {
				return Type;
			}

			public void setType(String type) {
				Type = type;
			}

			public String getValueFrom() {
				return ValueFrom;
			}

			public void setValueFrom(String valueFrom) {
				ValueFrom = valueFrom;
			}

			public String getValueTo() {
				return ValueTo;
			}

			public void setValueTo(String valueTo) {
				ValueTo = valueTo;
			}
		}	
	}
	
}
