package cgeo.geocaching.filter;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.models.Geocache;
import cgeo.geocaching.utils.TextUtils;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class OriginFilter extends AbstractFilter {
private final IConnector connector;
public static final Creator<OriginFilter> CREATOR = new Parcelable.Creator<OriginFilter>() {
@Override
public OriginFilter createFromParcel(final Parcel in) {
return new OriginFilter(in);
}
@Override
public OriginFilter[] newArray(final int size) {
return new OriginFilter[size];
}
};
public OriginFilter(@NonNull final IConnector connector) {
super(connector.getName());
this.connector = connector;
}
protected OriginFilter(final Parcel in) {
super(in);
connector = ConnectorFactory.getConnectorByName(in.readString());
}
@Override
public final boolean accepts(@NonNull final Geocache cache) {
return ConnectorFactory.getConnector(cache).getName().equalsIgnoreCase(connector.getName());
}
public static final class Factory implements IFilterFactory {
@Override
@NonNull
public List<IFilter> getFilters() {
final List<IFilter> filters = new ArrayList<>();
for (final IConnector connector : ConnectorFactory.getConnectors()) {
filters.add(new OriginFilter(connector));
}
// sort connectors by name
Collections.sort(filters, new Comparator<IFilter>() {
@Override
public int compare(final IFilter lhs, final IFilter rhs) {
return TextUtils.COLLATOR.compare(lhs.getName(), rhs.getName());
}
});
return filters;
}
}
@Override
public void writeToParcel(final Parcel dest, final int flags) {
super.writeToParcel(dest, flags);
dest.writeString(connector.getName()); // Do not parcel the full Connector Object
}
}