this.attrs.remove(attr);
  public void deleteAttribute(String attr)     throws  AttributeNotFoundException,            GroupModifyException,             InsufficientPrivilegeException  {    try {      StopWatch sw = new StopWatch();      sw.start();      Field f = FieldFinder.find(attr);      GroupValidator.canDelAttribute(this, f);      // TODO I'm not comfortable with this code      Set       saves   = new LinkedHashSet();      Set       deletes = new LinkedHashSet();      Set       attrs   = new LinkedHashSet();      boolean   found   = false; // so we know if there was actually anything to delete      String    val     = GrouperConfig.EMPTY_STRING; // for logging purposes      Attribute a;      Iterator  iter    = this.getGroup_attributes().iterator();      while (iter.hasNext()) {        a = (Attribute) iter.next();        if (a.getField().equals(f)) {          val = a.getValue();          deletes.add(a); // deleting          found = true;        }        else {          attrs.add(a); // preserving        }      }      if (found) {        this.setModified();        this.setGroup_attributes(attrs);        saves.add(this);        HibernateHelper.saveAndDelete(saves, deletes);      }      else {        throw new AttributeNotFoundException();      }      sw.stop();      EL.groupDelAttr(this.getSession(), this.getName(), attr, val, sw);    }    catch (HibernateException eH) {      throw new GroupModifyException(eH.getMessage(), eH);    }    catch (InsufficientPrivilegeException eIP) {      throw eIP;    }    catch (ModelException eM) {      throw new GroupModifyException(eM.getMessage(), eM);    }    catch (SchemaException eS) {      throw new AttributeNotFoundException(eS.getMessage(), eS);    }  } // public void deleteAttribute(attr)