// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.front.geojson;
import java.util.List;
import javax.annotation.Nullable;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import fi.hsl.parkandride.core.domain.FacilityInfo;
import fi.hsl.parkandride.core.domain.Hub;
import fi.hsl.parkandride.core.domain.SearchResults;
public class FeatureCollection {
public static final Function<FacilityInfo, Feature> FACILITY_TO_FEATURE = new Function<FacilityInfo, Feature>() {
@Nullable
@Override
public Feature apply(@Nullable FacilityInfo facility) {
Feature feature = new Feature();
feature.geometry = facility.location;
feature.id = facility.id;
ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder();
builder.put("name", facility.name);
builder.put("status", facility.status);
builder.put("operatorId", facility.operatorId);
builder.put("builtCapacity", facility.builtCapacity);
builder.put("usages", facility.usages);
if (facility.statusDescription != null) {
builder.put("statusDescription", facility.statusDescription);
}
feature.properties = builder.build();
return feature;
}
};
public static final Function<Hub, Feature> HUB_TO_FEATURE = new Function<Hub, Feature>() {
@Nullable
@Override
public Feature apply(@Nullable Hub hub) {
Feature feature = new Feature();
feature.geometry = hub.location;
feature.id = hub.id;
feature.properties = ImmutableMap.of(
"name", hub.name,
"facilityIds", hub.facilityIds
);
return feature;
}
};
public static FeatureCollection ofFacilities(SearchResults<FacilityInfo> searchResults) {
return new FeatureCollection(Lists.transform(searchResults.results, FACILITY_TO_FEATURE), searchResults.hasMore);
}
public static FeatureCollection ofHubs(SearchResults<Hub> searchResults) {
return new FeatureCollection(Lists.transform(searchResults.results, HUB_TO_FEATURE), searchResults.hasMore);
}
public final boolean hasMore;
private final List<Feature> features;
public FeatureCollection(List<Feature> features, boolean hasMore) {
this.hasMore = hasMore;
this.features = features;
}
public boolean isHasMore() {
return hasMore;
}
public String getType() {
return "FeatureCollection";
}
public List<Feature> getFeatures() {
return features;
}
}