/**
* Copyright (c) 2014 - 2017 Frank Appel
* 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
*
* Contributors:
* Frank Appel - initial API and implementation
*/
package com.codeaffine.eclipse.ui.progress;
import org.eclipse.ui.model.IWorkbenchAdapter;
class BelongToJobFamilyChecker {
private final DeferredContentManager contentManager;
private final Object parentElement;
BelongToJobFamilyChecker( DeferredContentManager contentManager, Object parentElement ) {
this.contentManager = contentManager;
this.parentElement = parentElement;
}
boolean check( Object family ) {
if( family instanceof DeferredContentJobFamily ) {
return check( ( DeferredContentJobFamily )family );
}
return false;
}
private boolean check( DeferredContentJobFamily contentFamily ) {
if( contentFamily.getSchedulingManager() == contentManager ) {
return belongsTo( contentFamily, parentElement );
}
return false;
}
private boolean belongsTo( DeferredContentJobFamily family, Object element ) {
if( !family.getElement().equals( element ) ) {
return belongsToElementParent( family, element );
}
return true;
}
private boolean belongsToElementParent( DeferredContentJobFamily family, Object element ) {
IWorkbenchAdapter adapter = getWorkbenchAdapter( element );
if( hasParent( adapter, element ) ) {
return belongsTo( family, adapter.getParent( element ) );
}
return false;
}
private static boolean hasParent( IWorkbenchAdapter adapter, Object element ) {
return adapter != null && adapter.getParent( element ) != null;
}
private static IWorkbenchAdapter getWorkbenchAdapter( Object child ) {
return new Adapters().getAdapter( child, IWorkbenchAdapter.class );
}
}