/*
* #!
* Ontopoly Editor
* #-
* Copyright (C) 2001 - 2013 The Ontopia Project
* #-
* 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 ontopoly.utils;
import java.io.Serializable;
import java.util.Comparator;
import ontopoly.model.RoleField;
import ontopoly.model.Topic;
import ontopoly.models.RoleFieldModel;
import ontopoly.models.TopicModel;
public class RoleFieldValueComparator implements Comparator<Object>, Serializable {
private TopicModel<Topic> topicModel;
private RoleFieldModel roleFieldModel;
public RoleFieldValueComparator(TopicModel<Topic> topicModel, RoleFieldModel roleFieldModel) {
this.topicModel = topicModel;
this.roleFieldModel = roleFieldModel;
}
public int compare(Object o1, Object o2) {
RoleField.ValueIF rfv1 = (RoleField.ValueIF)o1;
RoleField.ValueIF rfv2 = (RoleField.ValueIF)o2;
RoleField roleField = roleFieldModel.getRoleField();
Topic topic = topicModel.getTopic();
Topic t1 = rfv1.getPlayer(roleField, topic);
Topic t2 = rfv2.getPlayer(roleField, topic);
return TopicComparator.INSTANCE.compare(t1, t2);
// int retval = ObjectUtils.compare(rfv1.getArity(), rfv2.getArity());
// if (retval != 0) return retval;
//
// // make copy of o1 data, so that we can sort it
// RoleField[] rfields1 = new RoleField[rfv1.getArity()];
// System.arraycopy(rfv1.getRoleFields(), 0, rfields1, 0, rfields1.length);;
// Topic[] players1 = new Topic[rfields1.length];
// System.arraycopy(rfv1.getPlayers(), 0, players1, 0, players1.length);;
// ObjectUtils.sortParallel(rfields1, players1, RoleFieldComparator.INSTANCE);
//
// // make copy of o2 data, so that we can sort it
// RoleField[] rfields2 = new RoleField[rfv2.getArity()];
// System.arraycopy(rfv2.getRoleFields(), 0, rfields2, 0, rfields2.length);;
// Topic[] players2 = new Topic[rfields2.length];
// System.arraycopy(rfv2.getPlayers(), 0, players2, 0, players2.length);;
// ObjectUtils.sortParallel(rfields2, players2, RoleFieldComparator.INSTANCE);
//
// // compare players
// retval = ObjectUtils.compareArrays(players1, players2, TopicComparator.INSTANCE);
// if (retval != 0) return retval;
//
// // compare fields
// return ObjectUtils.compareArrays(rfields1, rfields2, RoleFieldComparator.INSTANCE);
}
}