/**
* 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.Environment;
import com.francetelecom.clara.cloud.services.dto.EnvironmentDto;
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.*;
public class EnvironmentDtoProvider extends SortableDataProvider<EnvironmentDto, String> {
private static final long serialVersionUID = 1455084794375389713L;
//private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(EnvironmentDtoProvider.class);
private String searchCriteria;
private List<EnvironmentDto> envList;
private transient List<EnvironmentDto> filtered;
public EnvironmentDtoProvider(String searchCriteria, List<EnvironmentDto> envList) {
this.searchCriteria = searchCriteria;
this.envList = envList;
setSort(new SortParam<String>(Environment.CREATION_DATE, false));
}
@Override
public Iterator<EnvironmentDto> iterator(long first, long count) {
List<EnvironmentDto> filteredData = getFiltered();
Collections.sort(filteredData, new Comparator<EnvironmentDto>() {
@Override
public int compare(EnvironmentDto o1, EnvironmentDto o2) {
int dir = getSort().isAscending() ? 1 : -1;
if ("label".equals(getSort().getProperty())) {
return dir * (o1.getLabel().toUpperCase().compareTo(o2.getLabel().toUpperCase()));
} else if ("applicationReleaseLabel".equals(getSort().getProperty())) {
String releaseName1 = o1.getApplicationLabel() + " - " + o1.getReleaseVersion();
String releaseName2 = o2.getApplicationLabel() + " - " + o2.getReleaseVersion();
return dir * (releaseName1.toUpperCase().compareTo(releaseName2.toUpperCase()));
} else if ("type".equals(getSort().getProperty())) {
return dir * (o1.getType().name().toUpperCase().compareTo(o2.getType().name().toUpperCase()));
} else if ("ownerName".equals(getSort().getProperty())) {
return dir * (o1.getOwnerId().toUpperCase().compareTo(o2.getOwnerId().toUpperCase()));
} else if ("status".equals(getSort().getProperty())) {
return dir * (o1.getStatus().name().toUpperCase().compareTo(o2.getStatus().name().toUpperCase()));
} else {
return dir * (o1.getCreationDate().compareTo(o2.getCreationDate()));
}
}
});
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<EnvironmentDto> model(EnvironmentDto object) {
return Model.of(object);
}
// sort + search field
private List<EnvironmentDto> getFiltered() {
if (filtered == null) {
filtered = filter();
}
return filtered;
}
private List<EnvironmentDto> filter() {
List<EnvironmentDto> filtered = new ArrayList<EnvironmentDto>(envList);
if (searchCriteria != null && !searchCriteria.equalsIgnoreCase("")) {
String upper = searchCriteria.toUpperCase();
EnvironmentDto env = null;
Iterator<EnvironmentDto> it = filtered.iterator();
String releaseName = "";
while (it.hasNext()) {
env = it.next();
releaseName = env.getApplicationLabel() + " - " + env.getReleaseVersion();
if (releaseName.toUpperCase().indexOf(upper) < 0
&& env.getLabel().toUpperCase().indexOf(upper) < 0
//&& env.getComment().toUpperCase().indexOf(upper) < 0
&& env.getOwnerId().toUpperCase().indexOf(upper) < 0
&& env.getType().name().toUpperCase().indexOf(upper) < 0
&& env.getStatus().name().toUpperCase().indexOf(upper) < 0) {
it.remove();
}
}
}
return filtered;
}
@Override
public void detach() {
filtered = null;
super.detach();
}
}