/** * 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 java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; 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 com.francetelecom.clara.cloud.coremodel.ApplicationRelease; /** * Created by IntelliJ IDEA. User: Thomas Escalle - tawe8231 Entity : * FT/OLNC/RD/MAPS/MEP/MSE Date: 28/02/12 */ public class ReleaseProvider extends SortableDataProvider<ApplicationRelease, String> { private static final long serialVersionUID = -5232260242289073148L; //private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(ReleaseProvider.class); private String searchCriteria; private List<ApplicationRelease> releasesList; private transient List<ApplicationRelease> filtered; public ReleaseProvider(String searchCriteria, List<ApplicationRelease> releasesList) { this.searchCriteria = searchCriteria; this.releasesList = releasesList; setSort(new SortParam<String>("label", true)); } @Override public Iterator<ApplicationRelease> iterator(long first, long count) { List<ApplicationRelease> filteredData = getFiltered(); Collections.sort(filteredData, new Comparator<ApplicationRelease>() { @Override public int compare(ApplicationRelease o1, ApplicationRelease o2) { String sortField = getSort().getProperty(); int dir = getSort().isAscending() ? 1 : -1; if ("state".equals(sortField)) { return dir * (o1.getState().name().toUpperCase().compareTo(o2.getState().name().toUpperCase())); } else if ("description".equals(getSort().getProperty())) { return dir * (o1.getDescription().toUpperCase().compareTo(o2.getDescription().toUpperCase())); } else { String release1 = o1.getApplication().getLabel() + " - " + o1.getReleaseVersion(); String release2 = o2.getApplication().getLabel() + " - " + o2.getReleaseVersion(); return dir * release1.toUpperCase().compareTo(release2.toUpperCase()); } } }); 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<ApplicationRelease> model(ApplicationRelease object) { return Model.of(object); } // tri + search field private List<ApplicationRelease> getFiltered() { if (filtered == null) { filtered = filter(); } return filtered; } private List<ApplicationRelease> filter() { List<ApplicationRelease> filtered = new ArrayList<ApplicationRelease>(releasesList); if (searchCriteria != null && !searchCriteria.equalsIgnoreCase("")) { String upper = searchCriteria.toUpperCase(); Iterator<ApplicationRelease> it = filtered.iterator(); ApplicationRelease ar = null; String label = ""; while (it.hasNext()) { ar = it.next(); label = ar.getApplication().getLabel() + " - " + ar.getReleaseVersion(); if (label.toUpperCase().indexOf(upper) < 0 && ar.getState().name().toUpperCase().indexOf(upper) < 0 && ar.getDescription().toUpperCase().indexOf(upper) < 0 //&& env.getComment().toUpperCase().indexOf(upper) < 0 ) { it.remove(); } } } return filtered; } @Override public void detach() { filtered = null; super.detach(); } }