/*
*
* 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 org.vaadin.viritin.it.aspect;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.beanutils.BeanComparator;
import org.vaadin.addonhelpers.AbstractTest;
import org.vaadin.viritin.LazyList;
import org.vaadin.viritin.v7.fields.MTable;
import org.vaadin.viritin.testdomain.Service;
import org.vaadin.viritin.testdomain.User;
import com.vaadin.annotations.Theme;
import com.vaadin.ui.Component;
import java.text.MessageFormat;
import java.util.Comparator;
import java.util.Locale;
import java.util.Random;
/**
* Test reading default methods
* Code borrowed from MTableLazyLoadingWithSorting
* @author Klaus Sausen
*/
@Theme("valo")
public class MTableLazyLoadingWithEntityAspect extends AbstractTest {
private static final long serialVersionUID = 1L;
@Override
public Component getTestComponent() {
Random r = new Random(0);
final List<User> listOfPersons =
Service
.getListOfPersons(1000).stream()
.map(person -> {
User u = new User(person);
u.setLocale(r.nextBoolean() ? Locale.ENGLISH : Locale.FRENCH);
return u;
})
.collect(Collectors.toList());
MTable<User> table = new MTable<>(
(firstRow, sortAscending, property) -> {
if (property != null) {
if(property.equals("localizedSalutation")) {
Collections.sort(listOfPersons, new Comparator<User>(){
@Override
public int compare(User o1, User o2) {
return localizedSalutation(o1).compareTo(localizedSalutation(o2));
}
});
} else {
Collections.sort(listOfPersons, new BeanComparator<>(
property));
}
if (!sortAscending) {
Collections.reverse(listOfPersons);
}
}
int last = firstRow + LazyList.DEFAULT_PAGE_SIZE;
if (last > listOfPersons.size()) {
last = listOfPersons.size();
}
return new ArrayList<User>(listOfPersons.subList(firstRow,
last));
},
() -> (int)Service.count()
)
.withProperties("localizedSalutation","locale", "person.firstName", "person.lastName")
.withColumnHeaders("Salutation", "Locale", "Forename", "Name")
.withFullWidth()
.withGeneratedColumn("localizedSalutation", u-> localizedSalutation(u));
return table;
}
String localizedSalutation(User u) {
return MessageFormat.format(
u.getLocalizedSalutation(), u.getPerson().getFirstName());
}
}