@Override
 public void beginPlsqlRecord(String plsqlRecordName, String targetTypeName, int numFields) {
   RecordHelper recordHelper = new RecordHelper(plsqlRecordName, targetTypeName, numFields);
   stac.push(recordHelper);
   String recordAlias = targetTypeName.toLowerCase();
   ObjectRelationalDataTypeDescriptor ordt = descriptorMap.get(recordAlias);
   if (ordt == null) {
     ordt = new ObjectRelationalDataTypeDescriptor();
     ordt.descriptorIsAggregate();
     ordt.setAlias(recordAlias);
     ordt.setJavaClassName(plsqlRecordName.toLowerCase());
     ordt.getQueryManager();
     ordt.setStructureName(targetTypeName);
     descriptorMap.put(recordAlias, ordt);
   }
 }
 @Override
 public void endPlsqlTable(String tableName, String typeDDL, String typeDropDDL) {
   ListenerHelper top = stac.pop();
   TableHelper tableHelper = (TableHelper) stac.peek();
   String tableAlias = tableHelper.targetTypeName().toLowerCase();
   ObjectRelationalDataTypeDescriptor ordt = descriptorMap.get(tableAlias);
   if (ordt == null) {
     ordt = new ObjectRelationalDataTypeDescriptor();
     ordt.descriptorIsAggregate();
     ordt.setAlias(tableHelper.tableAlias());
     ordt.setJavaClassName(tableName.toLowerCase() + COLLECTION_WRAPPER_SUFFIX);
     ordt.getQueryManager();
   }
   boolean itemsMappingFound =
       ordt.getMappingForAttributeName(ITEMS_MAPPING_ATTRIBUTE_NAME) == null ? false : true;
   if (top.isRecord()) {
     if (!itemsMappingFound) {
       ObjectArrayMapping itemsMapping = new ObjectArrayMapping();
       itemsMapping.setAttributeName(ITEMS_MAPPING_ATTRIBUTE_NAME);
       itemsMapping.setFieldName(ITEMS_MAPPING_FIELD_NAME);
       itemsMapping.setStructureName(tableHelper.targetTypeName());
       itemsMapping.setReferenceClassName(((RecordHelper) top).recordName().toLowerCase());
       ordt.addMapping(itemsMapping);
     }
     tableHelper.nestedIsComplex();
   } else {
     if (!itemsMappingFound) {
       ArrayMapping itemsMapping = new ArrayMapping();
       itemsMapping.setAttributeName(ITEMS_MAPPING_ATTRIBUTE_NAME);
       itemsMapping.setFieldName(ITEMS_MAPPING_FIELD_NAME);
       itemsMapping.useCollectionClass(ArrayList.class);
       itemsMapping.setStructureName(tableHelper.targetTypeName());
       ordt.addMapping(itemsMapping);
     }
     if (top.isTable()) {
       tableHelper.nestedIsComplex();
     }
   }
   if (!itemsMappingFound) {
     descriptorMap.put(tableAlias, ordt);
   }
 }