/** * Copyright (C) 2015 Orange * 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.francetelecom.clara.cloud.presentation.tools; import com.francetelecom.clara.cloud.coremodel.Application; import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import java.util.*; /** * Created by IntelliJ IDEA. * User: Thomas Escalle - tawe8231 * Entity : FT/OLNC/RD/MAPS/MEP/MSE * Date: 20/02/12 */ public class ApplicationProvider extends SortableDataProvider<Application, String> { private static final long serialVersionUID = -607185222587506578L; private String searchCriteria; private List<Application> applicationsList; private transient List<Application> filtered; public ApplicationProvider(String searchCriteria, List<Application> applicationsList) { this.searchCriteria = searchCriteria; this.applicationsList = applicationsList; setSort(new SortParam<String>("label", true)); } @Override public Iterator<Application> iterator(long first, long count) { List<Application> filteredData = getFiltered(); Collections.sort(filteredData, new Comparator<Application>() { @Override public int compare(Application o1, Application o2) { String sortField = getSort().getProperty(); int dir = getSort().isAscending() ? 1 : -1; if ("label".equals(sortField)) { return dir * (o1.getLabel().toUpperCase().compareTo(o2.getLabel().toUpperCase())); } else if ("code".equals(sortField)) { return dir * (o1.getCode().toUpperCase().compareTo(o2.getCode().toUpperCase())); } else if ("description".equals(getSort().getProperty())) { return dir * (o1.getDescription().toUpperCase().compareTo(o2.getDescription().toUpperCase())); } else { return dir * Boolean.compare(o1.isPublic(), o2.isPublic()); } } }); int f = new Long(first).intValue(); int c = new Long(Math.min(first + count, filteredData.size())).intValue(); return filteredData.subList(f, c).iterator(); } @Override public long size() { return getFiltered().size(); } @Override public IModel<Application> model(Application object) { return Model.of(object); } // sort + search field private List<Application> getFiltered() { if (filtered == null) { filtered = filter(); } return filtered; } private List<Application> filter() { List<Application> filtered = new ArrayList<Application>(applicationsList); if (searchCriteria != null && !searchCriteria.equalsIgnoreCase("")) { String upper = searchCriteria.toUpperCase(); Iterator<Application> it = filtered.iterator(); Application app = null; while (it.hasNext()) { app = it.next(); if (app.getLabel().toUpperCase().indexOf(upper) < 0 && app.getCode().toUpperCase().indexOf(upper) < 0 && app.getDescription().toUpperCase().indexOf(upper) < 0 //&& app.getComment().toUpperCase().indexOf(upper) < 0 ) { it.remove(); } } } return filtered; } @Override public void detach() { filtered = null; super.detach(); } }