@PreAuthorize("hasRole('CONNECTOR_READ')")
@RequestMapping(method = RequestMethod.POST, value = "/supportedObjectClasses/list")
@Transactional(readOnly = true)
public List<String> getSupportedObjectClasses(@RequestBody final ConnInstanceTO connInstanceTO) {
final ConnInstance connInstance = connInstanceDAO.find(connInstanceTO.getId());
if (connInstance == null) {
throw new NotFoundException("Connector '" + connInstanceTO.getId() + "'");
}
// consider the possibility to receive overridden properties only
final Set<ConnConfProperty> conf = binder.mergeConnConfProperties(connInstanceTO.getConfiguration(),
connInstance.getConfiguration());
// We cannot use Spring bean because this method could be used during resource definition or modification:
// bean couldn't exist or couldn't be updated.
// This is the reason why we should take a "not mature" connector facade proxy to ask for object classes.
Set<ObjectClass> objectClasses = connFactory.createConnector(connInstance, conf).getSupportedObjectClasses();
List<String> result = new ArrayList<String>(objectClasses.size());
for (ObjectClass objectClass : objectClasses) {
result.add(objectClass.getObjectClassValue());
}
auditManager.audit(Category.connector, ConnectorSubCategory.getSupportedObjectClasses, Result.success,
"Successfully listed supported object classes (" + result.size() + ") "
+ "for connector " + connInstance.getDisplayName());
return result;
}