public ACLFilterItem(CompositeFilterForm form, ACLFilter filter, boolean editable) {
    super(form, filter, editable);
    _hp = new HorizontalPanel();
    _hp.setHeight(22);

    HTML label = new HTML("acl");
    label.setFontSize(11);
    label.setMarginTop(8);
    _hp.add(label);
    _hp.setSpacing(3);

    _formSP = new SimplePanel();
    _formSP.setHeight100();
    _hp.add(_formSP);

    updateForm();
  }
  private void updateForm() {

    if (_form != null) {
      removeMustBeValid(_form);
    }

    _formSP.clear();

    _form = new Form(editable() ? FormEditMode.UPDATE : FormEditMode.READ_ONLY);
    int nbCols = 1;
    ACLOperator op = filter().operator();
    if (op != null) {
      if (ACLOperator.FOR_ROLE.equals(op)) {
        nbCols = 2;
      }
    }
    _form.setNumberOfColumns(nbCols);
    _form.setShowLabels(false);
    _form.setShowDescriptions(false);
    _form.setShowHelp(false);

    Field<ACLOperator> opField =
        new Field<ACLOperator>(
            new FieldDefinition(
                "operator",
                new EnumerationType<ACLOperator>(ACLOperator.VALUES),
                null,
                null,
                1,
                1));
    opField.setInitialValue(filter().operator(), false);
    opField.addListener(
        new FormItemListener<ACLOperator>() {

          @Override
          public void itemValueChanged(FormItem<ACLOperator> f) {
            if (ACLOperator.ACTOR_INVALID.equals(f.value())) {
              filter().setActorInvalid();
            } else {
              filter().setForRole(filter().role());
            }
            updateForm();
          }

          @Override
          public void itemPropertyChanged(FormItem<ACLOperator> f, Property property) {}
        });
    _form.add(opField);

    if (ACLOperator.FOR_ROLE.equals(filter().operator())) {

      Field<RoleRef> roleField =
          new Field<RoleRef>(
              new FieldDefinition(
                  "role",
                  new EnumerationType<RoleRef>(new RoleEnumerationDataSource()),
                  null,
                  null,
                  1,
                  1));
      roleField.setInitialValue(new RoleRef(filter().role(), null, Scope.REPOSITORY), false);
      roleField.addListener(
          new FormItemListener<RoleRef>() {

            @Override
            public void itemValueChanged(FormItem<RoleRef> f) {
              filter().setForRole(f.value() == null ? null : f.value().name());
            }

            @Override
            public void itemPropertyChanged(FormItem<RoleRef> f, Property property) {}
          });
      FieldRenderOptions fro = new FieldRenderOptions();
      fro.setWidth(300);
      roleField.setRenderOptions(fro);
      _form.add(roleField);
    }
    addMustBeValid(_form);
    _form.render();
    _formSP.setContent(_form);
  }