001    package net.sf.cpsolver.studentsct.heuristics.studentord;
002    
003    import java.util.Collections;
004    import java.util.Enumeration;
005    import java.util.Vector;
006    
007    import net.sf.cpsolver.ifs.util.DataProperties;
008    import net.sf.cpsolver.studentsct.model.Student;
009    
010    /** 
011     * Return the given set of students in a random order, however, 
012     * all real students before last-like students. 
013     * 
014     * @version
015     * StudentSct 1.1 (Student Sectioning)<br>
016     * Copyright (C) 2007 Tomáš Müller<br>
017     * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
018     * Lazenska 391, 76314 Zlin, Czech Republic<br>
019     * <br>
020     * This library is free software; you can redistribute it and/or
021     * modify it under the terms of the GNU Lesser General Public
022     * License as published by the Free Software Foundation; either
023     * version 2.1 of the License, or (at your option) any later version.
024     * <br><br>
025     * This library is distributed in the hope that it will be useful,
026     * but WITHOUT ANY WARRANTY; without even the implied warranty of
027     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
028     * Lesser General Public License for more details.
029     * <br><br>
030     * You should have received a copy of the GNU Lesser General Public
031     * License along with this library; if not, write to the Free Software
032     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
033    */
034    public class StudentRandomRealFirstOrder implements StudentOrder {
035        
036        public StudentRandomRealFirstOrder(DataProperties config) {
037        }
038        
039        public StudentRandomRealFirstOrder() {
040        }
041        
042        /** 
043         * Return the given set of students in a random order, however,
044         * all real students before last-like ({@link Student#isDummy()}
045         * is true) students.  
046         **/
047        public Vector order(Vector students) {
048            Vector real = new Vector(students.size());
049            Vector dummy = new Vector(students.size());
050            for (Enumeration e=students.elements();e.hasMoreElements();) {
051                Student student = (Student)e.nextElement();
052                if (student.isDummy())
053                    dummy.add(student);
054                else
055                    real.add(student);
056            }
057            Collections.shuffle(dummy);
058            Collections.shuffle(real);
059            dummy.addAll(real);
060            return dummy;
061        }
062        
063    }