@Override
  public Map<String, ResourceType> getConfiguredResourceTypes() {
    final Map<String, ResourceType> map = new HashMap<String, ResourceType>();

    final Collection<SnmpCollection> snmpCollections =
        getContainer().getObject().getSnmpCollectionCollection();
    for (final SnmpCollection collection : snmpCollections) {
      for (final ResourceType resourceType : collection.getResourceTypeCollection()) {
        map.put(resourceType.getName(), resourceType);
      }
    }

    // FIXME: I guarantee there's a cleaner way to do this, but I didn't want to refactor everything
    // that calls this just to optimize out validation.
    if (!m_validated) {
      try {
        validateResourceTypes(getContainer(), map.keySet());
      } catch (final RuntimeException e) {
        m_validationException = e;
        throw e;
      }
    } else {
      if (m_validationException != null) {
        throw m_validationException;
      }
    }
    return Collections.unmodifiableMap(map);
  }
  @Override
  protected DatacollectionConfig translateConfig(final DatacollectionConfig config) {
    final DataCollectionConfigParser parser = new DataCollectionConfigParser(getConfigDirectory());
    resourceTypes.clear();

    // Create a special collection to hold all resource types, because they should be defined only
    // once.
    final SnmpCollection resourceTypeCollection = new SnmpCollection();
    resourceTypeCollection.setName("__resource_type_collection");

    // Updating Configured Collections
    for (final SnmpCollection collection : config.getSnmpCollectionCollection()) {
      parser.parseCollection(collection);
      // Save local resource types
      for (final ResourceType rt : collection.getResourceTypeCollection()) {
        resourceTypeCollection.addResourceType(rt);
        resourceTypes.put(rt.getName(), rt);
      }
      // Remove local resource types
      collection.getResourceTypeCollection().clear();
    }

    // Save external Resource Types
    for (final ResourceType rt : parser.getAllResourceTypes()) {
      resourceTypeCollection.addResourceType(rt);
      resourceTypes.put(rt.getName(), rt);
    }

    resourceTypeCollection.setGroups(new Groups());
    resourceTypeCollection.setSystems(new Systems());
    config.getSnmpCollectionCollection().add(0, resourceTypeCollection);
    dataCollectionGroups.clear();
    dataCollectionGroups.addAll(parser.getExternalGroupMap().keySet());

    validateResourceTypes(config.getSnmpCollectionCollection(), resourceTypes.keySet());

    return config;
  }