/********************************************************************************
 * Copyright (c) 2015-2021 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/

package org.eclipse.mdm.query.entity;

import java.util.List;

/**
 * 
 * @author Matthias Koller, Peak Solution GmbH
 *
 */
public class QueryRequest {

	private List<SourceFilter> filters;
	private List<String> columns;
	private String resultType;
	private int resultOffset;
	private Integer resultLimit;

	public List<SourceFilter> getFilters() {
		return filters;
	}

	public void setFilters(List<SourceFilter> filters) {
		this.filters = filters;
	}

	public List<String> getColumns() {
		return columns;
	}

	public void setColumns(List<String> columns) {
		this.columns = columns;
	}

	public String getResultType() {
		return resultType;
	}

	public void setResultType(String resultType) {
		this.resultType = resultType;
	}

	public int getResultOffset() {
		return resultOffset;
	}

	public void setResultOffset(Integer resultOffset) {
		this.resultOffset = resultOffset == null ? 0 : resultOffset;
	}

	public Integer getResultLimit() {
		return resultLimit;
	}

	public void setResultLimit(Integer resultLimit) {
		this.resultLimit = (resultLimit != null && resultLimit < 0) ? 0 : resultLimit;
	}
}
