// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.czechaddress.addressdatabase;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Element consisting of a number of streets (apart from houses inherited
* from {@link ElementWithHouse}).
*
* @author Radomir Cernoch radomir.cernoch@gmail.com
*/
public abstract class ElementWithStreets extends ElementWithHouses {
private ArrayList<Street> streets = new ArrayList<>();
public ElementWithStreets(String name) {
super(name);
}
/**
* Adds a new street into this element.
*/
public void addStreet(Street streetToAdd) {
//if (streetToAdd.getParent() instanceof ElementWithStreets)
streetToAdd.setParent(this);
streets.add(streetToAdd);
}
/**
* Adds new streets into this element.
*/
public void addStreets(Collection<Street> streetsToAdd) {
streets.ensureCapacity(streets.size() + streetsToAdd.size());
for (Street streetToAdd : streetsToAdd) {
addStreet(streetToAdd);
}
}
/**
* Replaces the internal list of streets with another one.
*/
public void setStreets(ArrayList<Street> streets) {
this.streets = streets;
for (Street street : streets) {
street.setParent(this);
}
}
/**
* Returns the list of streets.
*/
public List<Street> getStreets() {
return streets;
}
public List<Street> getAllStreets() {
return getStreets();
}
public Street findStreet(String streetName) {
if (streetName == null) return null;
streetName = streetName.toUpperCase();
for (Street street : streets) {
if (street.getName().toUpperCase().equals(streetName))
return street;
}
return null;
}
/**
* Returns all houses belonging directly to this element together
* with all houses from streets in this element.
*/
public List<House> getAllHouses() {
// We make an conservative estimate...
List<House> result = new ArrayList<>(20 * streets.size());
result.addAll(this.houses);
for (Street street : streets) {
result.addAll(street.getHouses());
}
return result;
}
}