/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
package org.roda.core.data.v2.index.sort;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author Rui Castro
* @author Luis Faria
*/
public class Sorter implements Serializable {
private static final long serialVersionUID = 4255866410869992178L;
public static final Sorter NONE = new Sorter();
private List<SortParameter> parameters = new ArrayList<>();
/**
* Constructs an empty {@link Sorter}.
*/
public Sorter() {
// do nothing
}
/**
* Constructs a {@link Sorter} cloning an existing {@link Sorter}.
*
* @param sorter
* the {@link Sorter} to clone.
*/
public Sorter(Sorter sorter) {
this(sorter.getParameters());
}
public Sorter(SortParameter parameter) {
add(parameter);
}
/**
* Constructs a {@link Sorter} with the given parameters.
*
* @param parameters
* the sort parameters.
*/
public Sorter(SortParameter[] parameters) {
setParameters(parameters);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((parameters == null) ? 0 : parameters.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Sorter)) {
return false;
}
Sorter other = (Sorter) obj;
if (parameters == null) {
if (other.parameters != null) {
return false;
}
} else if (!parameters.equals(other.parameters)) {
return false;
}
return true;
}
/**
* @see Object#toString()
*/
@Override
public String toString() {
if (getParameters() != null) {
return "Sorter (" + Arrays.asList(getParameters()) + ")";
} else {
return "Sorter ()";
}
}
/**
* @return the parameters
*/
public SortParameter[] getParameters() {
return parameters.toArray(new SortParameter[parameters.size()]);
}
/**
* @param parameters
* the parameters to set
*/
public void setParameters(SortParameter[] parameters) {
this.parameters.clear();
add(parameters);
}
/**
* Adds the given parameters.
*
* @param parameters
*/
public void add(SortParameter[] parameters) {
if (parameters != null) {
this.parameters.addAll(Arrays.asList(parameters));
}
}
/**
* Adds the given parameter.
*
* @param parameter
*/
public void add(SortParameter parameter) {
if (parameters != null) {
this.parameters.add(parameter);
}
}
}