/** {@inheritDoc} */
  public List<Map<String, String>> getExportGroups(final String language) {

    final List<DataGroup> dataGroups = dataDescriptorResolver.getGroups();

    final Set<Map<String, String>> out =
        new TreeSet<Map<String, String>>(
            new Comparator<Map<String, String>>() {
              @Override
              public int compare(final Map<String, String> o1, final Map<String, String> o2) {
                int comp = o1.get("label").compareToIgnoreCase(o2.get("label"));
                if (comp == 0) {
                  comp = o1.get("name").compareToIgnoreCase(o2.get("name"));
                }
                return comp;
              }
            });
    for (final DataGroup dataGroup : dataGroups) {
      if (StringUtils.isBlank(dataGroup.getQualifier())
          || federationFacade.isManageable(dataGroup.getQualifier(), ShopDTO.class)) {
        final Map<String, String> grp = new HashMap<String, String>();
        grp.put("name", dataGroup.getName());
        final I18NModel model =
            new FailoverStringI18NModel(dataGroup.getDisplayName(), dataGroup.getName());
        grp.put("label", model.getValue(language));
        out.add(grp);
      }
    }

    return new ArrayList<Map<String, String>>(out);
  }
 /**
  * Verify access of the current user.
  *
  * @param object target object to update
  * @throws AccessDeniedException
  */
 protected void validateAccessAfterUpdate(final Object object, final Class objectType)
     throws AccessDeniedException {
   if (!federationFacade.isManageable(object, objectType)) {
     throw new AccessDeniedException("access denied");
   }
 }