Package com.google.testing.testify.risk.frontend.client.view.impl

Source Code of com.google.testing.testify.risk.frontend.client.view.impl.FilterViewImpl$FilterViewImplUiBinder

// Copyright 2011 Google Inc. All Rights Reseved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


package com.google.testing.testify.risk.frontend.client.view.impl;

import com.google.common.collect.Lists;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.testing.testify.risk.frontend.client.view.FilterView;
import com.google.testing.testify.risk.frontend.client.view.widgets.ConstrainedParameterWidget;
import com.google.testing.testify.risk.frontend.model.FilterOption;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
* Implementation of FilterView.
*
* @author jimr@google.com (Jim Reardon)
*/
public class FilterViewImpl extends Composite implements FilterView {

  interface FilterViewImplUiBinder extends UiBinder<Widget, FilterViewImpl> {}
  private static final FilterViewImplUiBinder uiBinder =
              GWT.create(FilterViewImplUiBinder.class);

  @UiField
  protected Label filterName;
 
  @UiField
  protected ListBox anyOrAllBox;

  @UiField
  protected VerticalPanel filterOptions;
 
  @UiField
  protected Anchor addOptionLink;
 
  @UiField
  protected Button updateFilter;
 
  @UiField
  protected Button cancelUpdateFilter;
 
  @UiField
  protected Image deleteFilterImage;

  @UiField
  protected ListBox attributeBox;

  @UiField
  protected ListBox componentBox;

  @UiField
  protected ListBox capabilityBox;

  private Presenter presenter;
  private List<String> filterOptionChoices = Lists.newArrayList();
  private Long attribute;
  private Long component;
  private Long capability;
 
  private static final String NONE_VALUE = "<< none >>";

  public FilterViewImpl() {
    List<String> items = Lists.newArrayList();
    initWidget(uiBinder.createAndBindUi(this));

    anyOrAllBox.addItem("any", "any");
    anyOrAllBox.addItem("all", "all");
  }

  /** When the user clicks the 'add option' link, add a new option input to the end of the list. */
  @UiHandler("addOptionLink")
  protected void handleAddOptionLinkClick(ClickEvent event) {
    filterOptions.add(createRequestWidget("", ""));
  }

  @UiHandler("updateFilter")
  void onUpdateFilterClicked(ClickEvent event) {
    ArrayList<FilterOption> options = Lists.newArrayList();
    // Iterate through each widget on the Filter Options Vertical Panel, as each of those will be
    // a parameter to the filter.
    for (Widget widget : filterOptions) {
      ConstrainedParameterWidget param = (ConstrainedParameterWidget) widget;
      String type = param.getParameterKey();
      String value = param.getParameterValue();
      FilterOption option = new FilterOption(type, value);
      options.add(option);
    }
    String conjunction = anyOrAllBox.getValue(anyOrAllBox.getSelectedIndex());
    attribute = stringToId(attributeBox.getValue(attributeBox.getSelectedIndex()));
    component = stringToId(componentBox.getValue(componentBox.getSelectedIndex()));
    capability = stringToId(capabilityBox.getValue(capabilityBox.getSelectedIndex()));
    presenter.onUpdate(options, conjunction, attribute, component, capability);
  }

  private ConstrainedParameterWidget createRequestWidget(String name, String value) {
    final ConstrainedParameterWidget param = new ConstrainedParameterWidget(
        filterOptionChoices, name, value);

    param.addChangeHandler(new ChangeHandler() {
        @Override
        public void onChange(ChangeEvent arg0) {
          filterOptions.remove(param);
        }
      });
    return param;
  }

  // Will return NULL if the user has selected the NONE option, otherwise the string is parsed
  // into a Long.
  private Long stringToId(String string) {
    if (NONE_VALUE.equals(string)) {
      return null;
    }
    return Long.parseLong(string);
  }

  @UiHandler("cancelUpdateFilter")
  void onCancelUpdateFilterClicked(ClickEvent event) {
    presenter.refreshView();
  }

  @UiHandler("deleteFilterImage")
  void onDeleteFilterImageClicked(ClickEvent event) {
    String promptText = "Are you sure you want to remove this filter?";
    if (Window.confirm(promptText)) {
      presenter.onRemove();
    }
  }

  @Override
  public void setFilterSettings(List<FilterOption> options, String conjunction, Long attribute,
      Long component, Long capability) {
    // Select the conjunctor they have set.
    selectInListBoxByValue(anyOrAllBox, conjunction);

    // Store the selected ACC parts.
    this.attribute = attribute;
    selectInListBoxByValue(attributeBox, attribute);
    this.component = component;
    selectInListBoxByValue(componentBox, component);
    this.capability = capability;
    selectInListBoxByValue(capabilityBox, capability);

    filterOptions.clear();

    for (FilterOption option : options) {
      filterOptions.add(createRequestWidget(option.getType(), option.getValue()));
    }

    // If there's not a filter option yet, show an empty blank.
    if (options.size() < 1) {
      handleAddOptionLinkClick(null);
    }
  }

  private void selectInListBoxByValue(ListBox box, Long value) {
    selectInListBoxByValue(box, value == null ? null : value.toString());
  }

  private void selectInListBoxByValue(ListBox box, String value) {
    // Default to first item, which in many boxes will be the none value.
    box.setSelectedIndex(0);
    for (int i = 0; i < box.getItemCount(); i++) {
      if (box.getValue(i).equals(value)) {
        box.setSelectedIndex(i);
      }
    }
  }

  @Override
  public Widget asWidget() {
    return this;
  }

  @Override
  public void hide() {
    setVisible(false);
  }

  @Override
  public void setFilterTitle(String title) {
    filterName.setText(title);
  }

  @Override
  public void setFilterOptionChoices(List<String> filterOptionChoices) {
    this.filterOptionChoices = filterOptionChoices;
  }

  @Override
  public void setPresenter(Presenter presenter) {
    this.presenter = presenter;
  }

  private void populateAccBox(ListBox box, Map<String, Long> items) {
    box.clear();
    box.addItem(NONE_VALUE, NONE_VALUE);
    for (String key : items.keySet()) {
      Long id = items.get(key);
      box.addItem(key, id.toString());
    }
  }
  @Override
  public void setAttributes(Map<String, Long> attributes) {
    populateAccBox(attributeBox, attributes);
    selectInListBoxByValue(attributeBox, attribute);
  }

  @Override
  public void setCapabilities(Map<String, Long> capabilities) {
    populateAccBox(capabilityBox, capabilities);
    selectInListBoxByValue(capabilityBox, capability);
  }

  @Override
  public void setComponents(Map<String, Long> components) {
    populateAccBox(componentBox, components);
    selectInListBoxByValue(componentBox, component);
  }
}
TOP

Related Classes of com.google.testing.testify.risk.frontend.client.view.impl.FilterViewImpl$FilterViewImplUiBinder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.