blob: 05ff480cc0abe5f4f9fc35ca53d672b69bc8462f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ui.history;
import java.util.ArrayList;
import java.util.Calendar;
import org.eclipse.team.core.history.IFileRevision;
public class DateHistoryCategory extends AbstractHistoryCategory {
private String name;
private Calendar fromDate;
private Calendar toDate;
private IFileRevision[] revisions;
/**
* Creates a new instance of DateCVSHistoryCategory.
*
* @param name the name of this category
* @param fromDate the start date for this category or <code>null</code> if you want everything up to the end date
* @param toDate the end point for this category or <code>null</code> if you want just all entries in the
* start date
*/
public DateHistoryCategory(String name, Calendar fromDate, Calendar toDate){
this.name = name;
this.fromDate = fromDate;
this.toDate = toDate;
}
@Override
public String getName() {
return name;
}
@Override
public boolean collectFileRevisions(IFileRevision[] fileRevisions, boolean shouldRemove) {
ArrayList<IFileRevision> pertinentRevisions = new ArrayList<>();
ArrayList<IFileRevision> nonPertinentRevisions = new ArrayList<>();
for (IFileRevision fileRevision : fileRevisions) {
//get the current file revision's date
Calendar fileRevDate = Calendar.getInstance();
fileRevDate.setTimeInMillis(fileRevision.getTimestamp());
int fileRevDay = fileRevDate.get(Calendar.DAY_OF_YEAR);
int fileRevYear = fileRevDate.get(Calendar.YEAR);
if (fromDate == null) {
//check to see if this revision is within the toDate range
if (((fileRevDay<toDate.get(Calendar.DAY_OF_YEAR)) && (fileRevYear == toDate.get(Calendar.YEAR))) ||
(fileRevYear < toDate.get(Calendar.YEAR))) {
pertinentRevisions.add(fileRevision);
} else {
//revision is equal or later then the to date, add to rejects list
nonPertinentRevisions.add(fileRevision);
}
} else if (toDate == null) {
//check to see if this revision falls on the same day as the fromDate
if ((fileRevDay == fromDate.get(Calendar.DAY_OF_YEAR)) &&
(fileRevYear == fromDate.get(Calendar.YEAR))) {
pertinentRevisions.add(fileRevision);
} else {
nonPertinentRevisions.add(fileRevision);
}
} else {
//check the range
if ((fileRevYear >= fromDate.get(Calendar.YEAR)) &&
(fileRevYear <= toDate.get(Calendar.YEAR)) &&
(fileRevDay >= fromDate.get(Calendar.DAY_OF_YEAR)) &&
(fileRevDay < toDate.get(Calendar.DAY_OF_YEAR))) {
pertinentRevisions.add(fileRevision);
} else {
nonPertinentRevisions.add(fileRevision);
}
}
}
//check mode
if (shouldRemove){
//TODO: pass in an object containing the file revision arrays and modify the contents
/*IFileRevision[] tempRevision = (IFileRevision[]) nonPertinentRevisions.toArray(new IFileRevision[nonPertinentRevisions.size()]);
System.arraycopy(tempRevision, 0, fileRevisions, 0, tempRevision.length);*/
}
if (pertinentRevisions.size() > 0){
IFileRevision[] tempRevision = pertinentRevisions.toArray(new IFileRevision[pertinentRevisions.size()]);
revisions = new IFileRevision[tempRevision.length];
System.arraycopy(tempRevision, 0, revisions, 0, tempRevision.length);
return true;
}
return false;
}
@Override
public IFileRevision[] getRevisions() {
return revisions;
}
@Override
public boolean hasRevisions() {
return revisions != null && revisions.length != 0;
}
}