/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 *******************************************************************************/ package org.ebayopensource.turmeric.policy.adminui.client.view; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.ebayopensource.turmeric.policy.adminui.client.PolicyAdminUIUtil; import org.ebayopensource.turmeric.policy.adminui.client.model.Filterable; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; /** * ErrorFilterWidget. */ public class ErrorFilterWidget extends FilterWidget implements Filterable.ErrorFilterable{ /** The view label. */ protected Label viewLabel; /** The view grid. */ protected Grid viewGrid; /** The category grid. */ protected Grid categoryGrid; /** The categories grid. */ protected Grid categoriesGrid; /** The severity grid. */ protected Grid severityGrid; /** The severities grid. */ protected Grid severitiesGrid; /** The category label. */ protected Label categoryLabel; /** The severity label. */ protected Label severityLabel; /** * Instantiates a new error filter widget. */ public ErrorFilterWidget() { super(); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.view.FilterWidget#createOthers() */ public void createOthers () { viewLabel = new Label(PolicyAdminUIUtil.constants.viewErrorsBy()+": "); viewGrid = new Grid(1,2); categoryGrid = new Grid(2,1); categoryLabel = new Label(PolicyAdminUIUtil.constants.category()+": "); categoriesGrid = new Grid(); categoryGrid.setWidget(0,0,categoryLabel); categoryGrid.setWidget(1,0,categoriesGrid); severityGrid = new Grid(2,1); severityLabel = new Label(PolicyAdminUIUtil.constants.severity()+": "); severitiesGrid = new Grid(); severityGrid.setWidget (0,0,severityLabel); severityGrid.setWidget(1,0,severitiesGrid); viewGrid.setWidget(0,0, categoryGrid); viewGrid.setWidget(0,1, severityGrid); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.view.FilterWidget#position() */ public void position () { filterTable.clear(); filterTable.setWidget(0, 0, date1Label); filterTable.getCellFormatter().setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_LEFT); filterTable.getCellFormatter().setWordWrap(0, 0, false); filterTable.setWidget(0, 1, date1Grid); filterTable.setWidget(1, 0,date2Label); filterTable.getCellFormatter().setHorizontalAlignment(1, 0, HasHorizontalAlignment.ALIGN_LEFT); filterTable.getCellFormatter().setWordWrap(1, 0, false); filterTable.setWidget(1, 1, date2Grid); filterTable.setWidget(2, 0, intervalLabel); filterTable.getCellFormatter().setHorizontalAlignment(2, 0, HasHorizontalAlignment.ALIGN_LEFT); filterTable.getCellFormatter().setWordWrap(2, 0, false); filterTable.setWidget(2, 1, durationInput); filterTable.setWidget(3, 0, viewLabel); filterTable.getCellFormatter().setHorizontalAlignment(3, 0, HasHorizontalAlignment.ALIGN_LEFT); filterTable.getCellFormatter().setWordWrap(3, 0, false); filterTable.setWidget(3, 1, viewGrid); filterTable.setWidget(4, 0, advancedPanel); filterTable.getCellFormatter().setHorizontalAlignment(4, 0, HasHorizontalAlignment.ALIGN_LEFT); filterTable.getFlexCellFormatter().setColSpan(4, 0, 2); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.view.FilterWidget#createAdvancedPanel() */ public void createAdvancedPanel () { super.createAdvancedPanel(); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.Filterable.ErrorFilterable#setCategoryViewNames(java.util.List) */ public void setCategoryViewNames (List<String> names) { setGridValues(categoriesGrid, names, PolicyAdminUIUtil.constants.metricNameMap(), severitiesGrid); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.Filterable.ErrorFilterable#setSelectedCategoryViewNames(java.util.List) */ public void setSelectedCategoryViewNames (List<String> names) { setSelectedGridValues(categoriesGrid, names, severitiesGrid); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.Filterable.ErrorFilterable#getSelectedCategoryViewNames() */ public List<String> getSelectedCategoryViewNames() { return getSelectedGridValues(categoriesGrid); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.Filterable.ErrorFilterable#setSeverityViewNames(java.util.List) */ public void setSeverityViewNames (List<String> names) { setGridValues(severitiesGrid, names, PolicyAdminUIUtil.constants.metricNameMap(), categoriesGrid); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.Filterable.ErrorFilterable#setSelectedSeverityViewNames(java.util.List) */ public void setSelectedSeverityViewNames (List<String> names) { setSelectedGridValues(severitiesGrid, names, categoriesGrid); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.policy.adminui.client.model.Filterable.ErrorFilterable#getSelectedSeverityViewNames() */ public List<String> getSelectedSeverityViewNames () { return getSelectedGridValues(severitiesGrid); } /** * Disable. * * @param g * the g */ public void disable (Grid g) { Iterator<Widget> itor = g.iterator(); while (itor.hasNext()) { Widget w = itor.next(); if (w instanceof CheckBox) ((CheckBox)w).setEnabled(false); } } /** * Enable. * * @param g * the g */ public void enable (Grid g) { Iterator<Widget> itor = g.iterator(); while (itor.hasNext()) { Widget w = itor.next(); if (w instanceof CheckBox) ((CheckBox)w).setEnabled(true); } } /** * Sets the grid values. * * @param grid * the grid * @param names * the names * @param localizedNameMap * the localized name map * @param counterpartGrid * the counterpart grid */ protected void setGridValues (final Grid grid, final List<String> names, final Map localizedNameMap, final Grid counterpartGrid) { grid.clear(); grid.resize(names.size(), 1); int i=0; for (String name:names) { CheckBox cb = new CheckBox((String)localizedNameMap.get(name)); cb.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { //if a checkbox is selected, the counterpart Grid entries are all disabled if (((CheckBox)event.getSource()).getValue()) disable(counterpartGrid); else { //if no checkboxes are selected, then the counterpart Grid is enabled int checkCount = 0; Iterator<Widget> itor = grid.iterator(); while (itor.hasNext()) { Widget w = itor.next(); if (w instanceof CheckBox) { if (((CheckBox)w).getValue()) checkCount++; } } if (checkCount == 0) enable(counterpartGrid); } } }); cb.setFormValue(name); grid.setWidget(i, 0, cb); grid.getCellFormatter().setWordWrap(i, 0, false); i++; } } /** * Sets the selected grid values. * * @param grid * the grid * @param names * the names * @param counterpartGrid * the counterpart grid */ protected void setSelectedGridValues (Grid grid, List<String> names, final Grid counterpartGrid) { boolean checked = false; for (int i=0; i<grid.getRowCount(); i++) { Widget w = grid.getWidget(i,0); if (w instanceof CheckBox) { if (names.contains(((CheckBox)w).getFormValue())) { ((CheckBox)w).setValue(true); checked = true; } else ((CheckBox)w).setValue(false); } } if (checked) disable(counterpartGrid); } /** * Gets the selected grid values. * * @param grid * the grid * @return the selected grid values */ protected List<String> getSelectedGridValues (Grid grid) { List<String> names = new ArrayList<String> (); for (int i=0; i<grid.getRowCount(); i++) { Widget w = grid.getWidget(i, 0); if (w instanceof CheckBox) { if (((CheckBox)w).getValue() && ((CheckBox)w).isEnabled()) names.add(((CheckBox)w).getFormValue()); } } return names; } }