package com.onaro.sanscreen.client.view;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class CompositeDirectorUtils {
protected CompositeDirectorUtils() {
//do nothing
}
/**
* TODO: optimize this method.
*
* @return The view director, or null
.
*/
public static ViewDirector getDescendentById(ICompositeDirector compositeDirector, String targetViewId) {
if (compositeDirector == null) throw new IllegalArgumentException("compositeDirector"); //$NON-NLS-1$
if (targetViewId == null) throw new IllegalArgumentException("targetViewId"); //$NON-NLS-1$
Set descendents = getDescendents(compositeDirector);
for (ViewDirector descendent : descendents) {
String descendentId = descendent.getId();
if (targetViewId.equals(descendentId)) return descendent;
}
return null;
}
/**
* TODO: optimize this method.
*
* @return The view director, or null
.
*/
public static ViewDirector getDescendentByName(ICompositeDirector compositeDirector, String targetViewName) {
if (compositeDirector == null) throw new IllegalArgumentException("compositeDirector"); //$NON-NLS-1$
if (targetViewName == null) throw new IllegalArgumentException("targetViewName"); //$NON-NLS-1$
Set descendents = getDescendents(compositeDirector);
for (ViewDirector descendent : descendents) {
String descendentName = descendent.getName();
if (targetViewName.equals(descendentName)) return descendent;
}
return null;
}
/**
* Get all the descendent view directors of a given composite director.
*/
public static Set getDescendents(ICompositeDirector compositeDirector) {
if (compositeDirector == null) throw new IllegalArgumentException("compositeDirector"); //$NON-NLS-1$
Set descendents = new HashSet();
getDescendents(compositeDirector, descendents);
return descendents;
}
/**
* Get all the descendent view directors (of a given class type) of a given composite director.
*/
public static Set getDescendentsOfType(ICompositeDirector compositeDirector, Class viewDirectorClass) {
if (compositeDirector == null) throw new IllegalArgumentException("compositeDirector"); //$NON-NLS-1$
if (viewDirectorClass == null) throw new IllegalArgumentException("viewDirectorClass"); //$NON-NLS-1$
Set descendents = getDescendents(compositeDirector);
Set descendentsOfType = new HashSet();
for (ViewDirector descendent : descendents) {
if (viewDirectorClass.isInstance(descendent)) {
descendentsOfType.add(viewDirectorClass.cast(descendent));
}
}
return descendentsOfType;
}
/**
* Do a BFS finding all the descendent view directors of a given composite director.
*/
public static void getDescendents(ICompositeDirector compositeDirector, Collection descendents) {
if (compositeDirector == null) throw new IllegalArgumentException("compositeDirector"); //$NON-NLS-1$
if (descendents == null) throw new IllegalArgumentException("descendents"); //$NON-NLS-1$
Collection childViewDirectors = compositeDirector.getChildViewDirectors();
for (ViewDirector childViewDirector : childViewDirectors) {
boolean added = descendents.add(childViewDirector);
if (added && childViewDirector instanceof ICompositeDirector) {
ICompositeDirector subCompositeDirector = (ICompositeDirector) childViewDirector;
getDescendents(subCompositeDirector, descendents);
}
}
}
}