@SuppressWarnings("unchecked")
 @Override
 public int getIndexOfChild(Object parent, Object child) {
   IOObject parentIOObject = getIOObject(parent);
   if (parentIOObject instanceof IOObjectCollection) {
     IOObjectCollection<IOObject> col = (IOObjectCollection<IOObject>) parentIOObject;
     return col.getObjects().indexOf(child);
   } else if (parentIOObject instanceof GroupedModel) {
     return ((GroupedModel) parentIOObject).getModels().indexOf(child);
   } else if (parentIOObject instanceof MetaModel) {
     return ((MetaModel) parentIOObject).getModels().indexOf(child);
   } else {
     return -1;
   }
 }
 @SuppressWarnings("unchecked")
 @Override
 public Object getChild(Object parent, int index) {
   IOObject parentIOObject = getIOObject(parent);
   IOObject ioobject = null;
   if (parentIOObject instanceof IOObjectCollection) {
     IOObjectCollection<IOObject> col = (IOObjectCollection<IOObject>) parentIOObject;
     ioobject = col.getElement(index, false);
   } else if (parentIOObject instanceof GroupedModel) {
     ioobject = ((GroupedModel) parentIOObject).getModel(index);
   } else if (parentIOObject instanceof MetaModel) {
     ioobject = ((MetaModel) parentIOObject).getModels().get(index);
   }
   return new CollectionTreeElement(ioobject);
 }
 @SuppressWarnings("unchecked")
 @Override
 public int getChildCount(Object parent) {
   IOObject parentIOObject = getIOObject(parent);
   if (parentIOObject instanceof IOObjectCollection) {
     IOObjectCollection<IOObject> col = (IOObjectCollection<IOObject>) parentIOObject;
     return col.size();
   } else if (parentIOObject instanceof GroupedModel) {
     return ((GroupedModel) parentIOObject).getNumberOfModels();
   } else if (parentIOObject instanceof MetaModel) {
     return ((MetaModel) parentIOObject).getModels().size();
   } else {
     return 0;
   }
 }
 @Override
 public void doWork() throws OperatorException {
   IOObjectCollection<?> collection = collectionInput.getData(IOObjectCollection.class);
   flatOutput.deliver(new IOObjectCollection<IOObject>(collection.getObjectsRecursive()));
 }