private UserGroupRestRep update() {
      UserGroupUpdateParam param = new UserGroupUpdateParam();
      UserGroupRestRep userGroupRestRep = UserGroupUtils.getUserGroup(this.id);

      param.setLabel(userGroupRestRep.getName());
      param.setDomain(this.domain);

      Set<UserAttributeParam> oldAttributes = userGroupRestRep.getAttributes();
      Set<UserAttributeParam> newAttributes = new HashSet<UserAttributeParam>();
      for (AttributeMapping mapping : this.attributes) {
        if (mapping != null) {
          newAttributes.add(mapping.createUserAttributeParam());
        }
      }

      param.getAddAttributes().addAll(newAttributes);
      param.getAddAttributes().removeAll(oldAttributes);

      for (UserAttributeParam oldAttribute : oldAttributes) {
        param.getRemoveAttributes().add(oldAttribute.getKey());
      }

      for (UserAttributeParam newAttribute : newAttributes) {
        param.getRemoveAttributes().remove(newAttribute.getKey());
      }

      return UserGroupUtils.update(this.id, param);
    }
    public void readFrom(UserGroupRestRep userGroupRep) {
      this.id = stringId(userGroupRep);
      this.name = userGroupRep.getName();
      this.domain = userGroupRep.getDomain();

      if (!CollectionUtils.isEmpty(userGroupRep.getAttributes())) {
        for (UserAttributeParam userAttributeMapping : userGroupRep.getAttributes()) {
          if (userAttributeMapping != null) {
            AttributeMapping mapping = new AttributeMapping();
            mapping.key = userAttributeMapping.getKey();
            mapping.values = StringUtils.join(userAttributeMapping.getValues(), "\n");
            this.attributes.add(mapping);
          }
        }
      }
    }
      public UserAttributeParam createUserAttributeParam() {
        UserAttributeParam attributeParam = new UserAttributeParam();
        attributeParam.setKey(key);

        Set<String> valueList = Sets.newHashSet();

        if (!StringUtils.isBlank(this.values)) {
          String[] values = this.values.split(LINE_BREAK);
          for (String val : values) {
            if (!StringUtils.isBlank(val.trim())) {
              valueList.add(val.trim());
            }
          }
        }
        attributeParam.setValues(valueList);

        return attributeParam;
      }