Java tutorial
package org.apache.maven.plugin.changelog; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ import org.apache.commons.lang.StringUtils; import org.apache.maven.scm.ChangeFile; import java.util.Comparator; import java.util.List; /** * Object used to sort the file-activity report into descending order. * * @version $Id$ */ public class FileActivityComparator implements Comparator<List<ChangeFile>> { /** * {@inheritDoc} */ public int compare(List<ChangeFile> list1, List<ChangeFile> list2) throws ClassCastException { int returnValue = sortByCommits(list1, list2); if (returnValue != 0) { return returnValue; } returnValue = sortByRevision(list1, list2); if (returnValue != 0) { return returnValue; } return sortByName(list1, list2); } /** * compares list1 and list2 by the number of commits * * @param list1 the first object in a compare statement * @param list2 the object to compare list1 against * @return an integer describing the order comparison of list1 and list2 */ private int sortByCommits(List<ChangeFile> list1, List<ChangeFile> list2) { if (list1.size() > list2.size()) { return -1; } if (list1.size() < list2.size()) { return 1; } return 0; } /** * compares list1 and list2 by comparing their revision code * * @param list1 the first object in a compare statement * @param list2 the object to compare list1 against * @return an integer describing the order comparison of list1 and list2 */ private int sortByRevision(List<ChangeFile> list1, List<ChangeFile> list2) { String revision1 = getLatestRevision(list1); String revision2 = getLatestRevision(list2); if (revision1 == null) { return -1; } if (revision2 == null) { return 1; } return revision1.compareTo(revision2); } /** * retrieves the latest revision from the commits made from the SCM * * @param list The list of revisions from the file * @return the latest revision code */ private String getLatestRevision(List<ChangeFile> list) { String latest = ""; for (ChangeFile file : list) { if (StringUtils.isNotBlank(latest)) { latest = file.getRevision(); } else if (latest.compareTo(file.getRevision()) < 0) { latest = file.getRevision(); } } return latest; } /** * compares list1 and list2 by comparing their filenames. Least priority sorting when both number of commits and * and revision are the same * * @param list1 the first object in a compare statement * @param list2 the object to compare list1 against * @return an integer describing the order comparison of list1 and list2 */ private int sortByName(List<ChangeFile> list1, List<ChangeFile> list2) { ChangeFile file1 = list1.get(0); ChangeFile file2 = list2.get(0); return file1.getName().compareTo(file2.getName()); } }