OsmAnd/DataExtractionOSM/src/net/osmand/data/Amenity.java

160 lines
3.7 KiB
Java
Raw Normal View History

2011-05-06 12:33:45 +02:00
package net.osmand.data;
import java.util.Collection;
import java.util.List;
import net.osmand.Algoritms;
import net.osmand.osm.Entity;
import net.osmand.osm.MapRenderingTypes;
import net.osmand.osm.Node;
import net.osmand.osm.Relation;
import net.osmand.osm.OSMSettings.OSMTagKey;
public class Amenity extends MapObject {
private String subType;
private AmenityType type;
private String openingHours;
private String phone;
private String site;
public Amenity(Entity entity, AmenityType type, String subtype){
super(entity);
this.type = type;
this.subType = subtype;
this.openingHours = entity.getTag(OSMTagKey.OPENING_HOURS);
this.phone = entity.getTag(OSMTagKey.PHONE);
if (this.phone == null) {
this.phone = entity.getTag(OSMTagKey.CONTACT_PHONE);
}
this.site = entity.getTag(OSMTagKey.WIKIPEDIA);
if (this.site != null) {
if (!this.site.startsWith("http://")) { //$NON-NLS-1$
int i = this.site.indexOf(':');
if (i == -1) {
this.site = "http://en.wikipedia.org/wiki/" + this.site; //$NON-NLS-1$
} else {
this.site = "http://" + this.site.substring(0, i) + ".wikipedia.org/wiki/" + this.site.substring(i + 1); //$NON-NLS-1$ //$NON-NLS-2$
}
}
} else {
this.site = entity.getTag(OSMTagKey.WEBSITE);
if (this.site == null) {
this.site = entity.getTag(OSMTagKey.URL);
if (this.site == null) {
this.site = entity.getTag(OSMTagKey.CONTACT_WEBSITE);
}
}
}
}
@Override
public void setEntity(Entity e) {
super.setEntity(e);
// manipulate with id to distinguish way and nodes
this.id = (e.getId() << 1) + ((e instanceof Node)? 0 : 1);
}
public Amenity(){
}
public AmenityType getType(){
return type;
}
public String getSubType(){
return subType;
}
public void setType(AmenityType type) {
this.type = type;
}
public void setSubType(String subType) {
this.subType = subType;
}
public static List<Amenity> parseAmenities(Entity entity, List<Amenity> amenitiesList){
if(entity instanceof Relation){
// it could be collection of amenities
return amenitiesList;
}
Collection<String> keySet = entity.getTagKeySet();
if (!keySet.isEmpty()) {
int shift = 0;
for (String t : keySet) {
AmenityType type = MapRenderingTypes.getAmenityType(t, entity.getTag(t));
if (type != null) {
String subtype = MapRenderingTypes.getAmenitySubtype(t, entity.getTag(t));
Amenity a = new Amenity(entity, type, subtype);
if(checkAmenitiesToAdd(a, amenitiesList)){
amenitiesList.add(shift, a);
shift++;
}
} else {
type = MapRenderingTypes.getAmenityType(t, null);
if (type != null) {
String subtype = MapRenderingTypes.getAmenitySubtype(t, entity.getTag(t));
Amenity a = new Amenity(entity, type, subtype);
if(checkAmenitiesToAdd(a, amenitiesList)){
// add amenity to the end
amenitiesList.add(a);
}
}
}
}
}
return amenitiesList;
}
private static boolean checkAmenitiesToAdd(Amenity a, List<Amenity> amenitiesList){
// check amenity for duplication
for(Amenity b : amenitiesList){
if(b.getType() == a.getType() && Algoritms.objectEquals(a.getSubType(), b.getSubType())){
return false;
}
}
return true;
}
public String getOpeningHours() {
return openingHours;
}
public void setOpeningHours(String openingHours) {
this.openingHours = openingHours;
}
@Override
public String toString() {
return type.toString() + " : " + subType + " "+ getName();
}
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void doDataPreparation() {
}
}