blob: 5e281abc6cca20e2e1e4e841f00a620cca611ac1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 Ericsson AB and others.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Description:
*
* This class implements the Navigator View filter used to display only
* uncompleted reviews in the Review Navigator tree
*
* Contributors:
* Sebastien Dubois - Created for Mylyn Review R4E project
*
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e.ui.internal.filters;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewPhase;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EReviewState;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewBasic;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewGroup;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIRule;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIRuleArea;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIRuleSet;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIRuleViolation;
/**
* @author Sebastien Dubois
* @version $Revision: 1.0 $
*/
public class ReviewCompletedFilter extends ViewerFilter {
/**
* Method select.
*
* @param viewer
* Viewer
* @param parentElement
* Object
* @param element
* Object
* @return boolean
*/
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof R4EUIReviewGroup || element instanceof R4EUIRuleSet || element instanceof R4EUIRuleArea
|| element instanceof R4EUIRuleViolation || element instanceof R4EUIRule) {
return true;
}
if (isParentReviewInProgress((IR4EUIModelElement) element)) {
return true;
}
return isChildrenReviewInProgress((IR4EUIModelElement) element);
}
/**
* Checks if the children is an In Progress review
*
* @param aCurrentElement
* - the element to filter on
* @return true/false
*/
private boolean isChildrenReviewInProgress(IR4EUIModelElement aCurrentElement) {
final int length = aCurrentElement.getChildren().length;
IR4EUIModelElement element = null;
for (int i = 0; i < length; i++) {
element = aCurrentElement.getChildren()[i];
if (!(element instanceof R4EUIReviewBasic)) {
return false;
}
if (!(((R4EReviewState) ((R4EUIReviewBasic) element).getReview().getState()).getState().equals(R4EReviewPhase.R4E_REVIEW_PHASE_COMPLETED))) {
return true;
}
}
return false;
}
/**
* Checks if the parent element cis an In Progress review
*
* @param aCurrentElement
* - the element to filter on
* @return true/false
*/
private boolean isParentReviewInProgress(IR4EUIModelElement aCurrentElement) {
//Get Review parent
IR4EUIModelElement reviewParentElement = aCurrentElement;
while (!(reviewParentElement instanceof R4EUIReviewBasic)) {
reviewParentElement = reviewParentElement.getParent();
if (null == reviewParentElement) {
return false;
}
}
if (!(((R4EReviewState) ((R4EUIReviewBasic) reviewParentElement).getReview().getState()).getState().equals(R4EReviewPhase.R4E_REVIEW_PHASE_COMPLETED))) {
return true;
}
return false;
}
}