package cz.papezzde.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import android.content.SharedPreferences;
import com.google.android.maps.GeoPoint;
import cz.papezzde.collection.FilterStrategy;
public class Environment {
/**
* LinkedHashMap has predictable order; use insertion-ordered
*/
private LinkedHashMap<String, Category> categoryHashMap = new LinkedHashMap<String, Category>();
private GeoPoint myLocation;
private FilterStrategy filterStrategy;
private String streetName;
private List<List<GeoPoint>> streetNetwork;
public ArrayList<ExtendedOverlayItem> getOverlayItemsByLayerName(String layerName) {
ArrayList<ExtendedOverlayItem> arr;
for(Category cat : categoryHashMap.values()){
if((arr = cat.getOverlayItemsByLayerID(layerName)) != null){
return arr;
}
}
return null;
}
public ArrayList<ExtendedOverlayItem> getAllVisibleOverlayItems(){
ArrayList<ExtendedOverlayItem> items = new ArrayList<ExtendedOverlayItem>();
for(Category cat : categoryHashMap.values()){
if(cat.isVisible()){
items.addAll(cat.getAllVisibleOverlayItems());
}
}
return items;
}
public ArrayList<ExtendedOverlayItem> getAllVisibleOverlayItemsFromCategory(
String catNameID) {
Category cat = categoryHashMap.get(catNameID);
if(cat != null){
return cat.getAllVisibleOverlayItems();
}else{
return null;
}
}
public Collection<Layer> getAllLayersFromVisibleCategories(){
Collection<Layer> items = new ArrayList<Layer>();
for(Category cat : categoryHashMap.values()){
if(cat.isVisible()){
items.addAll(cat.getAllLayers());
}
}
return items;
}
public Collection<Layer> getAllLayersFromCategory(String catName) {
Category cat = categoryHashMap.get(catName);
if (cat != null) {
return cat.getAllLayers();
}
return null;
}
public void loadAirDistanceAndDirection() {
for(Category c : categoryHashMap.values()){
c.refreshDistanceAndDirection(myLocation);
}
}
public void addCategory(Category c){
categoryHashMap.put(c.getNameID(), c);
}
public void setMyLocation(GeoPoint myLocation) {
this.myLocation = myLocation;
}
public GeoPoint getMyLocation() {
return myLocation;
}
/**
* Sets visibility of the named category or layer to specified value
* @param nameID of category or layer
* @param visibility to be set
*/
public void setVisibilityByNameID(CharSequence nameID, boolean visibility) {
Category c = categoryHashMap.get(nameID.toString());
if(c != null){
c.setVisible(visibility);
}else{
for(Category cat : categoryHashMap.values()){
Layer l = cat.getLayerByNameID(nameID.toString());
if(l != null){
l.setVisible(visibility);
return;
}
}
}
}
public Collection<Category> getCategories() {
return categoryHashMap.values();
}
public void setVisibilities(SharedPreferences prefs){
for(Category c : categoryHashMap.values()){
c.setVisible(prefs.getBoolean(c.getNameID(), false));
for(Layer l : c.getAllLayers()){
l.setVisible(prefs.getBoolean(l.getNameID(), false));
}
}
}
public Layer getLayerByNameID(String nameID){
for (Category c : categoryHashMap.values()) {
Layer l = c.getLayerByNameID(nameID);
if (l != null) {
return l;
}
}
return null;
}
public ArrayList<ExtendedOverlayItem> selectOverlayItemsFromLayer(
String name) {
Layer l = getLayerByNameID(name);
if (l != null) {
return l.getItems();
}
return null;
}
public ArrayList<ExtendedOverlayItem> filterItems(ArrayList<ExtendedOverlayItem> items) {
return filterStrategy.filter(items);
}
public void setStreetName(String streetName) {
this.streetName = streetName;
}
public String getStreetName() {
return streetName;
}
public void setFilterStrategy(FilterStrategy filterStrategy) {
this.filterStrategy = filterStrategy;
}
public void setStreetNetwork (List<List<GeoPoint>> streetNetwork) {
this.streetNetwork = streetNetwork;
}
public List<List<GeoPoint>> getStreetNetwork () {
return streetNetwork;
}
}
|