From b6cabce732d206d23ec7ccc70531e1163aa201d9 Mon Sep 17 00:00:00 2001 From: Bananeweizen Date: Sun, 11 Dec 2011 12:23:42 +0100 Subject: refactoring: use an interface for the filters --- main/src/cgeo/geocaching/CacheListAdapter.java | 8 ++--- main/src/cgeo/geocaching/cgeocaches.java | 16 +++++----- .../src/cgeo/geocaching/filter/AbstractFilter.java | 29 ++++++++++++++++++ main/src/cgeo/geocaching/filter/FilterBySize.java | 23 +++++++++++++++ .../cgeo/geocaching/filter/FilterByTrackables.java | 14 +++++++++ main/src/cgeo/geocaching/filter/FilterByType.java | 23 +++++++++++++++ main/src/cgeo/geocaching/filter/IFilter.java | 18 ++++++++++++ main/src/cgeo/geocaching/filter/cgFilter.java | 34 ---------------------- .../src/cgeo/geocaching/filter/cgFilterBySize.java | 23 --------------- .../geocaching/filter/cgFilterByTrackables.java | 14 --------- .../src/cgeo/geocaching/filter/cgFilterByType.java | 23 --------------- 11 files changed, 119 insertions(+), 106 deletions(-) create mode 100644 main/src/cgeo/geocaching/filter/AbstractFilter.java create mode 100644 main/src/cgeo/geocaching/filter/FilterBySize.java create mode 100644 main/src/cgeo/geocaching/filter/FilterByTrackables.java create mode 100644 main/src/cgeo/geocaching/filter/FilterByType.java create mode 100644 main/src/cgeo/geocaching/filter/IFilter.java delete mode 100644 main/src/cgeo/geocaching/filter/cgFilter.java delete mode 100644 main/src/cgeo/geocaching/filter/cgFilterBySize.java delete mode 100644 main/src/cgeo/geocaching/filter/cgFilterByTrackables.java delete mode 100644 main/src/cgeo/geocaching/filter/cgFilterByType.java (limited to 'main/src') diff --git a/main/src/cgeo/geocaching/CacheListAdapter.java b/main/src/cgeo/geocaching/CacheListAdapter.java index ad0bf56..5d53d72 100644 --- a/main/src/cgeo/geocaching/CacheListAdapter.java +++ b/main/src/cgeo/geocaching/CacheListAdapter.java @@ -3,7 +3,7 @@ package cgeo.geocaching; import cgeo.geocaching.enumerations.CacheListType; import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; -import cgeo.geocaching.filter.cgFilter; +import cgeo.geocaching.filter.IFilter; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.sorting.CacheComparator; import cgeo.geocaching.sorting.DistanceComparator; @@ -72,7 +72,7 @@ public class CacheListAdapter extends ArrayAdapter { private static final int SWIPE_MAX_OFF_PATH = 100; private static final int SWIPE_DISTANCE = 80; private static final float SWIPE_OPACITY = 0.5f; - private cgFilter currentFilter = null; + private IFilter currentFilter = null; private List originalList = null; private final CacheListType cacheListType; @@ -123,7 +123,7 @@ public class CacheListAdapter extends ArrayAdapter { /** * Called after a user action on the filter menu. */ - public void setFilter(cgFilter filter) { + public void setFilter(final IFilter filter) { // Backup current caches list if it isn't backed up yet if (originalList == null) { originalList = new ArrayList(list); @@ -161,7 +161,7 @@ public class CacheListAdapter extends ArrayAdapter { } public String getFilterName() { - return currentFilter.getFilterName(); + return currentFilter.getName(); } public void setHistoric(boolean historicIn) { diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index 30eb27f..0dfda1c 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -10,10 +10,10 @@ import cgeo.geocaching.enumerations.CacheSize; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.files.GPXImporter; -import cgeo.geocaching.filter.cgFilter; -import cgeo.geocaching.filter.cgFilterBySize; -import cgeo.geocaching.filter.cgFilterByTrackables; -import cgeo.geocaching.filter.cgFilterByType; +import cgeo.geocaching.filter.FilterBySize; +import cgeo.geocaching.filter.FilterByTrackables; +import cgeo.geocaching.filter.FilterByType; +import cgeo.geocaching.filter.IFilter; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.maps.CGeoMap; import cgeo.geocaching.sorting.CacheComparator; @@ -1048,7 +1048,7 @@ public class cgeocaches extends AbstractListActivity { showFilterMenu(SUBMENU_FILTER_SIZE); return true; case MENU_FILTER_TRACKABLES: - setFilter(new cgFilterByTrackables(res.getString(R.string.caches_filter_track))); + setFilter(new FilterByTrackables(res.getString(R.string.caches_filter_track))); return true; case MENU_FILTER_CLEAR: if (adapter != null) { @@ -1084,7 +1084,7 @@ public class cgeocaches extends AbstractListActivity { } builder.setItems(names.toArray(new String[names.size()]), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { - setFilter(new cgFilterBySize(cacheSizes[item])); + setFilter(new FilterBySize(cacheSizes[item])); } }); break; @@ -1099,7 +1099,7 @@ public class cgeocaches extends AbstractListActivity { } builder.setItems(typeNames.toArray(new String[typeNames.size()]), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { - setFilter(new cgFilterByType(cacheTypes[item])); + setFilter(new FilterByType(cacheTypes[item])); } }); break; @@ -1285,7 +1285,7 @@ public class cgeocaches extends AbstractListActivity { return adapter.getItem(adapterInfo.position); } - private boolean setFilter(cgFilter filter) { + private boolean setFilter(IFilter filter) { if (adapter != null) { adapter.setFilter(filter); prepareFilterBar(); diff --git a/main/src/cgeo/geocaching/filter/AbstractFilter.java b/main/src/cgeo/geocaching/filter/AbstractFilter.java new file mode 100644 index 0000000..49cf84a --- /dev/null +++ b/main/src/cgeo/geocaching/filter/AbstractFilter.java @@ -0,0 +1,29 @@ +package cgeo.geocaching.filter; + +import cgeo.geocaching.cgCache; + +import java.util.ArrayList; +import java.util.List; + +abstract class AbstractFilter implements IFilter { + private final String name; + + public AbstractFilter(String name) { + this.name = name; + } + + public void filter(List list) { + final List itemsToRemove = new ArrayList(); + for (cgCache item : list) { + if (!accepts(item)) { + itemsToRemove.add(item); + } + } + list.removeAll(itemsToRemove); + } + + @Override + public String getName() { + return name; + } +} diff --git a/main/src/cgeo/geocaching/filter/FilterBySize.java b/main/src/cgeo/geocaching/filter/FilterBySize.java new file mode 100644 index 0000000..a9d6036 --- /dev/null +++ b/main/src/cgeo/geocaching/filter/FilterBySize.java @@ -0,0 +1,23 @@ +package cgeo.geocaching.filter; + +import cgeo.geocaching.cgCache; +import cgeo.geocaching.enumerations.CacheSize; + +public class FilterBySize extends AbstractFilter { + private final CacheSize cacheSize; + + public FilterBySize(CacheSize cacheSize) { + super(cacheSize.id); + this.cacheSize = cacheSize; + } + + @Override + public boolean accepts(cgCache cache) { + return cacheSize == cache.getSize(); + } + + @Override + public String getName() { + return cacheSize.getL10n(); + } +} diff --git a/main/src/cgeo/geocaching/filter/FilterByTrackables.java b/main/src/cgeo/geocaching/filter/FilterByTrackables.java new file mode 100644 index 0000000..ad5c806 --- /dev/null +++ b/main/src/cgeo/geocaching/filter/FilterByTrackables.java @@ -0,0 +1,14 @@ +package cgeo.geocaching.filter; + +import cgeo.geocaching.cgCache; + +public class FilterByTrackables extends AbstractFilter { + public FilterByTrackables(String name) { + super(name); + } + + @Override + public boolean accepts(cgCache cache) { + return cache.hasTrackables(); + } +} diff --git a/main/src/cgeo/geocaching/filter/FilterByType.java b/main/src/cgeo/geocaching/filter/FilterByType.java new file mode 100644 index 0000000..6f6445e --- /dev/null +++ b/main/src/cgeo/geocaching/filter/FilterByType.java @@ -0,0 +1,23 @@ +package cgeo.geocaching.filter; + +import cgeo.geocaching.cgCache; +import cgeo.geocaching.enumerations.CacheType; + +public class FilterByType extends AbstractFilter { + private final CacheType cacheType; + + public FilterByType(final CacheType cacheType) { + super(cacheType.id); + this.cacheType = cacheType; + } + + @Override + public boolean accepts(final cgCache cache) { + return cacheType == cache.getType(); + } + + @Override + public String getName() { + return cacheType.getL10n(); + } +} diff --git a/main/src/cgeo/geocaching/filter/IFilter.java b/main/src/cgeo/geocaching/filter/IFilter.java new file mode 100644 index 0000000..abc2d50 --- /dev/null +++ b/main/src/cgeo/geocaching/filter/IFilter.java @@ -0,0 +1,18 @@ +package cgeo.geocaching.filter; + +import cgeo.geocaching.cgCache; + +import java.util.List; + +public interface IFilter { + + public abstract String getName(); + + /** + * @param cache + * @return true if the filter accepts the cache, false otherwise + */ + public abstract boolean accepts(final cgCache cache); + + public void filter(final List list); +} \ No newline at end of file diff --git a/main/src/cgeo/geocaching/filter/cgFilter.java b/main/src/cgeo/geocaching/filter/cgFilter.java deleted file mode 100644 index 62fe49c..0000000 --- a/main/src/cgeo/geocaching/filter/cgFilter.java +++ /dev/null @@ -1,34 +0,0 @@ -package cgeo.geocaching.filter; - -import cgeo.geocaching.cgCache; - -import java.util.ArrayList; -import java.util.List; - -public abstract class cgFilter { - private String name; - - public cgFilter(String name) { - this.name = name; - } - - /** - * @param cache - * @return true if the cache applies (passes the criteria), false else - */ - abstract boolean applyFilter(cgCache cache); - - public void filter(List list) { - List itemsToRemove = new ArrayList(); - for (cgCache item : list) { - if (!applyFilter(item)) { - itemsToRemove.add(item); - } - } - list.removeAll(itemsToRemove); - } - - public String getFilterName() { - return name; - } -} diff --git a/main/src/cgeo/geocaching/filter/cgFilterBySize.java b/main/src/cgeo/geocaching/filter/cgFilterBySize.java deleted file mode 100644 index eb754c6..0000000 --- a/main/src/cgeo/geocaching/filter/cgFilterBySize.java +++ /dev/null @@ -1,23 +0,0 @@ -package cgeo.geocaching.filter; - -import cgeo.geocaching.cgCache; -import cgeo.geocaching.enumerations.CacheSize; - -public class cgFilterBySize extends cgFilter { - private final CacheSize cacheSize; - - public cgFilterBySize(CacheSize cacheSize) { - super(cacheSize.id); - this.cacheSize = cacheSize; - } - - @Override - boolean applyFilter(cgCache cache) { - return this.cacheSize == cache.getSize(); - } - - @Override - public String getFilterName() { - return this.cacheSize.getL10n(); - } -} diff --git a/main/src/cgeo/geocaching/filter/cgFilterByTrackables.java b/main/src/cgeo/geocaching/filter/cgFilterByTrackables.java deleted file mode 100644 index 90cae99..0000000 --- a/main/src/cgeo/geocaching/filter/cgFilterByTrackables.java +++ /dev/null @@ -1,14 +0,0 @@ -package cgeo.geocaching.filter; - -import cgeo.geocaching.cgCache; - -public class cgFilterByTrackables extends cgFilter { - public cgFilterByTrackables(String name) { - super(name); - } - - @Override - boolean applyFilter(cgCache cache) { - return cache.hasTrackables(); - } -} diff --git a/main/src/cgeo/geocaching/filter/cgFilterByType.java b/main/src/cgeo/geocaching/filter/cgFilterByType.java deleted file mode 100644 index 6d18ed3..0000000 --- a/main/src/cgeo/geocaching/filter/cgFilterByType.java +++ /dev/null @@ -1,23 +0,0 @@ -package cgeo.geocaching.filter; - -import cgeo.geocaching.cgCache; -import cgeo.geocaching.enumerations.CacheType; - -public class cgFilterByType extends cgFilter { - private final CacheType cacheType; - - public cgFilterByType(final CacheType cacheType) { - super(cacheType.id); - this.cacheType = cacheType; - } - - @Override - boolean applyFilter(final cgCache cache) { - return cacheType == cache.getType(); - } - - @Override - public String getFilterName() { - return cacheType.getL10n(); - } -} -- cgit v1.1