/*
* 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.adm.ui;
import com.vaadin.addon.jpacontainer.AdvancedFilterable;
import com.vaadin.addon.jpacontainer.filter.util.AdvancedFilterableSupport;
import com.vaadin.data.Container;
import ru.codeinside.gses.webui.containers.LazyLoadingContainer;
import ru.codeinside.gses.webui.containers.LazyLoadingQuery;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
public class LazyLoadingContainer2 extends LazyLoadingContainer implements Container.ItemSetChangeNotifier, Container.Filterable, AdvancedFilterable {
private static final long serialVersionUID = 1L;
private Collection<Container.ItemSetChangeListener> propertySetChangeListeners = new LinkedList<Container.ItemSetChangeListener>();
private AdvancedFilterableSupport filterSupport;
public LazyLoadingContainer2(LazyLoadingQuery lazyLoadingQuery, AdvancedFilterableSupport newSender) {
super(lazyLoadingQuery, newSender);
this.sender = newSender;
this.filterSupport = new AdvancedFilterableSupport();
this.filterSupport.addListener(new AdvancedFilterableSupport.ApplyFiltersListener() {
public void filtersApplied(AdvancedFilterableSupport newSender2) {
sender = newSender2;
fireItemSetChange();
}
});
}
public LazyLoadingContainer2(LazyLoadingQuery lazyLoadingQuery) {
this(lazyLoadingQuery, null);
}
public void fireItemSetChange() {
removeAllItems();
if (sender == null) {
for (Container.ItemSetChangeListener l : new LinkedList<Container.ItemSetChangeListener>(propertySetChangeListeners)) {
l.containerItemSetChange(new ItemSetChangeEvent() {
@Override
public Container getContainer() {
return LazyLoadingContainer2.this;
}
});
}
} else {
for (Container.ItemSetChangeListener l : new LinkedList<Container.ItemSetChangeListener>(propertySetChangeListeners)) {
l.containerItemSetChange(new ItemSetChangeEvent() {
@Override
public Container getContainer() {
return new LazyLoadingContainer2(lazyLoadingQuery, sender);
}
});
}
}
}
@Override
public void addListener(Container.ItemSetChangeListener listener) {
propertySetChangeListeners.add(listener);
}
@Override
public void removeListener(Container.ItemSetChangeListener listener) {
if (propertySetChangeListeners != null) {
propertySetChangeListeners.remove(listener);
}
}
@Override
public void addContainerFilter(Filter filter) {
filterSupport.addFilter(filter);
}
@Override
public void removeContainerFilter(Filter filter) {
filterSupport.removeFilter(filter);
}
@Override
public void removeAllContainerFilters() {
filterSupport.removeAllFilters();
}
@Override
public Collection<Object> getFilterablePropertyIds() {
return filterSupport.getFilterablePropertyIds();
}
@Override
public boolean isFilterable(Object propertyId) {
return filterSupport.isFilterable(propertyId);
}
@Override
public List<Filter> getFilters() {
return filterSupport.getFilters();
}
@Override
public List<Filter> getAppliedFilters() {
return filterSupport.getAppliedFilters();
}
@Override
public void setApplyFiltersImmediately(boolean applyFiltersImmediately) {
filterSupport.setApplyFiltersImmediately(applyFiltersImmediately);
}
@Override
public boolean isApplyFiltersImmediately() {
return filterSupport.isApplyFiltersImmediately();
}
@Override
public void applyFilters() {
filterSupport.applyFilters();
}
@Override
public boolean hasUnappliedFilters() {
return filterSupport.hasUnappliedFilters();
}
}