/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dashbuilder.dataset.sort;
import java.util.List;
import java.util.ArrayList;
import org.dashbuilder.dataset.DataSetOpType;
import org.dashbuilder.dataset.impl.AbstractDataSetOp;
/**
* A data set sort operation definition
*/
public class DataSetSort extends AbstractDataSetOp {
protected List<ColumnSort> columnSortList = new ArrayList<ColumnSort>();
public DataSetOpType getType() {
return DataSetOpType.SORT;
}
public void addSortColumn(ColumnSort... columnSorts) {
for (ColumnSort columnSort : columnSorts) {
columnSortList.add(columnSort);
}
}
public List<ColumnSort> getColumnSortList() {
return columnSortList;
}
/**
* Invert the sort order if this sort operation.
*/
public DataSetSort invertOrder() {
for (ColumnSort columnSort : getColumnSortList()) {
SortOrder order = columnSort.getOrder();
if (SortOrder.ASCENDING.equals(order)) columnSort.setOrder(SortOrder.DESCENDING);
else if (SortOrder.DESCENDING.equals(order)) columnSort.setOrder(SortOrder.ASCENDING);
}
return this;
}
/**
* Clone this sort operation.
*/
public DataSetSort cloneInstance() {
DataSetSort clone = new DataSetSort();
for (ColumnSort columnSort : columnSortList) {
clone.addSortColumn(columnSort.cloneInstance());
}
return clone;
}
public boolean equals(Object obj) {
try {
DataSetSort other = (DataSetSort) obj;
if (columnSortList.size() != other.columnSortList.size()) return false;
for (int i = 0; i < columnSortList.size(); i++) {
ColumnSort el = columnSortList.get(i);
ColumnSort otherEl = other.columnSortList.get(i);
if (!el.equals(otherEl)) return false;
}
return true;
} catch (ClassCastException e) {
return false;
}
}
}