Example #1
0
  protected Widget buildFormPanel(
      final ResourceDescription definition,
      SecurityContext securityContext,
      boolean enableFormEdit) {
    final ModelNodeFormBuilder.FormAssets formAssets =
        new ModelNodeFormBuilder()
            .setConfigOnly()
            .setResourceDescription(definition)
            .setSecurityContext(securityContext)
            .build();
    if (enableFormEdit) {
      formAssets
          .getForm()
          .setToolsCallback(
              new FormCallback() {
                @Override
                public void onSave(Map changeSet) {
                  IOPanel.this.onModify(
                      selectionModel.getSelectedObject().getName(),
                      formAssets.getForm().getChangedValues());
                }

                @Override
                public void onCancel(Object entity) {
                  formAssets.getForm().cancel();
                }
              });
    }

    selectionModel.addSelectionChangeHandler(
        new SelectionChangeEvent.Handler() {
          @Override
          public void onSelectionChange(SelectionChangeEvent event) {
            Property worker = selectionModel.getSelectedObject();
            if (worker != null) {
              formAssets.getForm().edit(worker.getValue());
            } else {
              formAssets.getForm().clearValues();
            }
          }
        });

    VerticalPanel formPanel = new VerticalPanel();
    formPanel.setStyleName("fill-layout-width");
    formPanel.add(formAssets.getHelp().asWidget());
    formPanel.add(formAssets.getForm().asWidget());

    return formPanel;
  }
  private ToolStrip setupTableButtons() {
    ToolStrip tools = new ToolStrip();
    ToolButton addButton =
        new ToolButton(
            Console.CONSTANTS.common_label_add(),
            event -> {
              ModelNodeFormBuilder.FormAssets addFormAssets =
                  new ModelNodeFormBuilder()
                      .setResourceDescription(resourceDescription)
                      .setCreateMode(true)
                      .unsorted()
                      .exclude("permissions")
                      .setCreateNameAttribute(false)
                      .setSecurityContext(securityContext)
                      .build();
              addFormAssets.getForm().setEnabled(true);

              DefaultWindow dialog = new DefaultWindow(Console.MESSAGES.newTitle("Permission"));
              AddResourceDialog.Callback callback =
                  new AddResourceDialog.Callback() {
                    @Override
                    public void onAdd(ModelNode payload) {
                      circuit.dispatch(
                          new AddListAttribute(
                              ElytronStore.CONSTANT_PERMISSION_MAPPER_ADDRESS,
                              "permissions",
                              permissionMapping,
                              payload));
                      dialog.hide();
                    }

                    @Override
                    public void onCancel() {
                      dialog.hide();
                    }
                  };
              AddResourceDialog addDialog =
                  new AddResourceDialog(addFormAssets, resourceDescription, callback);
              dialog.setWidth(480);
              dialog.setHeight(360);
              dialog.setWidget(addDialog);
              dialog.setGlassEnabled(true);
              dialog.center();
            });
    ToolButton removeButton =
        new ToolButton(
            Console.CONSTANTS.common_label_delete(),
            event -> {
              final ModelNode selection = selectionModel.getSelectedObject();
              if (selection != null) {
                Feedback.confirm(
                    "Filter",
                    Console.MESSAGES.deleteConfirm(
                        "Permission " + selection.get("class-name").asString()),
                    isConfirmed -> {
                      if (isConfirmed) {
                        circuit.dispatch(
                            new RemoveListAttribute(
                                ElytronStore.CONSTANT_PERMISSION_MAPPER_ADDRESS,
                                permissionMapping,
                                "permissions",
                                selection));
                      }
                    });
              }
            });
    tools.addToolButtonRight(addButton);
    tools.addToolButtonRight(removeButton);
    return tools;
  }
Example #3
0
  private void _showAddDialog(
      final ModelNode address,
      boolean isSingleton,
      SecurityContext securityContext,
      ModelNode description) {
    List<Property> tuples = address.asPropertyList();
    String type = "";
    if (tuples.size() > 0) {
      type = tuples.get(tuples.size() - 1).getName();
    }

    ModelNodeFormBuilder builder =
        new ModelNodeFormBuilder()
            .setCreateMode(true)
            .setSingleton(isSingleton)
            .setResourceDescription(description)
            .setSecurityContext(securityContext);

    ModelNodeFormBuilder.FormAssets assets = builder.build();

    final ModelNodeForm form = assets.getForm();
    form.setEnabled(true);

    if (form.hasWritableAttributes()) {
      final DefaultWindow window = new DefaultWindow(Console.MESSAGES.createResource(type));
      window.addStyleName("browser-view");

      DialogueOptions options =
          new DialogueOptions(
              new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                  // save
                  FormValidation validation = form.validate();
                  if (!validation.hasErrors()) {
                    presenter.onAddChildResource(address, form.getUpdatedEntity());
                    window.hide();
                  }
                }
              },
              new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                  // cancel
                  window.hide();
                }
              });

      VerticalPanel layout = new VerticalPanel();
      layout.setStyleName("fill-layout-width");
      ModelNode opDescription = description.get("operations").get("add").get("description");
      ContentDescription text = new ContentDescription(opDescription.asString());
      layout.add(text);
      layout.add(assets.asWidget());

      WindowContentBuilder content = new WindowContentBuilder(layout, options);
      window.trapWidget(content.build());
      window.setGlassEnabled(true);
      window.setWidth(480);
      window.setHeight(360);
      window.center();
    } else {
      // no writable attributes
      Feedback.alert(
          Console.CONSTANTS.cannotCreateChildResource(),
          Console.MESSAGES.noConfigurableAttributes(address.toString()));
    }
  }
  private ToolStrip mainTableTools() {
    ToolStrip tools = new ToolStrip();
    ToolButton addButton =
        new ToolButton(
            Console.CONSTANTS.common_label_add(),
            event -> {
              ModelNodeFormBuilder.FormAssets addFormAssets =
                  new ModelNodeFormBuilder()
                      .setResourceDescription(resourceDescription)
                      .setCreateMode(true)
                      .unsorted()
                      .setCreateNameAttribute(false)
                      .setSecurityContext(securityContext)
                      .build();
              addFormAssets.getForm().setEnabled(true);
              addFormAssets
                  .getForm()
                  .addFormValidator(
                      (formItems, formValidation) -> {

                        // at least one field is necessary to fill
                        boolean allEmpty = true;
                        for (FormItem formItem : formItems) {
                          if (!formItem.isUndefined()) {
                            allEmpty = false;
                            break;
                          }
                        }
                        if (allEmpty) {
                          formValidation.addError("match-abstract-type");
                          FormItem mechanismNameFormItem =
                              formItem(formItems, "match-abstract-type");
                          mechanismNameFormItem.setErrMessage(
                              "At least one field must contain valid values.");
                          mechanismNameFormItem.setErroneous(true);
                        }
                      });

              DefaultWindow dialog = new DefaultWindow(Console.MESSAGES.newTitle("Match Rule"));
              AddResourceDialog.Callback callback =
                  new AddResourceDialog.Callback() {
                    @Override
                    public void onAdd(ModelNode payload) {
                      for (Property node : payload.asPropertyList()) {
                        // remove undefined attributes
                        if (!node.getValue().isDefined()) {
                          payload.remove(node.getName());
                        }
                      }
                      circuit.dispatch(
                          new AddListAttribute(
                              ElytronStore.AUTHENTICATION_CONTEXT_ADDRESS,
                              MATCH_RULES,
                              authContextName,
                              payload));
                      dialog.hide();
                    }

                    @Override
                    public void onCancel() {
                      dialog.hide();
                    }
                  };
              AddResourceDialog addDialog =
                  new AddResourceDialog(addFormAssets, resourceDescription, callback);
              dialog.setWidth(480);
              dialog.setHeight(510);
              dialog.setWidget(addDialog);
              dialog.setGlassEnabled(true);
              dialog.center();
            });
    ToolButton removeButton =
        new ToolButton(
            Console.CONSTANTS.common_label_delete(),
            event -> {
              final ModelNode selection = selectionModel.getSelectedObject();
              if (selection != null) {
                Feedback.confirm(
                    "Match Rule",
                    Console.MESSAGES.deleteConfirm("Match Rule " + selection.asString()),
                    isConfirmed -> {
                      if (isConfirmed) {
                        circuit.dispatch(
                            new RemoveListAttribute(
                                ElytronStore.AUTHENTICATION_CONTEXT_ADDRESS,
                                authContextName,
                                MATCH_RULES,
                                selection));
                      }
                    });
              }
            });
    tools.addToolButtonRight(addButton);
    tools.addToolButtonRight(removeButton);
    return tools;
  }
  @SuppressWarnings("unchecked")
  public Widget asWidget() {
    VerticalPanel panel = new VerticalPanel();
    panel.addStyleName("fill-popupLayout-width");

    // table
    table = new DefaultCellTable<>(5);
    dataProvider = new ListDataProvider<>();
    dataProvider.addDataDisplay(table);
    table.setSelectionModel(selectionModel);

    // columns
    Column<ModelNode, String> matchRuleColumn =
        new TextColumn<ModelNode>() {
          @Override
          public String getValue(ModelNode node) {
            // as the match-rules attribute is a list of attributes
            // none of them is required, so there is not a unique colum to show, so all defined
            // attributes are
            // displayed, there is a "view" button that shows all attributes nicely formatted in a
            // ModelNodeForm
            StringBuilder content = new StringBuilder();
            for (Property prop : node.asPropertyList()) {
              content
                  .append(prop.getName())
                  .append(": ")
                  .append(prop.getValue().asString())
                  .append(", ");
            }
            return StringUtils.shortenStringIfNecessary(content.toString(), 120);
          }
        };

    Column<ModelNode, ModelNode> linkOpenDetailsColumn =
        new Column<ModelNode, ModelNode>(
            new ViewLinkCell<>(
                Console.CONSTANTS.common_label_view(),
                (ActionCell.Delegate<ModelNode>) selection -> showDetailModal(selection))) {
          @Override
          public ModelNode getValue(ModelNode node) {
            return node;
          }
        };

    linkOpenDetailsColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
    table.addColumn(matchRuleColumn, "");
    table.addColumn(linkOpenDetailsColumn, "Option");
    table.setColumnWidth(linkOpenDetailsColumn, 8, Style.Unit.PCT);

    panel.add(mainTableTools());
    panel.add(table);

    DefaultPager pager = new DefaultPager();
    pager.setDisplay(table);
    panel.add(pager);

    // ===================== match-rule form popup
    popupLayout.setStyleName("window-content");

    // read-only form to show details of match-rules attribute
    ModelNodeFormBuilder.FormAssets detailForm =
        new ModelNodeFormBuilder()
            .setResourceDescription(resourceDescription)
            .setCreateMode(false)
            .unsorted()
            .setCreateNameAttribute(false)
            .setSecurityContext(securityContext)
            .build();
    matchRulesForm = detailForm.getForm();

    popupDialogOptions.showCancel(false);
    Widget formWidget = detailForm.getForm().asWidget();
    popupLayout.add(formWidget);

    return panel;
  }