/***************************************************************************** This file is part of Git-Starteam. Git-Starteam is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Git-Starteam is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Git-Starteam. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package org.sync.util; import java.text.DateFormat; import java.text.ParseException; import java.util.Comparator; import com.starbase.starteam.Label; import com.starbase.util.OLEDate; public class RevisionDateComparator implements Comparator<Label> { private static String buildDateToken = "build.date="; private static String buildDateFormat = "MM/dd/yy hh:mm a"; private AlphanumComparator Fallback = new AlphanumComparator(); @Override public int compare(Label arg0, Label arg1) { long date0 = 0; long date1 = 0; try { date0 = getLabelDate(arg0).getLongValue(); date1 = getLabelDate(arg1).getLongValue(); } catch (ParseException e) { e.printStackTrace(); } if(date0 > date1) { return 1; } else if(date0 < date1) { return -1; } return Fallback.compare(arg0.getName(), arg1.getName()); } @SuppressWarnings("deprecation") public static OLEDate getLabelDate(Label revisionLabel) throws ParseException{ String labelDescription = revisionLabel.getDescription(); int buildDateDescriptionIndex = labelDescription.indexOf(buildDateToken); if (buildDateDescriptionIndex >= 0) { String buildDateDescription = labelDescription.substring(buildDateDescriptionIndex + buildDateToken.length()); String date = buildDateDescription.startsWith("0") ? buildDateDescription.substring(1, buildDateDescription.indexOf('(')) : buildDateDescription.substring(0, buildDateDescription.indexOf('(')); DateFormat dateFormat = new java.text.SimpleDateFormat(buildDateFormat); java.util.Date buildDate = dateFormat.parse(date.trim()); buildDate.setSeconds(59); // TODO: Find a better way to initialize the // secondes in a more proper way. return new OLEDate(buildDate); } return revisionLabel.getRevisionTime(); } }