001    package net.sf.cpsolver.studentsct.heuristics.studentord;
002    
003    import net.sf.cpsolver.ifs.util.DataProperties;
004    import net.sf.cpsolver.studentsct.model.Student;
005    
006    /** 
007     * Return the given set of students in an order of average number 
008     * of choices of each student (students with more choices first), 
009     * however, real student are before last-like students.
010     * By default, the order is reversed (students with less choices first).
011     * 
012     * @version
013     * StudentSct 1.1 (Student Sectioning)<br>
014     * Copyright (C) 2007 Tomáš Müller<br>
015     * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
016     * Lazenska 391, 76314 Zlin, Czech Republic<br>
017     * <br>
018     * This library is free software; you can redistribute it and/or
019     * modify it under the terms of the GNU Lesser General Public
020     * License as published by the Free Software Foundation; either
021     * version 2.1 of the License, or (at your option) any later version.
022     * <br><br>
023     * This library is distributed in the hope that it will be useful,
024     * but WITHOUT ANY WARRANTY; without even the implied warranty of
025     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
026     * Lesser General Public License for more details.
027     * <br><br>
028     * You should have received a copy of the GNU Lesser General Public
029     * License along with this library; if not, write to the Free Software
030     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
031    */
032    public class StudentChoiceRealFirstOrder extends StudentChoiceOrder {
033        
034        public StudentChoiceRealFirstOrder(DataProperties config) {
035            super(config);
036        }
037        
038        public StudentChoiceRealFirstOrder() {
039            super(new DataProperties());
040            setReverse(true);
041        }
042        
043        public int compare(Object o1, Object o2) {
044            Student s1 = (Student)o1;
045            Student s2 = (Student)o2;
046            if (s1.isDummy()) {
047                if (!s2.isDummy()) return 1;
048            } else if (s2.isDummy()) return -1;
049            return super.compare(s1, s2);
050        }
051    
052    }