/*
* Copyright (C) 2014 The Calrissian Authors
*
* 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.calrissian.flowmix.core.support;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.calrissian.flowmix.api.Order;
import org.calrissian.flowmix.core.support.window.WindowItem;
import org.calrissian.mango.domain.Pair;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
public class EventSortByComparator implements Comparator<WindowItem> {
private static ComparableComparator comparator = new ComparableComparator();
private List<Pair<String,Order>> sortBy;
public EventSortByComparator(List<Pair<String,Order>> sortBy) {
checkNotNull(sortBy);
checkArgument(sortBy.size() > 0);
this.sortBy = sortBy;
}
@Override
public int compare(WindowItem windowItem, WindowItem windowItem2) {
for(Pair<String,Order> sortField : sortBy) {
Object val1 = windowItem.getEvent().get(sortField.getOne()).getValue();
Object val2 = windowItem2.getEvent().get(sortField.getOne()).getValue();
int compare = comparator.compare(val1,val2);
if(compare != 0)
return sortField.getTwo() == Order.DESC ? compare * -1 : compare;
}
return 0; // if they are the same then they're the same...
}
}