/* * Copyright 2000-2016 Vaadin Ltd. * * 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.vaadin.v7.tests.components.grid; import java.util.ArrayList; import java.util.List; import com.vaadin.server.VaadinRequest; import com.vaadin.shared.data.sort.SortDirection; import com.vaadin.tests.components.AbstractReindeerTestUI; import com.vaadin.v7.data.sort.SortOrder; import com.vaadin.v7.event.SortEvent; import com.vaadin.v7.event.SortEvent.SortListener; import com.vaadin.v7.ui.Grid; /* * Test UI for checking that sort indicators of a Grid are updated when the sort order is changed by a * SortListener. */ public class GridSortIndicator extends AbstractReindeerTestUI { @Override protected void setup(VaadinRequest request) { final Grid g = getGrid(); addComponent(g); g.addSortListener(new SortListener() { private SortDirection oldSortDirection = null; @Override public void sort(SortEvent event) { List<SortOrder> currentSortOrder = new ArrayList<>( event.getSortOrder()); if (currentSortOrder.size() == 1) { // If the name column was clicked, set a new sort order for // both columns. Otherwise, revert to oldSortDirection if it // is not null. List<SortOrder> newSortOrder = new ArrayList<>(); SortDirection newSortDirection = oldSortDirection; if (currentSortOrder.get(0).getPropertyId() .equals("Name")) { newSortDirection = SortDirection.ASCENDING.equals( oldSortDirection) ? SortDirection.DESCENDING : SortDirection.ASCENDING; } if (newSortDirection != null) { newSortOrder .add(new SortOrder("Name", newSortDirection)); newSortOrder .add(new SortOrder("Value", newSortDirection)); g.setSortOrder(newSortOrder); } oldSortDirection = newSortDirection; } } }); } private final Grid getGrid() { Grid g = new Grid(); g.addColumn("Name"); g.addColumn("Value", Integer.class); g.addRow(new Object[] { "a", 4 }); g.addRow(new Object[] { "b", 5 }); g.addRow(new Object[] { "c", 3 }); g.addRow(new Object[] { "a", 6 }); g.addRow(new Object[] { "a", 2 }); g.addRow(new Object[] { "c", 7 }); g.addRow(new Object[] { "b", 1 }); return g; } @Override public String getTestDescription() { return "When the first column is the primary sort column, both columns should have " + "a sort indicator with the same sort direction. Clicking on the right column " + "in that state should have no effect."; } @Override public Integer getTicketNumber() { return 17440; } }