content: package org.flashtool.gui.models;
  
  import java.util.List;
  
  import org.eclipse.jface.viewers.ITreeContentProvider;
  import org.eclipse.jface.viewers.Viewer;
  import org.flashtool.gui.TARestore;
  
  import lombok.extern.slf4j.Slf4j;
  
  @Slf4j
  public class MyTreeContentProvider implements ITreeContentProvider {
  
      private static final Object[] EMPTY_ARRAY = new Object[0];
  
      //Called just for the first-level objects.
      //Here we provide a list of objects
      @Override
      public Object[] getElements(Object inputElement) {
        if (inputElement instanceof TreeDevices)
          return ((TreeDevices) inputElement).getContent().toArray();
        else
          return EMPTY_ARRAY;
      }
  
      //Queried to know if the current node has children
      @Override
      public boolean hasChildren(Object element) {
        if (element instanceof TreeDevices || element instanceof TreeDevice || element instanceof TreeDeviceVariant || element instanceof TreeDeviceCustomization) {
          return true;
        }
        return false;
      }
  
      //Queried to load the children of a given node
      @Override
      public Object[] getChildren(Object parentElement) {
          if (parentElement instanceof TreeDevices) {
        	  TreeDevices devices = (TreeDevices) parentElement;
        	  return devices.getContent().toArray();
          }
      	if (parentElement instanceof TreeDevice) {
      	  TreeDevice device = (TreeDevice) parentElement;
      	  return device.getVariants().toArray();
      	}
      	if (parentElement instanceof TreeDeviceVariant) {
        	  TreeDeviceVariant variant = (TreeDeviceVariant) parentElement;
        	  return variant.getCustomizations().toArray();
        	}
      	if (parentElement instanceof TreeDeviceCustomization) {
          	  TreeDeviceCustomization cust = (TreeDeviceCustomization) parentElement;
          	  return cust.getReleases().toArray();
          }
      	return EMPTY_ARRAY;
      }
  
      @Override
      public void dispose() {
      }
  
      @Override
      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
      }
  
      @Override
      public Object getParent(Object element) {
        return null;
      }
  
    }