/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.gses.webui.declarant;
import java.io.Serializable;
import java.util.*;
import ru.codeinside.adm.database.Procedure;
import ru.codeinside.adm.database.ProcedureType;
import ru.codeinside.adm.database.Service;
import ru.codeinside.gses.lazyquerycontainer.Query;
import ru.codeinside.gses.webui.Flash;
import com.google.common.collect.Lists;
import com.vaadin.data.Item;
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.data.util.PropertysetItem;
final public class ServiceQuery implements Query, Serializable {
private static final long serialVersionUID = 1L;
final ProcedureType type;
private boolean showActive;
private LinkedHashSet<Service> services = new LinkedHashSet<Service>();
public ServiceQuery(ProcedureType type, boolean showActive) {
this.type = type;
this.showActive = showActive;
}
@Override
public int size() {
if(showActive){
return Flash.flash().getDeclarantService().activeServicesCount(type);
}
services = new LinkedHashSet<Service>();
for(Service s : Flash.flash().getDeclarantService().selectActiveServices(type, 0, DeclarantUtils.MAX_COUNT)){
Set<Procedure> filtered = DeclarantUtils.filtered(Flash.login(), new ArrayList<Procedure>(s.getProcedures()));
if(!filtered.isEmpty()){
services.add(s);
}
}
return services.size();
}
@Override
public List<Item> loadItems(final int start, final int count) {
final List<Item> items = Lists.newArrayListWithExpectedSize(services.size());
List<Service> serviceList = showActive ? Flash.flash().getDeclarantService().selectActiveServices(type, start, count) : DeclarantUtils.sublist(services, start, count);
for (Service s : serviceList) {
final PropertysetItem item = new PropertysetItem();
item.addItemProperty("id", new ObjectProperty<Long>(s.getId()));
item.addItemProperty("name", new ObjectProperty<String>(s.getName()));
items.add(item);
}
return items;
}
@Override
public void saveItems(List<Item> addedItems, List<Item> modifiedItems, List<Item> removedItems) {
throw new UnsupportedOperationException();
}
@Override
public boolean deleteAllItems() {
throw new UnsupportedOperationException();
}
@Override
public Item constructItem() {
throw new UnsupportedOperationException();
}
}