@Override
 @Transactional
 public void deleteResourceRole(String resourceId, String roleId) {
   final ResourceEntity entity = resourceDao.findById(resourceId);
   final RoleEntity roleEntity = roleDao.findById(roleId);
   entity.remove(roleEntity);
   resourceDao.save(entity);
 }
  @Override
  @Transactional
  public void validateResourceDeletion(final String resourceId) throws BasicDataServiceException {
    final ResourceEntity entity = resourceDao.findById(resourceId);
    if (entity != null) {

      final List<ManagedSysEntity> managedSystems = managedSysDAO.findByResource(resourceId);
      if (CollectionUtils.isNotEmpty(managedSystems)) {
        throw new BasicDataServiceException(
            ResponseCode.LINKED_TO_MANAGED_SYSTEM, managedSystems.get(0).getName());
      }

      final List<ContentProviderEntity> contentProviders =
          contentProviderDAO.getByResourceId(resourceId);
      if (CollectionUtils.isNotEmpty(contentProviders)) {
        throw new BasicDataServiceException(
            ResponseCode.LINKED_TO_CONTENT_PROVIDER, contentProviders.get(0).getName());
      }

      final List<URIPatternEntity> uriPatterns = uriPatternDAO.getByResourceId(resourceId);
      if (CollectionUtils.isNotEmpty(uriPatterns)) {
        throw new BasicDataServiceException(
            ResponseCode.LINKED_TO_URI_PATTERN, uriPatterns.get(0).getPattern());
      }

      final List<AuthProviderEntity> authProviders = authProviderDAO.getByResourceId(resourceId);
      if (CollectionUtils.isNotEmpty(authProviders)) {
        throw new BasicDataServiceException(
            ResponseCode.LINKED_TO_AUTHENTICATION_PROVIDER, authProviders.get(0).getName());
      }

      final List<MetadataElementEntity> metadataElements = elementDAO.getByResourceId(resourceId);
      if (CollectionUtils.isNotEmpty(metadataElements)) {
        throw new BasicDataServiceException(
            ResponseCode.LINKED_TO_METADATA_ELEMENT, metadataElements.get(0).getAttributeName());
      }

      final List<MetadataElementPageTemplateEntity> pageTemplates =
          templateDAO.getByResourceId(resourceId);
      if (CollectionUtils.isNotEmpty(pageTemplates)) {
        throw new BasicDataServiceException(
            ResponseCode.LINKED_TO_PAGE_TEMPLATE, pageTemplates.get(0).getName());
      }

      final ResourceEntity searchBean = new ResourceEntity();
      searchBean.setAdminResource(new ResourceEntity(resourceId));
      final List<ResourceEntity> adminOfResources = resourceDao.getByExample(searchBean);
      if (CollectionUtils.isNotEmpty(adminOfResources)) {
        throw new BasicDataServiceException(
            ResponseCode.RESOURCE_IS_AN_ADMIN_OF_RESOURCE, adminOfResources.get(0).getName());
      }

      final RoleEntity roleSearchBean = new RoleEntity();
      roleSearchBean.setAdminResource(new ResourceEntity(resourceId));
      final List<RoleEntity> adminOfRoles = roleDao.getByExample(roleSearchBean);
      if (CollectionUtils.isNotEmpty(adminOfRoles)) {
        throw new BasicDataServiceException(
            ResponseCode.RESOURCE_IS_AN_ADMIN_OF_ROLE, adminOfRoles.get(0).getName());
      }

      final GroupEntity groupSearchBean = new GroupEntity();
      groupSearchBean.setAdminResource(new ResourceEntity(resourceId));
      final List<GroupEntity> adminOfGroups = groupDao.getByExample(groupSearchBean);
      if (CollectionUtils.isNotEmpty(adminOfGroups)) {
        throw new BasicDataServiceException(
            ResponseCode.RESOURCE_IS_AN_ADMIN_OF_GROUP, adminOfGroups.get(0).getName());
      }

      final OrganizationEntity orgSearchBean = new OrganizationEntity();
      orgSearchBean.setAdminResource(new ResourceEntity(resourceId));
      final List<OrganizationEntity> adminOfOrgs = orgDAO.getByExample(orgSearchBean);
      if (CollectionUtils.isNotEmpty(adminOfOrgs)) {
        throw new BasicDataServiceException(
            ResponseCode.RESOURCE_IS_AN_ADMIN_OF_ORG, adminOfOrgs.get(0).getName());
      }
    }
  }