Beispiel #1
0
 private void initClickModeSelectionUI(IGame game) {
   DockPanel clickModePanel = new DockPanel();
   add(clickModePanel);
   clickModePanel.setWidth(
       Integer.toString(FieldCanvas.SIZE * game.getBoard().getDimension().x) + "px");
   clickModePanel.setHorizontalAlignment(DockPanel.ALIGN_CENTER);
   clickOpenButton = new RadioButton("ClickOpens", "click opens");
   clickOpenButton.setValue(true);
   clickFlagButton = new RadioButton("ClickFlags", "click flags");
   clickFlagButton.setValue(false);
   ValueChangeHandler<Boolean> checkBoxToggler =
       new ValueChangeHandler<Boolean>() {
         @Override
         public void onValueChange(ValueChangeEvent<Boolean> event) {
           CheckBox checkBox = (CheckBox) event.getSource();
           if (checkBox == clickOpenButton) clickFlagButton.setValue(!event.getValue());
           else clickOpenButton.setValue(!event.getValue());
         }
       };
   clickOpenButton.addValueChangeHandler(checkBoxToggler);
   clickFlagButton.addValueChangeHandler(checkBoxToggler);
   clickModePanel.add(clickFlagButton, DockPanel.WEST);
   clickModePanel.add(clickOpenButton, DockPanel.EAST);
   clickModePanel.setCellHorizontalAlignment(clickOpenButton, DockPanel.ALIGN_LEFT);
   clickModePanel.setCellHorizontalAlignment(clickFlagButton, DockPanel.ALIGN_RIGHT);
 }
  /**
   * Set rights values to widgets
   *
   * @param read
   * @param write
   * @param right
   */
  private void setRightsToWidgets(CheckBox read, CheckBox write, AttributeRights right) {

    // prepare
    ArrayList<String> list = new ArrayList<String>();
    for (int i = 0; i < right.getRights().length(); i++) {
      list.add(right.getRights().get(i));
    }

    // set read
    if (list.contains("READ")) {
      read.setValue(true);
    } else {
      read.setValue(false);
    }

    // set write
    if (list.contains("WRITE")) {
      write.setValue(true);
    } else {
      write.setValue(false);
    }
  }
  @Override
  protected void initFromConfig() {

    myWebLoginMessage.setValue(MyTunesRss.CONFIG.getWebLoginMessage());
    myWebWelcomeMessage.setValue(MyTunesRss.CONFIG.getWebWelcomeMessage());
    myServerBrowserActive.setValue(MyTunesRss.CONFIG.isServerBrowserActive());
    myOpenIdActive.setValue(MyTunesRss.CONFIG.isOpenIdActive());
    myProxyHost.setValue(MyTunesRss.CONFIG.getProxyHost());
    myProxyPort.setValue(MyTunesRss.CONFIG.getProxyPort(), 1, 65535, "");
    myMailHost.setValue(MyTunesRss.CONFIG.getMailHost());
    myMailPort.setValue(MyTunesRss.CONFIG.getMailPort(), 1, 65535, "");
    mySmtpProtocol.setValue(MyTunesRss.CONFIG.getSmtpProtocol());
    myMailLogin.setValue(MyTunesRss.CONFIG.getMailLogin());
    myMailPassword.setValue(MyTunesRss.CONFIG.getMailPassword());
    myMailSender.setValue(MyTunesRss.CONFIG.getMailSender());
    myHeadless.setValue(MyTunesRss.CONFIG.isHeadless());
    myGraphicsMagickEnabled.setValue(MyTunesRss.CONFIG.isGmEnabled());
    myGraphicsMagickBinary.setValue(
        MyTunesRss.CONFIG.getGmExecutable() != null
            ? MyTunesRss.CONFIG.getGmExecutable().getAbsolutePath()
            : "");
  }
 public void prepareView() {
   Messages messages = presenter.getBrowserFactory().getMessages();
   setCreateRequestTitle(messages.createRequestTitle());
   setToLabel(messages.to());
   setRequestTitleLabel(messages.requestTitle());
   setRequestDescriptionLabel(messages.requestDescription());
   setExpectsAnswerLabel(messages.expectsAnswer());
   setPublishRequestButtonText(messages.publishRequest());
   setCancelButtonText(messages.cancel());
   requestTitleContainer.setText("");
   requestDescriptionContainer.setText("");
   toContainer.setText("");
   expectsAnswerContainer.setValue(false);
 }
 @Override
 protected void initFromConfig() {
   myTranscoderTable.removeAllItems();
   for (TranscoderConfig transcoderConfig : myTranscoderConfigs) {
     addTranscoderConfigTableItem(transcoderConfig);
   }
   myTranscodingCacheMaxGiB.setValue(MyTunesRss.CONFIG.getTranscodingCacheMaxGiB(), 1, 1024, "1");
   myHttpLiveStreamCacheMaxGiB.setValue(
       MyTunesRss.CONFIG.getHttpLiveStreamCacheMaxGiB(), 1, 1024, "5");
   myVlcEnabled.setValue(MyTunesRss.CONFIG.isVlcEnabled());
   myVlcBinary.setValue(
       MyTunesRss.CONFIG.getVlcExecutable() != null
           ? MyTunesRss.CONFIG.getVlcExecutable().getAbsolutePath()
           : "");
   setTablePageLengths();
 }
  public MoleculesDownloadPanel(Result result, MoleculesTab.Presenter presenter) {
    super(Style.Unit.PX);
    this.result = result;
    this.presenter = presenter;
    this.setWidth("99%");
    this.textArea = new TextArea();

    // Initialising and setting all the currently available checkboxes.
    chemTB = new CheckBox(PropertyType.CHEMICAL_COMPOUNDS.getTitle());
    chemTB.setTitle("Show or hide " + PropertyType.CHEMICAL_COMPOUNDS.getTitle());
    chemTB.setValue(true);

    protTB = new CheckBox(PropertyType.PROTEINS.getTitle());
    protTB.setTitle("Show or hide " + PropertyType.PROTEINS.getTitle());
    protTB.setValue(true);

    sequTB = new CheckBox(PropertyType.SEQUENCES.getTitle());
    sequTB.setTitle("Show or hide " + PropertyType.SEQUENCES.getTitle());
    sequTB.setValue(true);

    otheTB = new CheckBox(PropertyType.OTHERS.getTitle());
    otheTB.setTitle("Show or hide " + PropertyType.OTHERS.getTitle());
    otheTB.setValue(true);

    typeTB = new CheckBox("Type");
    typeTB.setTitle("Show or hide type column");
    typeTB.setValue(true);

    identifierTB = new CheckBox("Identifier");
    identifierTB.setTitle("Show or hide identifier column");
    identifierTB.setValue(true);

    nameTB = new CheckBox("Name");
    nameTB.setTitle("Show or hide name column");
    nameTB.setValue(true);
  }
  public void testResetEvent() {
    System.out.println("testResetEvent");
    FormPanel form = new FormPanel();
    RootPanel.get().add(form);
    TextBox textBox = new TextBox();
    textBox.setText("Hello World");
    form.setWidget(textBox);

    /*
     *  the following checkbox is not added to the form on purpose
     *  in order to reset it via callback
     */
    final CheckBox checkBox = new CheckBox();
    checkBox.setValue(true);

    /*
     * first test shall not affect the checkbox
     */

    // check preconditions
    assertEquals("Hello World", textBox.getText());
    assertTrue(checkBox.getValue());
    System.out.println("reset: normal");
    form.reset();
    // check postconditions
    assertEquals("", textBox.getText());
    assertTrue(checkBox.getValue());

    /*
     * second test shall affect the checkbox,
     * to this end a ResetHandler is added to to FormPanel which is called on a ResetEvent
     */
    HandlerRegistration handlerRegistration =
        form.addResetHandler(
            new ResetHandler() {

              @Override
              public void onReset(ResetEvent event) {
                checkBox.setValue(false);
              }
            });

    // init preconditions
    textBox.setText("Hello World");
    // check preconditions
    assertEquals("Hello World", textBox.getText());
    assertTrue(checkBox.getValue());
    System.out.println("reset: normal");
    form.reset();
    nativeFormReset(form.getElement());
    // check postconditions
    assertEquals("", textBox.getText());
    assertFalse(checkBox.getValue());

    /*
     * third test shall not affect the checkbox,
     * to this end the ResetHandler is removed from the FormPanel
     */
    handlerRegistration.removeHandler();
    // init preconditions
    textBox.setText("Hello World");
    checkBox.setValue(true);
    // check preconditions
    assertEquals("Hello World", textBox.getText());
    assertTrue(checkBox.getValue());
    System.out.println("reset: normal");
    form.reset();
    // check postconditions
    assertEquals("", textBox.getText());
    assertTrue(checkBox.getValue());

    RootPanel.get().remove(form);
  }
  /**
   * Tests submitting using url-encoded get, with all form widgets (other than FileUpload, which
   * requires post/multipart.
   */
  public void testMethodGet() {
    System.out.println("testMethodGet");
    final FormPanel form = new FormPanel();
    form.setMethod(FormPanel.METHOD_GET);
    form.setEncoding(FormPanel.ENCODING_URLENCODED);
    form.setAction(GWT.getModuleBaseURL() + "formHandler");

    TextBox tb = new TextBox();
    tb.setText("text");
    tb.setName("tb");

    PasswordTextBox ptb = new PasswordTextBox();
    ptb.setText("password");
    ptb.setName("ptb");

    CheckBox cb0 = new CheckBox(), cb1 = new CheckBox();
    cb1.setValue(true);
    cb0.setName("cb0");
    cb1.setName("cb1");

    RadioButton rb0 = new RadioButton("foo");
    RadioButton rb1 = new RadioButton("foo");
    rb0.setValue(true);
    rb0.setName("rb0");
    rb1.setName("rb1");

    ListBox lb = new ListBox();
    lb.addItem("option0");
    lb.addItem("option1");
    lb.addItem("option2");
    lb.setValue(0, "value0");
    lb.setValue(1, "value1");
    lb.setValue(2, "value2");
    lb.setSelectedIndex(1);
    lb.setName("lb");

    Hidden h = new Hidden("h", "v");

    FlowPanel panel = new FlowPanel();
    panel.add(tb);
    panel.add(ptb);
    panel.add(cb0);
    panel.add(cb1);
    panel.add(rb0);
    panel.add(rb1);
    panel.add(lb);
    panel.add(h);
    form.setWidget(panel);
    RootPanel.get().add(form);

    delayTestFinish(TEST_DELAY);

    form.addSubmitCompleteHandler(
        new SubmitCompleteHandler() {
          public void onSubmitComplete(SubmitCompleteEvent event) {
            // The server just echoes the query string. This is what it should look
            // like.
            assertTrue(
                event
                    .getResults()
                    .equals(
                        "tb=text&amp;ptb=password&amp;cb1=on&amp;rb0=on&amp;lb=value1&amp;h=v"));
            finishTest();
          }
        });

    form.submit();
  }
  public PackageBuilderWidget(final PackageConfigData conf, ClientFactory clientFactory) {

    this.conf = conf;
    this.clientFactory = clientFactory;

    // UI above the results table
    FormStyleLayout layout = new FormStyleLayout();
    final VerticalPanel container = new VerticalPanel();
    final VerticalPanel buildResults = new VerticalPanel();

    RadioButton wholePackageRadioButton = new RadioButton("action", constants.BuildWholePackage());
    RadioButton builtInSelectorRadioButton =
        new RadioButton("action", constants.BuildPackageUsingBuiltInSelector());
    RadioButton customSelectorRadioButton =
        new RadioButton("action", constants.BuildPackageUsingCustomSelector());
    wholePackageRadioButton.addClickHandler(
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            buildWholePackageLayout.setVisible(true);
            builtInSelectorLayout.setVisible(false);
            customSelectorLayout.setVisible(false);
            buildMode = "buildWholePackage";
          }
        });
    builtInSelectorRadioButton.addClickHandler(
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            buildWholePackageLayout.setVisible(false);
            builtInSelectorLayout.setVisible(true);
            customSelectorLayout.setVisible(false);
            buildMode = "BuiltInSelector";
          }
        });
    customSelectorRadioButton.addClickHandler(
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            buildWholePackageLayout.setVisible(false);
            builtInSelectorLayout.setVisible(false);
            customSelectorLayout.setVisible(true);
            buildMode = "customSelector";
          }
        });

    VerticalPanel verticalPanel = new VerticalPanel();

    HorizontalPanel wholePackageRadioButtonPanel = new HorizontalPanel();
    wholePackageRadioButtonPanel.add(wholePackageRadioButton);
    wholePackageRadioButtonPanel.add(
        new InfoPopup(constants.BuildWholePackage(), constants.BuildWholePackageTip()));
    verticalPanel.add(wholePackageRadioButtonPanel);

    HorizontalPanel builtInSelectorRadioButtonPanel = new HorizontalPanel();
    builtInSelectorRadioButtonPanel.add(builtInSelectorRadioButton);
    builtInSelectorRadioButtonPanel.add(
        new InfoPopup(constants.BuiltInSelector(), constants.BuiltInSelectorTip()));
    verticalPanel.add(builtInSelectorRadioButtonPanel);

    HorizontalPanel customSelectorRadioButtonPanel = new HorizontalPanel();
    customSelectorRadioButtonPanel.add(customSelectorRadioButton);
    customSelectorRadioButtonPanel.add(
        new InfoPopup(constants.CustomSelector(), constants.SelectorTip()));
    verticalPanel.add(customSelectorRadioButtonPanel);

    layout.addAttribute("", verticalPanel);
    wholePackageRadioButton.setValue(true);

    buildWholePackageLayout.setVisible(true);
    builtInSelectorLayout.setVisible(false);
    customSelectorLayout.setVisible(false);

    // Build whole package layout
    layout.addRow(buildWholePackageLayout);

    // Built-in selector layout
    builtInSelectorLayout.addRow(
        new HTML("&nbsp;&nbsp;<i>" + constants.BuildPackageUsingFollowingAssets() + "</i>"));

    HorizontalPanel builtInSelectorStatusPanel = new HorizontalPanel();
    final CheckBox enableStatusCheckBox = new CheckBox();
    enableStatusCheckBox.setValue(false);
    builtInSelectorStatusPanel.add(enableStatusCheckBox);
    builtInSelectorStatusPanel.add(
        new HTML("&nbsp;&nbsp;<i>" + constants.BuildPackageUsingBuiltInSelectorStatus() + " </i>"));
    final ListBox statusOperator = new ListBox();
    String[] vals = new String[] {"=", "!="};
    for (int i = 0; i < vals.length; i++) {
      statusOperator.addItem(vals[i], vals[i]);
    }
    builtInSelectorStatusPanel.add(statusOperator);

    final TextBox statusValue = new TextBox();
    statusValue.setTitle(constants.WildCardsSearchTip());
    builtInSelectorStatusPanel.add(statusValue);

    builtInSelectorLayout.addRow(builtInSelectorStatusPanel);

    HorizontalPanel builtInSelectorCatPanel = new HorizontalPanel();
    final CheckBox enableCategoryCheckBox = new CheckBox();
    enableCategoryCheckBox.setValue(false);
    builtInSelectorCatPanel.add(enableCategoryCheckBox);
    builtInSelectorCatPanel.add(
        new HTML("&nbsp;&nbsp;<i>" + constants.BuildPackageUsingBuiltInSelectorCat() + " </i>"));
    final ListBox catOperator = new ListBox();
    String[] catVals = new String[] {"=", "!="};
    for (int i = 0; i < catVals.length; i++) {
      catOperator.addItem(catVals[i], catVals[i]);
    }
    builtInSelectorCatPanel.add(catOperator);
    final CategoryExplorerWidget catChooser =
        new CategoryExplorerWidget(
            new CategorySelectHandler() {
              public void selected(String selectedPath) {}
            });
    ScrollPanel catScroll = new ScrollPanel(catChooser);
    catScroll.setAlwaysShowScrollBars(true);
    catScroll.setSize("300px", "130px");

    builtInSelectorCatPanel.add(catScroll);
    builtInSelectorLayout.addRow(builtInSelectorCatPanel);

    layout.addRow(builtInSelectorLayout);

    // Custom selector layout
    customSelectorLayout.setVisible(false);
    HorizontalPanel customSelectorPanel = new HorizontalPanel();
    customSelectorPanel.add(
        new HTML(
            "&nbsp;&nbsp;<i>"
                + constants.BuildPackageUsingCustomSelectorSelector()
                + " </i>")); // NON-NLS

    final ListBox customSelector = new ListBox();
    customSelector.setTitle(constants.WildCardsSearchTip());
    customSelectorPanel.add(customSelector);
    loadCustomSelectorList(customSelector);

    customSelectorLayout.addRow(customSelectorPanel);
    layout.addRow(customSelectorLayout);

    final Button b = new Button(constants.BuildPackage());
    b.setTitle(constants.ThisWillValidateAndCompileAllTheAssetsInAPackage());
    b.addClickHandler(
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            doBuild(
                buildResults,
                statusOperator.getValue(statusOperator.getSelectedIndex()),
                statusValue.getText(),
                enableStatusCheckBox.getValue(),
                catOperator.getValue(catOperator.getSelectedIndex()),
                catChooser.getSelectedPath(),
                enableCategoryCheckBox.getValue(),
                customSelector.getSelectedIndex() != -1
                    ? customSelector.getValue(customSelector.getSelectedIndex())
                    : null);
          }
        });
    HorizontalPanel buildStuff = new HorizontalPanel();
    buildStuff.add(b);

    layout.addAttribute(constants.BuildBinaryPackage(), buildStuff);
    layout.addRow(
        new HTML("<i><small>" + constants.BuildingPackageNote() + "</small></i>")); // NON-NLS
    container.add(layout);

    // The build results
    container.add(buildResults);

    // UI below the results table
    layout = new FormStyleLayout();
    Button snap = new Button(constants.CreateSnapshotForDeployment());
    snap.addClickHandler(
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            showSnapshotDialog(conf.getName(), null);
          }
        });
    layout.addAttribute(constants.TakeSnapshot(), snap);
    container.add(layout);

    initWidget(container);
  }
  public Widget draw() {

    titleWidget.setText(Utils.getStrippedStringWithEllipsis(group.getName()) + ": settings");

    // Main panel
    final VerticalPanel vp = new VerticalPanel();
    vp.setSize("100%", "100%");

    final TabMenu menu = new TabMenu();

    // Adds menu to the main panel
    vp.add(menu);
    vp.setCellHeight(menu, "30px");

    // IDS
    final Map<String, Integer> ids = new HashMap<String, Integer>();
    ids.put("group", groupId);

    // define GET ATTRIBUTES callback
    final GetAttributesV2 jsonCallback = new GetAttributesV2();
    jsonCallback.setIds(ids);
    if (!session.isGroupAdmin(groupId) && !session.isVoAdmin(group.getVoId()))
      jsonCallback.setCheckable(false);
    final CellTable<Attribute> table = jsonCallback.getEmptyTable();
    table.setWidth("100%");
    table.addStyleName("perun-table");
    ScrollPanel sp = new ScrollPanel(table);
    sp.addStyleName("perun-tableScrollPanel");
    session.getUiElements().resizePerunTable(sp, 350, this);
    vp.add(sp);

    // define GET RES. REQ ATTRIBUTES callback
    final GetResourceRequiredAttributesV2 reqAttrs =
        new GetResourceRequiredAttributesV2(
            null, JsonCallbackEvents.passDataToAnotherCallback(jsonCallback));

    // GROUP RESOURCES LISTBOX
    final ListBoxWithObjects<Resource> resourceDropDown = new ListBoxWithObjects<Resource>();
    resourceDropDown.setTitle(
        "By selecting a resource you will switch to either group-resource or member-resource setting (you must pick member too)");

    // fill table with group attributes on page load
    if (lastSelectedMemberId == 0 && lastSelectedResourceId == 0) {
      jsonCallback.retrieveData();
    } else {
      // load attrs by listbox selection after calls are done
      Scheduler.get()
          .scheduleFixedPeriod(
              new Scheduler.RepeatingCommand() {
                @Override
                public boolean execute() {
                  // load proper table if something was selected
                  if (resCallDone && memCallDone) {
                    // trigger change event
                    DomEvent.fireNativeEvent(Document.get().createChangeEvent(), resourceDropDown);
                    return false;
                  }
                  return true;
                }
              },
              200);
    }

    // fill resources listbox
    if (resources == null) {
      // get assigned resources
      GetAssignedResources resources =
          new GetAssignedResources(
              groupId,
              PerunEntity.GROUP,
              new JsonCallbackEvents() {
                public void onFinished(JavaScriptObject jso) {
                  ArrayList<Resource> resources = JsonUtils.jsoAsList(jso);
                  resourceDropDown.clear();
                  if (resources != null && !resources.isEmpty()) {
                    resources = new TableSorter<Resource>().sortByName(resources);
                    resourceDropDown.addNotSelectedOption();
                    for (int i = 0; i < resources.size(); i++) {
                      resourceDropDown.addItem(resources.get(i));
                      if (lastSelectedResourceId == resources.get(i).getId()) {
                        resourceDropDown.setSelected(resources.get(i), true);
                      }
                    }
                  } else {
                    resourceDropDown.addItem("No resources available");
                  }
                  resCallDone = true;
                }

                public void onError(PerunError error) {
                  resourceDropDown.clear();
                  resourceDropDown.addItem("Error while loading");
                  resCallDone = true;
                }

                public void onLoadingStart() {
                  resCallDone = false;
                  resourceDropDown.clear();
                  resourceDropDown.addItem("Loading...");
                }
              });
      resources.retrieveData();

    } else {
      // use predefined resources
      resourceDropDown.addNotSelectedOption();
      resources = new TableSorter<Resource>().sortByName(resources);
      resourceDropDown.addAllItems(resources);
    }

    // GROUP MEMBERS LISTBOX
    final ListBoxWithObjects<RichMember> membersDropDown = new ListBoxWithObjects<RichMember>();
    membersDropDown.setTitle(
        "By selecting a member you will switch to either member or member-resource settings (you must pick resource too)");

    // fill members listbox
    GetGroupRichMembers members =
        new GetGroupRichMembers(
            groupId,
            new JsonCallbackEvents() {
              public void onFinished(JavaScriptObject jso) {
                ArrayList<RichMember> mems = JsonUtils.jsoAsList(jso);
                membersDropDown.clear();
                if (mems != null && !mems.isEmpty()) {
                  mems = new TableSorter<RichMember>().sortByName(mems);
                  membersDropDown.addNotSelectedOption();
                  for (int i = 0; i < mems.size(); i++) {
                    membersDropDown.addItem(mems.get(i));
                    if (mems.get(i).getId() == lastSelectedMemberId) {
                      membersDropDown.setSelected(mems.get(i), true);
                    }
                  }
                } else {
                  membersDropDown.addItem("No members available");
                }
                memCallDone = true;
              }

              public void onError(PerunError error) {
                membersDropDown.clear();
                membersDropDown.addItem("Error while loading");
                memCallDone = true;
              }

              public void onLoadingStart() {
                memCallDone = false;
                membersDropDown.clear();
                membersDropDown.addItem("Loading...");
              }
            });
    members.retrieveData();

    // CHECKBOXES "FOR ALL MEMBERS"
    final CheckBox memChb = new CheckBox();
    memChb.setText("To all members");
    memChb.setVisible(false);
    memChb.setTitle("Uses this setting for all members of this group.");
    memChb.setValue(false);

    // SAVE CHANGES BUTTON
    final CustomButton saveChangesButton =
        TabMenu.getPredefinedButton(
            ButtonType.SAVE, ButtonTranslation.INSTANCE.saveChangesInAttributes());
    if (!session.isGroupAdmin(groupId) && !session.isVoAdmin(group.getVoId()))
      saveChangesButton.setEnabled(false);

    // click handler to save group and member-user attributes
    final ClickHandler saveAttrsClickHandler =
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            final ArrayList<Attribute> list = jsonCallback.getTableSelectedList();

            if (UiElements.cantSaveEmptyListDialogBox(list)) {

              // refresh table and disable button a event for GetAttributes
              final JsonCallbackEvents events =
                  JsonCallbackEvents.disableButtonEvents(
                      saveChangesButton, JsonCallbackEvents.refreshTableEvents(jsonCallback));

              if (memChb.getValue() == true) {
                // to all members selected
                UiElements.generateInfo(
                    WidgetTranslation.INSTANCE.saveConfirmTitle(),
                    "Same value(s) for selected attribute(s) will be set to ALL members of group.",
                    new ClickHandler() {
                      public void onClick(ClickEvent event) {
                        ArrayList<RichMember> memList = membersDropDown.getAllObjects();
                        for (int i = 0; i < memList.size(); i++) {
                          SetAttributes request = new SetAttributes();
                          if (i == memList.size() - 1) {
                            request.setEvents(events);
                          } else {
                            request.setEvents(
                                JsonCallbackEvents.disableButtonEvents(saveChangesButton));
                          }
                          Map<String, Integer> ids = new HashMap<String, Integer>();
                          ids.put("member", memList.get(i).getId());
                          ids.put("workWithUserAttributes", 1);
                          request.setAttributes(ids, list);
                        }
                      }
                    });
              } else {
                // just one group / memeber
                SetAttributes request = new SetAttributes(events);
                request.setAttributes(jsonCallback.getIds(), list);
              }
            }
          }
        };

    // click handler to save required attributes
    final ClickHandler saveReqAttrsClickHandler =
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            final ArrayList<Attribute> list = jsonCallback.getTableSelectedList();
            // check if not empty
            if (UiElements.cantSaveEmptyListDialogBox(list)) {

              // refresh table and disable button a event for GetResourceRequiredAttributes
              final JsonCallbackEvents events =
                  JsonCallbackEvents.disableButtonEvents(
                      saveChangesButton,
                      new JsonCallbackEvents() {
                        public void onFinished(JavaScriptObject jso) {
                          jsonCallback.clearTable();
                          // set back resourceToGetServicesFrom
                          Map<String, Integer> ids = reqAttrs.getIds();
                          if (ids.containsKey("resource")) {
                            ids.put("resourceToGetServicesFrom", ids.get("resource"));
                          }
                          if (ids.containsKey("user")) {
                            ids.put("workWithUserAttributes", 1);
                          }
                          if (ids.containsKey("resource") && ids.containsKey("group")) {
                            ids.put("workWithGroupAttributes", 1);
                          }
                          reqAttrs.setIds(ids);
                          reqAttrs.retrieveData();
                        }
                      });

              final SetAttributes request = new SetAttributes();

              if (memChb.getValue() == true) {
                // to all members selected
                UiElements.generateInfo(
                    WidgetTranslation.INSTANCE.saveConfirmTitle(),
                    "Same value(s) for selected attribute(s) will be set to ALL members of group.",
                    new ClickHandler() {
                      public void onClick(ClickEvent event) {
                        ArrayList<RichMember> memList = membersDropDown.getAllObjects();
                        for (int i = 0; i < memList.size(); i++) {
                          if (i == 0) {
                            events.onLoadingStart();
                          } // trigger disable button if first
                          Map<String, Integer> ids = new HashMap<String, Integer>();
                          ids.put("member", memList.get(i).getId());
                          ids.put("user", memList.get(i).getUserId());
                          ids.put("resource", resourceDropDown.getSelectedObject().getId());
                          ids.put("facility", resourceDropDown.getSelectedObject().getFacilityId());
                          if (i == memList.size() - 1) {
                            request.setEvents(events);
                          } // set events to last to get refresh and button enable
                          request.setAttributes(ids, list);
                        }
                      }
                    });
              } else {
                // group or member
                request.setEvents(events); // disable button events
                request.setAttributes(reqAttrs.getIds(), list);
              }
            }
          }
        };

    // REMOVE BUTTON
    final CustomButton removeButton =
        TabMenu.getPredefinedButton(
            ButtonType.REMOVE, ButtonTranslation.INSTANCE.removeAttributes());
    if (!session.isGroupAdmin(groupId) && !session.isVoAdmin(group.getVoId()))
      removeButton.setEnabled(false);

    // click handler to remove group and member-user attributes
    final ClickHandler removeAttrsClickHandler =
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            final ArrayList<Attribute> list = jsonCallback.getTableSelectedList();
            if (UiElements.cantSaveEmptyListDialogBox(list)) {

              // refresh table and disable button a event for GetAttributes
              final JsonCallbackEvents events =
                  JsonCallbackEvents.disableButtonEvents(
                      removeButton, JsonCallbackEvents.refreshTableEvents(jsonCallback));

              final RemoveAttributes request = new RemoveAttributes();

              if (memChb.getValue() == true) {
                // to all members selected
                UiElements.generateInfo(
                    WidgetTranslation.INSTANCE.deleteConfirmTitle(),
                    "Selected attribute(s) will be removed from ALL members of group.",
                    new ClickHandler() {
                      public void onClick(ClickEvent event) {
                        ArrayList<RichMember> memList = membersDropDown.getAllObjects();
                        for (int i = 0; i < memList.size(); i++) {
                          if (i == 0) {
                            events.onLoadingStart();
                          } // trigger disable button if first
                          Map<String, Integer> ids = new HashMap<String, Integer>();
                          ids.put("member", memList.get(i).getId());
                          ids.put("workWithUserAttributes", 1);
                          if (i == memList.size() - 1) {
                            request.setEvents(events);
                          } // set events to last to get refresh and button enable
                          request.removeAttributes(ids, list);
                        }
                      }
                    });
              } else {
                // just one group / memeber
                request.setEvents(events); // disable button events
                request.removeAttributes(jsonCallback.getIds(), list);
              }
            }
          }
        };

    // click handler to remove ResourceRequiredAttributes
    final ClickHandler removeReqAttrsClickHandler =
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            final ArrayList<Attribute> list = jsonCallback.getTableSelectedList();
            if (UiElements.cantSaveEmptyListDialogBox(list)) {

              // refresh table and disable button a event for GetAttributes
              final JsonCallbackEvents events =
                  JsonCallbackEvents.disableButtonEvents(
                      removeButton,
                      new JsonCallbackEvents() {
                        public void onFinished(JavaScriptObject jso) {
                          jsonCallback.clearTable();
                          // set back resourceToGetServicesFrom
                          Map<String, Integer> ids = reqAttrs.getIds();
                          if (ids.containsKey("resource")) {
                            ids.put("resourceToGetServicesFrom", ids.get("resource"));
                          }
                          if (ids.containsKey("user")) {
                            ids.put("workWithUserAttributes", 1);
                          }
                          if (ids.containsKey("resource") && ids.containsKey("group")) {
                            ids.put("workWithGroupAttributes", 1);
                          }
                          reqAttrs.setIds(ids);
                          reqAttrs.retrieveData();
                        }
                      });

              final RemoveAttributes request = new RemoveAttributes();

              if (memChb.getValue() == true) {
                // to all members selected
                UiElements.generateInfo(
                    WidgetTranslation.INSTANCE.deleteConfirmTitle(),
                    "Selected attribute(s) will be removed from ALL members of group.",
                    new ClickHandler() {
                      @Override
                      public void onClick(ClickEvent event) {
                        ArrayList<RichMember> memList = membersDropDown.getAllObjects();
                        for (int i = 0; i < memList.size(); i++) {
                          if (i == 0) {
                            events.onLoadingStart();
                          } // trigger disable button if first
                          Map<String, Integer> ids = new HashMap<String, Integer>();
                          ids.put("member", memList.get(i).getId());
                          ids.put("user", memList.get(i).getUserId());
                          ids.put("resource", resourceDropDown.getSelectedObject().getId());
                          ids.put("facility", resourceDropDown.getSelectedObject().getFacilityId());
                          if (i == memList.size() - 1) {
                            request.setEvents(events);
                          } // set events to last to get refresh and button enable
                          request.removeAttributes(ids, list);
                        }
                      }
                    });
              } else {
                // just one group / member
                request.setEvents(events); // disable button events
                request.removeAttributes(reqAttrs.getIds(), list);
              }
            }
          }
        };

    // SET NEW ATTR BUTTON
    final CustomButton setNewAttributeButton =
        TabMenu.getPredefinedButton(ButtonType.ADD, ButtonTranslation.INSTANCE.setNewAttributes());
    if (!session.isGroupAdmin(groupId) && !session.isVoAdmin(group.getVoId()))
      setNewAttributeButton.setEnabled(false);
    // click handler
    setNewAttributeButton.addClickHandler(
        new ClickHandler() {
          public void onClick(ClickEvent event) {
            ids.clear();
            if (resourceDropDown.getSelectedIndex() > 0) {
              if (membersDropDown.getSelectedIndex() > 0) {
                ids.put("member", membersDropDown.getSelectedObject().getId());
                ids.put("user", membersDropDown.getSelectedObject().getUserId());
                ids.put("resource", resourceDropDown.getSelectedObject().getId());
                ids.put("facility", resourceDropDown.getSelectedObject().getFacilityId());
              } else {
                ids.put("resource", resourceDropDown.getSelectedObject().getId());
                ids.put("group", groupId);
                ids.put("workWithGroupAttributes", 1);
              }
            } else {
              if (membersDropDown.getSelectedIndex() > 0) {
                ids.put("member", membersDropDown.getSelectedObject().getId());
                ids.put("user", membersDropDown.getSelectedObject().getUserId());
              } else {
                ids.put("group", groupId);
              }
            }
            session
                .getTabManager()
                .addTabToCurrentTab(new SetNewAttributeTabItem(ids, jsonCallback.getList()), true);
          }
        });

    // ClickHandlersRegistration - save onClicks for GetAttributes
    final ArrayList<HandlerRegistration> clickHandlers = new ArrayList<HandlerRegistration>();
    clickHandlers.add(saveChangesButton.addClickHandler(saveAttrsClickHandler));
    clickHandlers.add(removeButton.addClickHandler(removeAttrsClickHandler));

    // DEFINE CHANGE HANDLER FOR ALL DROP DOWNS
    ChangeHandler changeHandler =
        new ChangeHandler() {
          public void onChange(ChangeEvent event) {

            int resIndex = resourceDropDown.getSelectedIndex();
            int memIndex = membersDropDown.getSelectedIndex();

            // no resource or member selected
            if (resIndex == 0 && memIndex == 0) {
              lastSelectedMemberId = 0;
              lastSelectedResourceId = 0;
              memChb.setValue(false);
              memChb.setVisible(false);
              jsonCallback.clearTable();
              ids.clear();
              ids.put("group", groupId);
              jsonCallback.setIds(ids);
              jsonCallback.retrieveData();
              for (HandlerRegistration handler : clickHandlers) {
                if (handler != null) {
                  handler.removeHandler();
                }
              }
              clickHandlers.add(saveChangesButton.addClickHandler(saveAttrsClickHandler));
              clickHandlers.add(removeButton.addClickHandler(removeAttrsClickHandler));
            }
            // no resource but member selected
            if (resIndex == 0 && memIndex > 0) {
              lastSelectedMemberId = membersDropDown.getSelectedObject().getId();
              lastSelectedResourceId = 0;
              memChb.setValue(false);
              memChb.setVisible(true);
              jsonCallback.clearTable();
              ids.clear();
              ids.put("member", membersDropDown.getSelectedObject().getId());
              ids.put("workWithUserAttributes", 1);
              jsonCallback.setIds(ids);
              jsonCallback.retrieveData();
              for (HandlerRegistration handler : clickHandlers) {
                if (handler != null) {
                  handler.removeHandler();
                }
              }
              clickHandlers.add(saveChangesButton.addClickHandler(saveAttrsClickHandler));
              clickHandlers.add(removeButton.addClickHandler(removeAttrsClickHandler));
            }
            // resource and no member selected
            if (resIndex > 0 && memIndex == 0) {
              lastSelectedMemberId = 0;
              lastSelectedResourceId = resourceDropDown.getSelectedObject().getId();
              memChb.setValue(false);
              memChb.setVisible(false);
              jsonCallback.clearTable();
              ids.clear();
              ids.put("group", groupId);
              ids.put("resource", resourceDropDown.getSelectedObject().getId());
              ids.put("resourceToGetServicesFrom", ids.get("resource"));
              ids.put("workWithGroupAttributes", 1);
              reqAttrs.setIds(ids);
              reqAttrs.retrieveData();
              // set ids back to make saveChanges work
              ids.remove("resourceToGetServicesFrom");
              reqAttrs.setIds(ids);
              for (HandlerRegistration handler : clickHandlers) {
                if (handler != null) {
                  handler.removeHandler();
                }
              }
              clickHandlers.add(saveChangesButton.addClickHandler(saveReqAttrsClickHandler));
              clickHandlers.add(removeButton.addClickHandler(removeReqAttrsClickHandler));
            }
            // resource and member selected
            if (resIndex > 0 && memIndex > 0) {
              lastSelectedMemberId = membersDropDown.getSelectedObject().getId();
              lastSelectedResourceId = resourceDropDown.getSelectedObject().getId();
              memChb.setValue(false);
              memChb.setVisible(true);
              jsonCallback.clearTable();
              ids.clear();
              ids.put("resource", resourceDropDown.getSelectedObject().getId());
              ids.put("resourceToGetServicesFrom", ids.get("resource"));
              ids.put("member", membersDropDown.getSelectedObject().getId());
              ids.put("workWithUserAttributes", 1);
              reqAttrs.setIds(ids);
              reqAttrs.retrieveData();
              // set ids back to make saveChanges work
              ids.clear();
              ids.put("member", membersDropDown.getSelectedObject().getId());
              ids.put("user", membersDropDown.getSelectedObject().getUser().getId());
              ids.put("facility", resourceDropDown.getSelectedObject().getFacilityId());
              ids.put("resource", resourceDropDown.getSelectedObject().getId());
              reqAttrs.setIds(ids);
              for (HandlerRegistration handler : clickHandlers) {
                if (handler != null) {
                  handler.removeHandler();
                }
              }
              clickHandlers.add(saveChangesButton.addClickHandler(saveReqAttrsClickHandler));
              clickHandlers.add(removeButton.addClickHandler(removeReqAttrsClickHandler));
            }
          }
        };

    // ADD CHANGE HANDLERS TO DROP-DOWN MENUS
    resourceDropDown.addChangeHandler(changeHandler);
    membersDropDown.addChangeHandler(changeHandler);

    // PUT ELEMENTS IN MENU
    menu.addWidget(saveChangesButton);
    // menu.addWidget(resChb);
    menu.addWidget(memChb);
    menu.addWidget(setNewAttributeButton);
    menu.addWidget(removeButton);
    menu.addWidget(new HTML("<strong>Resources:</strong>"));
    menu.addWidget(resourceDropDown);
    menu.addWidget(new HTML("<strong>Members:</strong>"));
    menu.addWidget(membersDropDown);

    this.contentWidget.setWidget(vp);

    return getWidget();
  }